Download ppt - Matlab 应用图像处理

Transcript
Page 1: Matlab 应用图像处理

[email protected] 1Digital Image Processing

Matlab 应用图像处理

Page 2: Matlab 应用图像处理

[email protected] 2Digital Image Processing

Matlaby 基本知识 Matlaby 图像文件格式

» BMP(Windows Bitmap)– Windows 通用文件格式

» JPEG(Joint Photographic Experts Group)– 高度压缩的图像文件格式

» TIFF(Tagged Image File Format)– 主要适用于排版印刷

» PCX(Windows Paintbrush)» PNG(Portable Network Graphics)» HDF(Hierarchical Data Format)» XWD(X Windows Dump)» GIF(Graphics Interchange Format)

Page 3: Matlab 应用图像处理

[email protected] 3Digital Image Processing

Matlab 基本知识 Matlab 图像类型

» 索引图像– 直接把像素值作为 RGB 调色板下标的图像。包括一个数据矩阵及

一个颜色映像矩阵。» 灰度图像

– 是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。( 0~255 )

» RGB 图像– 真彩图像。用 RGB 三原色表示图像色彩信息。

» 二进制图像– 显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和

蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。

Page 4: Matlab 应用图像处理

[email protected] 4Digital Image Processing

图像示例

Page 5: Matlab 应用图像处理

[email protected] 5Digital Image Processing

图像文件读取 函数 imread 可以从任何 Matlab 支持的图像文件格式中以任意位

深度读取一幅图像。 [X,MAP]=imread(Filename,’FMT’)

» Filename: 读入的文件名。» FMT 为图像格式,如果不指定 FMT 参数,系统将根据文件名

自动判断图像类型。» 输出参数 X :存储图像数据的矩阵名。» MAP: 当图像为索引图像时, MAP 为该图像的调色板。

Example:» RGB=imread(‘flowers.tif’)» I=imread(‘moon.tif’)» [X,map]=imread(‘canoe.tif’)

Page 6: Matlab 应用图像处理

[email protected] 6Digital Image Processing

图像文件的写入(保存) 函数 imwrite 可以将一幅图像写成一个 Matlab 支持的格式图像文

件。 Imwrite(X,MAP,Filename,’FMT’)

» X: 图像变量名» MAP: 调色板» Filename: 输出文件名» FMT: 指定的存储格式

Example:» Imwrite(I,’Test.bmp’)» Imwrite(I,’clown.png’,’BitDepth’,4)

Page 7: Matlab 应用图像处理

[email protected] 7Digital Image Processing

图像文件的显示 函数 imshow 可以自动对读入的图像进行调整显示,以获得最佳的

显示效果。 Imshow(I,[low high])

» I: 待显示的图像» [low high]: 图像数据的值域

显示灰度图像» Imshow(I,[100 200])

显示二值图像» Imshow(BW)

显示索引图像» Imshow(X,map)

显示真彩图像» Inshow(RGB)

Page 8: Matlab 应用图像处理

[email protected] 8Digital Image Processing

图像显示举例 Example:

» BW1=zeors(20,20);» BW1(2:2:18,2:2:18)=1;» Imshow(BW1,’notruesize’);» Imshow(~BW1,’ notruesize’);» Imshow(I,[100,200]);

利用不同的窗体显示图像» Figure; Imshow(~BW1,’ notruesize’);

Page 9: Matlab 应用图像处理

[email protected] 9Digital Image Processing

图像增强 - 直方图处理

直方图显示函数» Imhist(I,level)» I: 图像矩阵» Level: 灰度级数

直方图均衡函数» Histeq(I)» I: 待均衡的图像矩阵

Page 10: Matlab 应用图像处理

[email protected] 10Digital Image Processing

直方图均衡举例 I=imread(‘tire.tif’);

» 读取图像 J=histeq(I);

» 直方图均衡图像 Imshow(I);

» 显示原图像 Figure,imshow(J); Figure,imshow(I,64);

