MATLAB应用于数字图像分析和处理图像处理着重强调在图像之间进行的变换。•虽然人们常用图像处理泛指各种图像技术,但比较狭义的图像处理主要指对图像进行各种加工以改善图像的视觉效果并为自动识别打基础,或对图像进行压缩编码以减少对其所需存储空间或传输时间、传输路径的要求。图像分析则主要是对图像中感兴趣的目标进行检测和测量,以获得它们的客观信息,从而建立对图像的描述。•图像处理是一个从图像到图像的过程•图像分析是一个从图像到数据的过程MATLAB推出了功能更强大的适应于图像分析和处理的工具箱。利用此工具,我们可以方便地从各个方面对图像的性质进行深入的研究。在MATLAB中可用两种数据类型来存储图像:双精度型(double)和无符号8位整数型(uint8),图形命令对不同的数据类型做不同的处理。MATLAB支持的图形文件的格式包括:TIFF、BMP、JPEG、PCX、XWD和HDF;•MATLAB在图像处理中的应用都是由相应的MATLAB函数来实现。•下面讨论如何利用MATLAB处理数字图像。•支持的图像类型包括:索引图像、灰度图像、二进制图像、RGB图像。TIFF:TaggedImageFileFormat处理1、4、8、24位非压缩图像;处理1、4、8、24位packbit压缩图像;文件内容包括:四部分文件头(fileheader)、参数指针表和参数域、参数数据表和图像数据bmp:windowsbitmap1、4、8、24位压缩图像;文件内容包括:文件头、位图信息数据块和图像数据jpeg:jointphotographicexpertsgroup图像压缩格式pcx:windowspaintbrush处理1、4、8、24位图像数据文件内容包括:文件头、图像数据、扩展调色板数据1.数字图像文件操作和图像显示MATLAB提供了图像文件读入函数imread(),可用它来读入BMP、HDF、JPEG、PCX、TIFF、XWD等格式图像文件。•MATLAB还提供了imwrite()图像写出函数。显示图像函数有image()、imshow()等。I=imread('autumn.tif');image(I);x=imread('flowers.tif');imshow(x)rgb2gray()将rgb彩色图像转换为灰度图。clearall;x=imread('flowers.tif');imshow(x)x1=rgb2gray(x);figure;imshow(x1)imcontour()画图像数据轮廓线(等高线、等值线)clearall;x=imread('flowers.tif');imshow(x)x1=rgb2gray(x);figure;imshow(x1)figure;imcontour(x1)imhist()画图像灰度直方图figure;imhist(x1)比较两幅图像灰度直方图a=imread('tire.tif');figure;subplot(2,2,1);imshow(a);subplot(2,2,3);imhist(a);b=imread('lena256.bmp');subplot(2,2,2);imshow(b);subplot(2,2,4);imhist(b);灰度图像直方图比较2.图像的矩阵表示及基本运算MATLAB在处理图像时,都是以向量、矩阵、数组的形式来表示图像,并进行各种运算。•MATLAB提供了图像的和、差等线性运算,以及卷积、相关、滤波等非线性运算。例如,conv2(I,J)实现I、J两幅图像的卷积。3.图像的数据类型与图像显示1.无符号8位整型(uint8)图像数据的显示。x=imread('lena256.bmp');imshow(x);2.双精度(double)图像数据的显示。x=imread('lena256.bmp');x=double(x);imshow(x);*图像显示白色,原因是double类型数据只在0~1正常显示。需进行归一化。x=x/255;4.图像数据的运算(1)1.x=imread('lena256.bmp');x=x-100;???Errorusing==-Function'-'isnotdefinedforvaluesofclass'uint8'.uint8数据无法计算,必须转化为double类型。2.灰度值降低(降低亮度)x1=(double(x)-100)/255;imshow(x1);原始图像与降低亮度后图像4.图像数据的运算(2)3.灰度值提高(增加亮度)x2=(double(x)+100)/255;imshow(x2);4.图像数据的运算(3)3.灰度动态范围降低(降低对比度)方法:使用一次直线映射假设原图像动态范围0~M,降低灰度动态范围后动态范围0~M/2,说明映射函数为:y=x/2注意:数据类型必须是double类型!思考:编写程序完成4.图像数据的运算(4)4.灰度动态范围扩展(提高对比度)方法:使用一次直线映射假设原图像动态范围0~M,扩展灰度动态范围后动态范围0~1.5M,说明映射函数为:y=1.5*x注意:数据类型必须是double类型!思考:编写程序完成5.图像增强MATLAB提供了Gamma校正、中值滤波、对比度调整、直方图均衡、自适应滤波等对图像进行处理。•函数imadjust()为对比度调整函数,用于调整灰度值或颜色图。1.对比度增强Imadjust()调整图像亮度值或彩色图J=imadjust(I,[low_inhigh_in],[low_outhigh_out],gamma)RGB2=imadjust(RGB1,...)clear;x=imread('lena256.bmp');imshow(x);y=imadjust(x);figure;imshow(y)调整图像灰度动态范围灰度动态范围扩展(增强对比度)clear;x=imread('lena256.bmp');imshow(x);y=imadjust(x,[0.30.7],[]);figure;imshow(y)RGB1=imread('football.jpg');RGB2=imadjust(RGB1,[.2.30;.6.71],[]);figure;subplot(211);imshow(RGB1)subplot(212);imshow(RGB2)调整彩色图色调(自学)直方图均衡化是图像处理中很重要的研究内容,它通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度。图像的灰度统计直方图是1个1-D的离散函数.2.直方图均衡化直方图均衡化函数histeq()clear;x=imread('lena256.bmp');imshow(x);y=histeq(x);figure;imshow(y)6.图像的空域滤波(平滑和锐化)图像的平滑主要用于噪声图像的降噪。图像的锐化主要用于图像的边缘增强。方法:图像的二维卷积函数格式:Y=CONV2(X,D,'shape')其中:X为待处理的二维图像,数据类型为double.D为滤波模板,为(2N+1)*(2N+1)的方阵.'shape'选项通常选'same'.Y为处理后的二维图像.(1)图像平滑用于对由于受噪声干扰而质量降低的图像降噪•低通滤波法、局部平均法、多帧平均法等(1.)图像加噪函数imnoise()J=imnoise(I,'type',…)常用噪声类型:gaussian高斯噪声salt&petter盐椒噪声speckle乘法噪声x=imread('lena256.bmp');x1=imnoise(x,'gaussian',0,0.002);x2=imnoise(x,'salt&pepper',0.02);figure;subplot(121);imshow(x1);subplot(122);imshow(x2);程序(2.)邻域平均平滑滤波方法:图像的二维卷积函数格式:Y=CONV2(X,D,'shape')其中:X为待处理的二维图像,数据类型为double;Y为处理后的二维图像.'shape'选项通常选'same'.D为滤波模板,通常为3*3,5*5,7*7的方阵。邻域平均滤波模板11111119111D平滑模板所有元素均为正数。为保证运算后灰度范围不变,要求模板所有元素之和为1.程序x=imread('lena256.bmp');x=double(x)/255;x1=imnoise(x,'gaussian',0,0.002);D=ones(3)/9;x2=conv2(x1,D,'same');figure;subplot(121);imshow(x1);xlabel('加高斯噪声后的图像');subplot(122);imshow(x2);xlabel('平滑滤波后的图像');可见,降噪的同时图像模糊了,随着模板的尺寸增大,降噪的效果增强,但图像也更加模糊.(3)二维中值滤波medfilt2()x=imread('lena256.bmp');x=double(x)/255;x1=imnoise(x,'gaussian',0,0.002);D=ones(3)/9;x2=conv2(x1,D,'same');x3=medfilt2(x1,[33]);figure;subplot(221);imshow(x);xlabel('原始图像');subplot(222);imshow(x1);xlabel('加高斯噪声后的图像');subplot(223);imshow(x2);xlabel('邻域平均平滑滤波后的图像');subplot(224);imshow(x3);xlabel('中值滤波后的图像');可见,中值滤波效果优于领域平均平滑滤波.(5)锐化滤波(边缘增强)锐化滤波模板111191111D锐化模板中心元素为正,其它为负。为保证运算后灰度范围不变,要求模板所有元素之和为1.x=imread('lena256.bmp');x=double(x)/255;D=[-1-1-1;-19-1;-1-1-1];x1=conv2(x,D,'same');figure;subplot(121);imshow(x);xlabel('原始图像');subplot(122);imshow(x1-x);xlabel('锐化滤波后的图像');可见,经锐化滤波后图像的边缘得到增强.图像的空间分辨率程序如下:x=imread('lena256.bmp');[mx,nx]=size(x),y=x(1:3:mx,1:3:nx);[my,ny]=size(y),figure;subplot(121);imshow(x);subplot(122);imshow(y);通过降低采样率降低空间分辨率mx=256nx=256my=86ny=86明显可见空间分辨率降低,图像边缘出现马赛克的现象.图像的特殊处理马赛克程序如下:x=imread('lena256.bmp');%读入图像x=double(x)/255;%转换为双精度并归一化y=x(101:200,101:200);%取出人脸矩阵yjg=10;%定义马赛克方块的尺寸[m,n]=size(y);%提取图像矩阵大小z=zeros(size(y));%给输出矩阵分配空间z(1:jg:m,1:jg:n)=y(1:jg:m,1:jg:n);%提取原始图像对应各马赛克左上角数据给目标图像z(1:jg,1:jg)=z(1,1);%对第一块进行马赛克处理subplot(121);imshow(y);subplot(122);imshow(z);%显示结果