1 / 35

Matlab 应用图像处理

Matlab 应用图像处理. 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)

gram
Download Presentation

Matlab 应用图像处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Matlab应用图像处理

  2. 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)

  3. Matlab基本知识 • Matlab图像类型 • 索引图像 • 直接把像素值作为RGB调色板下标的图像。包括一个数据矩阵及一个颜色映像矩阵。 • 灰度图像 • 是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。(0~255) • RGB图像 • 真彩图像。用RGB三原色表示图像色彩信息。 • 二进制图像 • 显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。

  4. 图像示例

  5. 图像文件读取 • 函数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’)

  6. 图像文件的写入(保存) • 函数imwrite可以将一幅图像写成一个Matlab支持的格式图像文件。 • Imwrite(X,MAP,Filename,’FMT’) • X:图像变量名 • MAP:调色板 • Filename:输出文件名 • FMT:指定的存储格式 • Example: • Imwrite(I,’Test.bmp’) • Imwrite(I,’clown.png’,’BitDepth’,4)

  7. 图像文件的显示 • 函数imshow可以自动对读入的图像进行调整显示,以获得最佳的显示效果。 • Imshow(I,[low high]) • I:待显示的图像 • [low high]:图像数据的值域 • 显示灰度图像 • Imshow(I,[100 200]) • 显示二值图像 • Imshow(BW) • 显示索引图像 • Imshow(X,map) • 显示真彩图像 • Inshow(RGB)

  8. 图像显示举例 • 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’);

  9. 图像增强-直方图处理 • 直方图显示函数 • Imhist(I,level) • I:图像矩阵 • Level:灰度级数 • 直方图均衡函数 • Histeq(I) • I:待均衡的图像矩阵

  10. 直方图均衡举例 • I=imread(‘tire.tif’); • 读取图像 • J=histeq(I); • 直方图均衡图像 • Imshow(I); • 显示原图像 • Figure,imshow(J); • Figure,imshow(I,64); • 显示图像的直方图 • Figure,imshow(J,64);

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

  12. 图像求反运算 [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 end End figure;imshow(mat2gray(g));

  13. 图像的插值缩放 • 通过函数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’);

  14. 图像缩放实例 • 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);

  15. 图像的插值旋转 • 通过函数imrotate来实现对图像的放大和缩小。 • 插值方法可以采用 • 最近邻域插值(Nearest neighbor interpolation) • 双线性插值(Bilinear interpolation) • 双三次插值(Bicubic interpolation) • B= imrotate(A,angle,method) • A:原图像矩阵 • angle:旋转角度。 • Method:插值方法 • 默认的插值方法为Nearest • Example: • I1=imsize(I,30,’nearest’);

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

  17. 空域滤波增强 • 平滑滤波器 • K=filter2(fspecial(‘average’,3),I)/255; • fspecial(‘average’,3):用来创建3x3的均值滤波器 • Fspecial(h,I):滤波函数 • I:原图像矩阵 • 中值滤波器 • K=medfilt2(I,[3,3]); • Medfilt2:中值滤波器 • I:原图像矩阵 • [3,3]:窗宽

  18. 5x5 3x3 Origin 7x7 空域均值滤波增强实例 • 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);

  19. 3x3 Average 5x5 Median origin 3x3 Median 空域中值滤波增强实例 • 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);

  20. 傅里叶变换及实现 • 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变换后的矩阵

  21. 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);

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

  23. Matlab预定义滤波器 • 可以调用fspecial创建Matlab预定义的滤波器 • h= fspecial(‘type’,parameters)

  24. 频率变换方式 • 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);

  25. Wiener滤波 • 对图像进行魏纳滤波主要是消除图像中存在的噪声。利用Matlib的wiener2函数可对一幅图像进行自适应魏纳滤波。 • J=wiener2(I,[M,N],NOISE) • I:输入图像 • [M,N]:表示卷积使用的邻域大小,缺省为[3,3]。 • NOISE:噪声强度,如果不指定, wiener2返回一个估计的噪声强度。

  26. 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);

  27. Radon变化 • Radon变化类似于Hough变化,用于检测图像中的直线 • [R xp]=radon(I,theta,N) • I:需变换的图像 • Theta:需变换的角度 • N:指定变换的点数(缺省) • Xp:沿X轴的坐标

  28. 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);

  29. Radon逆变换 • Radon逆变换可以根据投影数据重建图像,在X射线断层分析中常常使用。 • R=radon(I,theta); • IR=iradon(R,theta);

  30. 图像复原—模糊及噪声 • 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);

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

  32. 图像复原—魏纳滤波复原 • 通过调用deconvwnr函数可以利用魏纳滤波方法对图像进行复原处理。当图像的频率特性和噪声已知时,效果非常好。 • J= deconvwnr(I,PSF,NCORR,ICORR) • J= deconvwnr(I,PSF,NSR) • I:输入图像 • PSF:点扩散函数 • 缺省参数 • NSR:信噪比(默认0) • NCORR:噪声的自相关函数 • ICORR:原始图像的自相关函数

  33. 魏纳滤波复原实例 • 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);

  34. 边缘检测 • 可以使用Matlab的edge函数进行边缘检测。Edge可以提供许多微分算子模板,指定其是对水平边缘还是垂直边缘敏感。 ddge函数在边缘检测时还可以指定一个域值,只有满足这个域值的点才作为边缘点。 • Bw=EDGE(I,’type’,parmeter) • I:输入图像 • Type:算子类型 • Parmeter:与算子有关的具体参数 • Example • BW=edge(I,’Sobel’,THRESH,DIRECTION)

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

More Related