您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > Matlab应用图像处理2011.
Matlab应用--图像处理Matlaby基本知识Matlaby图像文件格式»BMP(WindowsBitmap).bmp–Windows通用文件格式»JPEG(JointPhotographicExpertsGroup).jpg–高度压缩的图像文件格式»TIFF(TaggedImageFileFormat).tif–主要适用于排版印刷»PCX(WindowsPaintbrush)»PNG(PortableNetworkGraphics)»HDF(HierarchicalDataFormat)»XWD(XWindowsDump)»GIF(GraphicsInterchangeFormat)Matlab基本知识Matlab图像类型»索引图像–直接把像素值作为RGB调色板下标的图像。包括一个数据矩阵及一个颜色映像矩阵。»灰度图像–是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。(0~255)»RGB图像–真彩图像。用RGB三原色表示图像色彩信息。»二进制图像–显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。图像示例图像文件读取函数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’)图像文件的写入(保存)函数imwrite可以将一幅图像写成一个Matlab支持的格式图像文件。Imwrite(X,MAP,Filename,’FMT’)»X:图像变量名»MAP:调色板»Filename:输出文件名»FMT:指定的存储格式Example:»Imwrite(I,’Test.bmp’)»Imwrite(I,’clown.png’,’BitDepth’,4)图像文件的显示函数imshow可以自动对读入的图像进行调整显示,以获得最佳的显示效果。Imshow(I,[lowhigh])»I:待显示的图像»[lowhigh]:图像数据的值域显示灰度图像»Imshow(I,[100200])显示二值图像»Imshow(BW)显示索引图像»Imshow(X,map)显示真彩图像»Inshow(RGB)图像显示举例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’);图像增强-直方图处理直方图显示函数»Imhist(I,level)»I:图像矩阵»Level:灰度级数直方图均衡函数»Histeq(I)»I:待均衡的图像矩阵直方图均衡举例I=imread(‘tire.tif’);»读取图像J=histeq(I);»直方图均衡图像Imshow(I);»显示原图像Figure,imshow(J);Figure,imshow(I,64);»显示图像的直方图Figure,imshow(J,64);心血管造影(图像剪影)Orgin=imread(‘orgin.bmp’);Mask=imread(‘mask.bmp’);Result=imsubtract(orgin,mask);Figure,imshow(orgin);Figure,imshow(result);图像求反运算[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));图像的插值缩放通过函数imresize来实现对图像的放大和缩小。插值方法可以采用»最近邻域插值(Nearestneighborinterpolation)»双线性插值(Bilinearinterpolation)»双三次插值(Bicubicinterpolation)B=imresize(A,m,method)»A:原图像矩阵»M:放大倍数。–M1放大–M1缩小»Method:插值方法Example:»I1=imsize(I,1.5,’nearest’);图像缩放实例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);图像的插值旋转通过函数imrotate来实现对图像的放大和缩小。插值方法可以采用»最近邻域插值(Nearestneighborinterpolation)»双线性插值(Bilinearinterpolation)»双三次插值(Bicubicinterpolation)B=imrotate(A,angle,method)»A:原图像矩阵»angle:旋转角度。»Method:插值方法–默认的插值方法为NearestExample:»I1=imsize(I,30,’nearest’);图像插值旋转实例I4=imrotate(I,30,'nearest');figure,imshow(I4);I5=imrotate(I,30,'bilinear');figure,imshow(I5);I6=imrotate(I,30,'bicubic');figure,imshow(I6);originnearestbilinearbicubic空域滤波增强平滑滤波器»K=filter2(fspecial(‘average’,3),I)/255;–fspecial(‘average’,3):用来创建3x3的均值滤波器–Fspecial(h,I):滤波函数–I:原图像矩阵中值滤波器»K=medfilt2(I,[3,3]);–Medfilt2:中值滤波器–I:原图像矩阵–[3,3]:窗宽空域均值滤波增强实例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);Origin3x35x57x7空域中值滤波增强实例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);origin3x3Median5x5Median3x3Average傅里叶变换及实现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变换后的矩阵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);FFT变换实例%坐标轴平移OF=fftshift(FM);OF2=log(abs(OF));figure,imshow(OF2,[-1,5],'notruesize');colormap(jet);%图片保存imwrite(OF2,'C:\004.bmp');Matlab预定义滤波器可以调用fspecial创建Matlab预定义的滤波器»h=fspecial(‘type’,parameters)typeparameters说明gaussianHsize,sigma标准差为sigma、大小为hsize的高斯低通滤波器sobel无近似计算垂直梯度光滑效应的水平边缘算子prewitt无近似计算垂直梯度水平边缘算子laplacianalpha系数由alpha(0.0~1.0)决定的二维拉普拉斯算子logHsize,sigma标准差为sigma、大小为hsize的高斯滤波旋转对称拉氏算子averagehsize均值滤波diskradius有(radius*2+1)个边的圆形均值滤波器motionLen,theta按照角度theta移动len个像素的运动滤波器频率变换方式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);Wiener滤波对图像进行魏纳滤波主要是消除图像中存在的噪声。利用Matlib的wiener2函数可对一幅图像进行自适应魏纳滤波。J=wiener2(I,[M,N],NOISE)»I:输入图像»[M,N]:表示卷积使用的邻域大小,缺省为[3,3]。»NOISE:噪声强度,如果不指定,wiener2返回一个估计的噪声强度。Wiener滤波实例I=imread('C:\wiener.bmp');Imshow(I);%施加高斯噪声J=imnoise(I,'gaussian',0,0.005);figure,imshow(J);%Wiener滤波K=wiener2(J,[55]);figure,imshow(K);Radon变化Radon变化类似于Hough变化,用于检测图像中的直线[Rxp]=radon(I,theta,N)»I:需变换的图像»Theta:需变换的角度»N:指定变换的点数(缺省)»Xp:沿X轴的坐标Radon变化实例I=imread(‘radon.bmp’);imshow(I);%提取物体的轮廓边缘B
本文标题:Matlab应用图像处理2011.
链接地址:https://www.777doc.com/doc-3339879 .html