» 显示图像的直方图 Figure,imshow(J,64);

Page 11: Matlab 应用图像处理

[email protected] 11Digital Image Processing

心血管造影(图像剪影) Orgin=imread(‘orgin.bmp’); Mask=imread(‘mask.bmp’); Result=imsubtract(orgin,mask); Figure,imshow(orgin); Figure,imshow(result);

Page 12: Matlab 应用图像处理

[email protected] 12Digital Image Processing

图像求反运算[m,n]=size(orgin);orgintemp=double(orgin);for i=1:m % 转换矩阵的每个像素 for j=1:n f=orgintemp(i,j); g(i,j)=0; if(f>=0)&(f<=255) g(i,j)=y-k*f; else g(i,j)=0; end endEndfigure;imshow(mat2gray(g));

Page 13: Matlab 应用图像处理

[email protected] 13Digital Image Processing

图像的插值缩放 通过函数 imresize 来实现对图像的放大和缩小。 插值方法可以采用

» 最近邻域插值 (Nearest neighbor interpolation)» 双线性插值 (Bilinear interpolation)» 双三次插值 (Bicubic interpolation)

B=imresize(A,m,method)» A: 原图像矩阵» M: 放大倍数。

– M>1 放大– M<1 缩小

» Method: 插值方法 Example:

» I1=imsize(I,1.5,’nearest’);

Page 14: Matlab 应用图像处理

[email protected] 14Digital Image Processing

图像缩放实例 I=imread(‘zoom.bmp’); Imshow(I); I1=imresize(I,2,'bilinear'); figure,imshow(I1); I2=imresize(I,2,'bicubic'); figure,imshow(I2); I3=imresize(I,2,'nearest'); figure,imshow(I3);

Page 15: Matlab 应用图像处理

[email protected] 15Digital Image Processing

图像的插值旋转 通过函数 imrotate 来实现对图像的放大和缩小。 插值方法可以采用

» 最近邻域插值 (Nearest neighbor interpolation)» 双线性插值 (Bilinear interpolation)» 双三次插值 (Bicubic interpolation)

B= imrotate(A,angle,method)» A: 原图像矩阵» angle : 旋转角度。» Method: 插值方法

– 默认的插值方法为 Nearest

Example:» I1=imsize(I,30,’nearest’);

Page 16: Matlab 应用图像处理

[email protected] 16Digital Image Processing

图像插值旋转实例 I4=imrotate(I,30,'nearest'); figure,imshow(I4); I5=imrotate(I,30,'bilinear'); figure,imshow(I5); I6=imrotate(I,30,'bicubic'); figure,imshow(I6);

origin nearest bilinear bicubic

Page 17: Matlab 应用图像处理

[email protected] 17Digital Image Processing

空域滤波增强 平滑滤波器

» K=filter2(fspecial(‘average’,3),I)/255;– fspecial(‘average’,3): 用来创建 3x3 的均值滤波器– Fspecial(h,I): 滤波函数– I: 原图像矩阵

中值滤波器» K=medfilt2(I,[3,3]);

– Medfilt2 :中值滤波器– I: 原图像矩阵– [3,3]: 窗宽

Page 18: Matlab 应用图像处理

[email protected] 18Digital Image Processing

空域均值滤波增强实例 N3=filter2(fspecial('average',3),I)/255; figure,imshow(N3); N5=filter2(fspecial('average',5),I)/255; figure,imshow(N5); N7=filter2(fspecial('average',7),I)/255; figure,imshow(N7);

Origin 3x3 5x5 7x7

Page 19: Matlab 应用图像处理

[email protected] 19Digital Image Processing

空域中值滤波增强实例 K3=medfilt2(K,[3,3]); figure,imshow(K3); K5=medfilt2(K,[5,5]); figure,imshow(K5); M3=filter2(fspecial('average',3),K)/255; figure,imshow(M3);

origin 3x3 Median 5x5 Median

3x3 Average

