Liuxin@fmmu.edu.cn1DigitalImageProcessingMatlab应用图像处理Liuxin@fmmu.edu.cn2DigitalImageProcessingMatlaby基本知识Matlaby图像文件格式»BMP(WindowsBitmap)–Windows通用文件格式»JPEG(JointPhotographicExpertsGroup)–高度压缩的图像文件格式»TIFF(TaggedImageFileFormat)–主要适用于排版印刷»PCX(WindowsPaintbrush)»PNG(PortableNetworkGraphics)»HDF(HierarchicalDataFormat)»XWD(XWindowsDump)»GIF(GraphicsInterchangeFormat)Liuxin@fmmu.edu.cn3DigitalImageProcessingMatlab基本知识Matlab图像类型»索引图像–直接把像素值作为RGB调色板下标的图像。包括一个数据矩阵及一个颜色映像矩阵。»灰度图像–是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。(0~255)»RGB图像–真彩图像。用RGB三原色表示图像色彩信息。»二进制图像–显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。Liuxin@fmmu.edu.cn4DigitalImageProcessing图像示例Liuxin@fmmu.edu.cn5DigitalImageProcessing图像文件读取函数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’)Liuxin@fmmu.edu.cn6DigitalImageProcessing图像文件的写入(保存)函数imwrite可以将一幅图像写成一个Matlab支持的格式图像文件。Imwrite(X,MAP,Filename,’FMT’)»X:图像变量名»MAP:调色板»Filename:输出文件名»FMT:指定的存储格式Example:»Imwrite(I,’Test.bmp’)»Imwrite(I,’clown.png’,’BitDepth’,4)Liuxin@fmmu.edu.cn7DigitalImageProcessing图像文件的显示函数imshow可以自动对读入的图像进行调整显示,以获得最佳的显示效果。Imshow(I,[lowhigh])»I:待显示的图像»[lowhigh]:图像数据的值域显示灰度图像»Imshow(I,[100200])显示二值图像»Imshow(BW)显示索引图像»Imshow(X,map)显示真彩图像»Inshow(RGB)Liuxin@fmmu.edu.cn8DigitalImageProcessing图像显示举例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’);Liuxin@fmmu.edu.cn9DigitalImageProcessing图像增强-直方图处理直方图显示函数»Imhist(I,level)»I:图像矩阵»Level:灰度级数直方图均衡函数»Histeq(I)»I:待均衡的图像矩阵Liuxin@fmmu.edu.cn10DigitalImageProcessing直方图均衡举例I=imread(‘tire.tif’);»读取图像J=histeq(I);»直方图均衡图像Imshow(I);»显示原图像Figure,imshow(J);Figure,imshow(I,64);»显示图像的直方图Figure,imshow(J,64);Liuxin@fmmu.edu.cn11DigitalImageProcessing心血管造影(图像剪影)Orgin=imread(‘orgin.bmp’);Mask=imread(‘mask.bmp’);Result=imsubtract(orgin,mask);Figure,imshow(orgin);Figure,imshow(result);Liuxin@fmmu.edu.cn12DigitalImageProcessing图像求反运算[m,n]=size(orgin);orgintemp=double(orgin);fori=1:m%转换矩阵的每个像素forj=1:nf=orgintemp(i,j);g(i,j)=0;if(f=0)&(f=255)g(i,j)=y-k*f;elseg(i,j)=0;endendEndfigure;imshow(mat2gray(g));Liuxin@fmmu.edu.cn13DigitalImageProcessing图像的插值缩放通过函数imresize来实现对图像的放大和缩小。插值方法可以采用»最近邻域插值(Nearestneighborinterpolation)»双线性插值(Bilinearinterpolation)»双三次插值(Bicubicinterpolation)B=imresize(A,m,method)»A:原图像矩阵»M:放大倍数。–M1放大–M1缩小»Method:插值方法Example:»I1=imsize(I,1.5,’nearest’);Liuxin@fmmu.edu.cn14DigitalImageProcessing图像缩放实例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);Liuxin@fmmu.edu.cn15DigitalImageProcessing图像的插值旋转通过函数imrotate来实现对图像的放大和缩小。插值方法可以采用»最近邻域插值(Nearestneighborinterpolation)»双线性插值(Bilinearinterpolation)»双三次插值(Bicubicinterpolation)B=imrotate(A,angle,method)»A:原图像矩阵»angle:旋转角度。»Method:插值方法–默认的插值方法为NearestExample:»I1=imsize(I,30,’nearest’);Liuxin@fmmu.edu.cn16DigitalImageProcessing图像插值旋转实例I4=imrotate(I,30,'nearest');figure,imshow(I4);I5=imrotate(I,30,'bilinear');figure,imshow(I5);I6=imrotate(I,30,'bicubic');figure,imshow(I6);originnearestbilinearbicubicLiuxin@fmmu.edu.cn17DigitalImageProcessing空域滤波增强平滑滤波器»K=filter2(fspecial(‘average’,3),I)/255;–fspecial(‘average’,3):用来创建3x3的均值滤波器–Fspecial(h,I):滤波函数–I:原图像矩阵中值滤波器»K=medfilt2(I,[3,3]);–Medfilt2:中值滤波器–I:原图像矩阵–[3,3]:窗宽Liuxin@fmmu.edu.cn18DigitalImageProcessing空域均值滤波增强实例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);Origin3x35x57x7Liuxin@fmmu.edu.cn19DigitalImageProcessing空域中值滤波增强实例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);origin3x3Median5x5Median3x3AverageLiuxin@fmmu.edu.cn20DigitalImageProcessing傅里叶变换及实现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变换后的矩阵Liuxin@fmmu.edu.cn21DigitalImageProcessingFFT变换实例%创建图像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);Liuxin@fmmu.edu.cn22DigitalImageProcessingFFT变换实例%坐标轴平移OF=fftshift(FM);OF2=log(abs(OF));figure,imshow(OF2,[-1,5],'notruesize');colormap(jet);%图片保存imwrite(OF2,'C:\004.bmp');Liuxin@fmmu.edu.cn23DigitalImageProcessingMatlab预定义滤波器可以调用fspecial创建Matlab预定义的滤波器»h=fspecial(‘type’,parameters)typeparameters说明gaussianHsize,sigma标准差为sigma、大小为hsize的高斯低通滤波器sobel无近