Page 20: Matlab 应用图像处理

[email protected] 20Digital Image Processing

傅里叶变换及实现 Matlib 函数 fft 、 fft2 、 fftn 分别可以实现一维、二维和 N 维

DFT 快速傅里叶变化算法。 函数 ifft 、 ifft2 、 ifftn 则用来计算反 DFT ,它们是以需要进行反

变换的图像作为输入参数,计算得到输出图像。 A=fft(X,N,DIM)

» X: 输入图像» N: 采样间隔点» DIM: 进行离散傅里叶变化的维数

A=fft2(X,MROWS,NCOLS)» X: 输入图像» MROWS: 采样行数» NCOLS: 采样列数

O=fftshift(A)» A:fft 变换后的矩阵

Page 21: Matlab 应用图像处理

[email protected] 21Digital Image Processing

FFT 变换实例 % 创建图像 f=zeros(30,30); f(5:24,13:17)=1; imshow(f,'notruesize'); %fft 变换 F=fft2(f); F2=log(abs(F)); figure,imshow(F2,[-1,5],'notruesize'); % 加入伪彩显示 colormap(jet); % 等间隔采样变换 FM=fft2(f,256,256); FM2=log(abs(FM)); figure,imshow(FM2,[-1,5],'notruesize'); colormap(jet);

Page 22: Matlab 应用图像处理

[email protected] 22Digital Image Processing

FFT 变换实例 % 坐标轴平移 OF=fftshift(FM); OF2=log(abs(OF)); figure,imshow(OF2,[-1,5],'notruesize'); colormap(jet); % 图片保存 imwrite(OF2,'C:\004.bmp');

Page 23: Matlab 应用图像处理

[email protected] 23Digital Image Processing

Matlab 预定义滤波器 可以调用 fspecial 创建 Matlab 预定义的滤波器

» h= fspecial(‘type’,parameters)

type parameters 说明gaussian Hsize,sigma 标准差为 sigma 、大小为 hsize 的高斯低通滤

波器sobel 无 近似计算垂直梯度光滑效应的水平边缘算子prewitt 无 近似计算垂直梯度水平边缘算子laplacian alpha 系数由 alpha(0.0~1.0) 决定的二维拉普拉斯

算子log Hsize,sigma 标准差为 sigma 、大小为 hsize 的高斯滤波旋

转对称拉氏算子average hsize 均值滤波disk radius 有 (radius*2+1) 个边的圆形均值滤波器motion Len,theta 按照角度 theta 移动 len 个像素的运动滤波器

Page 24: Matlab 应用图像处理

[email protected] 24Digital Image Processing

频率变换方式 I=imread(‘c:\wiener.bmp’); Imshow(I); % 构造一个权值全部为 1 的 5X5 滤波器进行均值滤波 H=ones(5,5)/25; I2=imfilter(I,H); Figure,imshow(I2); % 可利用彩色增强 rgb=imread(‘rgb.bmp’); Imshow(rgb); % 构造一个权值全部为 1 的 5X5 滤波器进行均值滤波 H=ones(5,5)/25; rgb2=imfilter(rgb,H); Figure,imshow(rgb2);

Page 25: Matlab 应用图像处理

[email protected] 25Digital Image Processing

Wiener 滤波 对图像进行魏纳滤波主要是消除图像中存在的噪声。利用 Matlib

的 wiener2 函数可对一幅图像进行自适应魏纳滤波。 J=wiener2(I,[M,N],NOISE)

» I: 输入图像» [M,N]: 表示卷积使用的邻域大小,缺省为 [3,3]。» NOISE:噪声强度,如果不指定, wiener2返回一个估计的噪声强度

Page 26: Matlab 应用图像处理

[email protected] 26Digital Image Processing

Wiener 滤波实例 I=imread('C:\wiener.bmp'); Imshow(I); %施加高斯噪声 J=imnoise(I,'gaussian',0,0.005); figure,imshow(J); %Wiener 滤波 K=wiener2(J,[5 5]); figure,imshow(K);

Page 27: Matlab 应用图像处理

[email protected] 27Digital Image Processing

Radon 变化 Radon 变化类似于 Hough 变化,用于检测图像中的直线 [R xp]=radon(I,theta,N)

» I :需变换的图像» Theta: 需变换的角度» N: 指定变换的点数(缺省)» Xp: 沿 X 轴的坐标

Page 28: Matlab 应用图像处理

[email protected] 28Digital Image Processing

Radon 变化实例 I=imread(‘radon.bmp’); imshow(I); %提取物体的轮廓边缘 BW=edge(I); Figure,imshow(BW) % 计算图像的 Radon 变换 Theta=1:179 % 变换的角度范围 [R,xp]=radon(BW,theta); figure,imagesc(theta,xp,R);

Page 29: Matlab 应用图像处理

[email protected] 29Digital Image Processing

Radon 逆变换 Radon逆变换可以根据投影数据重建图像,在 X 射线断层分析中常常使用。

R=radon(I,theta); IR=iradon(R,theta);

Page 30: Matlab 应用图像处理

[email protected] 30Digital Image Processing

图像复原—模糊及噪声 I=imread(‘noise.bmp’); % 采用运动滤波 PSF 进行模糊 H=fspecial(‘motion’,50,45); MotionBlur=imfilter(I,H); Figure,imshow(MotionBlur); % 采用均值滤波 PSF 进行模糊 H=fspecial(‘disk’,10); AverageBlur=imfilter(I,H); Figure,imshow(AverageBlur); %噪声的添加 V=.02; Noisy=imnoise(I,’gaussian’,0,V); Figure,imshow(Noisy);

Page 31: Matlab 应用图像处理

[email protected] 31Digital Image Processing

图像复原—模糊及噪声 (图 )

Page 32: Matlab 应用图像处理

[email protected] 32Digital Image Processing

图像复原—魏纳滤波复原 通过调用 deconvwnr 函数可以利用魏纳滤波方法对图像进行复原处理。当图像的频率特性和噪声已知时,效果非常好。

J= deconvwnr(I,PSF,NCORR,ICORR) J= deconvwnr(I,PSF,NSR)

» I: 输入图像» PSF: 点扩散函数» 缺省参数

– NSR: 信噪比(默认 0 )– NCORR:噪声的自相关函数– ICORR: 原始图像的自相关函数

Page 33: Matlab 应用图像处理

[email protected] 33Digital Image Processing

魏纳滤波复原实例 Blurred=imread(‘blure.bmp’); % 构造 PSF模型 Len=31; Theta=11; PSF=fspecial(‘motion’,Len,Theta); Wnr1=deconvwnr(Blurred,PSF); figure,imshow(wnr1); % 不正确的 PSF模型(通常 PSF未知) Wnr2=deconvwnr(Blurred, fspecial(‘motion’,2*Len,Theta)); Figure,imshow(wnr2); Wnr3=deconvwnr(Blurred, fspecial(‘motion’, Len,2*Theta)); Figure,imshow(wnr3);

Page 34: Matlab 应用图像处理

[email protected] 34Digital Image Processing

边缘检测 可以使用 Matlab 的 edge 函数进行边缘检测。 Edge 可以提供许多微分算子模板,指定其是对水平边缘还是垂直边缘敏感。 ddge函数在边缘检测时还可以指定一个域值 ,只有满足这个域值的点才作为边缘点。

Bw=EDGE(I,’type’,parmeter)» I: 输入图像» Type: 算子类型» Parmeter:与算子有关的具体参数

Example» BW=edge(I,’Sobel’,THRESH,DIRECTION)

Page 35: Matlab 应用图像处理

[email protected] 35Digital Image Processing

边缘检测实例 I=imread(edge.bmp); BW1=edge(I,’sobel’); BW2=edge(I,’canny’); Figure,imshow(BW1); Figure,imshow(BW2);


Recommended