1、数字图像实际上是一组有序离散的数据,数字图像实际上是一组有序离散的数据,Matlab是一是一种基于向量(数组)而不是标量的高级程序语言,因而种基于向量(数组)而不是标量的高级程序语言,因而Matlab从本质上就提供了对图像的支持。使用从本质上就提供了对图像的支持。使用Matlab可可以对这些离散数据形成的矩阵进行一次性的处理。以对这些离散数据形成的矩阵进行一次性的处理。一、图像处理的基础知识。二、Matlab图像处理工具箱简介二、Matlab进行图像处理范例。图像是由“照射”源和形成图像的“场景”元素对光能的反射或吸收相结合而产生的。照射可能由电磁能源引起,如雷达、红外线或X射线,也可能是非传
2、统光源,如超声波等。场景可能是熟悉的物体,也可能是分子、沉积岩、大脑等。图显示了数字图像生成的典型过程,成像系统获取场景反射的能量,并将其映射到图像平面,经过采样和量化即得到数字图像。1)二进制图像二进制图像 每一个像素将取离散数值每一个像素将取离散数值0或或1中的一个。中的一个。2)索引图像索引图像 索引图像包含一个数据矩阵索引图像包含一个数据矩阵 X和一个颜色和一个颜色映射矩阵映射矩阵map。选中图像中的某一处时,。选中图像中的某一处时,此处的像素值通过数据矩阵此处的像素值通过数据矩阵 X,在颜色映,在颜色映射矩阵射矩阵map中可以找到对应的像素。中可以找到对应的像素。3)灰度图像灰度图像
3、 通常用一个数据矩阵来描述,图像的每一个像通常用一个数据矩阵来描述,图像的每一个像素点会对应到数据矩阵中的一个元素素点会对应到数据矩阵中的一个元素.例如,例如,0代表黑色,代表黑色,255代表白色。代表白色。4)RGB图像图像 RGB图像又称真彩图像,它是利用图像又称真彩图像,它是利用R、G、B三个分量标识一个像素的颜色,利用三个基色可三个分量标识一个像素的颜色,利用三个基色可以合成任意颜色的原理,对一个尺寸为以合成任意颜色的原理,对一个尺寸为nXm的彩的彩色图像来说,在色图像来说,在Matlab7.0中则存储一个中则存储一个nXmX3的多维数组,其中数组中的元素定义了图像中每的多维数组,其中
4、数组中的元素定义了图像中每一个象素的红、绿、蓝颜色值真彩图像。一个象素的红、绿、蓝颜色值真彩图像。此外,此外,Matlab还支持由多帧图像组成的图像序列。还支持由多帧图像组成的图像序列。1024 1024 512 512 256 256 128 128 64 64 32 32 不同的操作系统、不同的图像处理软件所支持的图像格式是不同的。1)BMP文件文件 保存为保存为*.bmp,BMP是一种Windows标准的点阵式图形文件格式,常见于Windows附件中的画笔,这种格式的特点是包含图像信息比较丰富,几乎不进行压缩,但占用磁盘空间较大。2)GIF文件文件 保存为保存为*.gif,该格式是,该格
5、式是CompuServe提供的一种图形格提供的一种图形格式,常见式,常见于因特网因特网HTML网页中的动画网页中的动画(在没有(在没有flash之前),之前),它使用它使用LZW的压缩方式将文件压缩而不会占磁盘空间,因此的压缩方式将文件压缩而不会占磁盘空间,因此gif格式广泛应用与因特网格式广泛应用与因特网HTML网页文档中,或网络上的图网页文档中,或网络上的图片传输,但只能支持片传输,但只能支持8位的图像文件,它还可以支持透明背位的图像文件,它还可以支持透明背景和动画的图像格式。景和动画的图像格式。3)TIF文件文件 保存为保存为*.tif,该格式是一种应用非常广泛的的无损压缩图像格式,用于
6、应用程式之间和计算机平台之间的交换文件,它的出现使图像数据交换变的简单。(常见扫描仪扫描的图片,无压缩文件较大)4)JPEG格式格式 保存为保存为*.jpg,该格式是目前压缩率最高的格式,常见于数码像机以及普遍应用于图像显示和超文本文档(如网页)中。在压缩保存过程中与GIF格式不同,JPEG保留RGB图像中的所有颜色信息,以失真最小的方式去小一些细微的数据。.GIF256/96dpi用于动画、多媒体程序界面,网页界面用于动画、多媒体程序界面,网页界面256 224/*dpi用于用于Windows环境下的任何场合环境下的任何场合.TIF256 232/*dpi用于专业印刷用于专业印刷216 23
7、2/*dpi用于数字图片保存、传送用于数字图片保存、传送.TGA256 224/96dpi用于专业动画影视制作用于专业动画影视制作.PCD216 232/*dpi用于用于PHOTO CD底层信息底层信息 像素:像素:每幅图像存储为矩阵a(i,j),其中(i,j)为像素空间位置,a(i,j)为像素的(红/绿/蓝)三通道颜色向量或者灰度值。边缘:边缘:颜色或者灰度变化比较大的像素点集合。生物视觉系统对边缘具有强敏感性。纹理:纹理:草地、树林、天空等区域。中层信息中层信息 分割:分割:例如上述图像可分割为不同的区域:天空、树林、草地、马。目标检测:目标检测:例如利用算法自动识别与标记图像中的不同物体
8、。高层信息高层信息 图像语义描述:例如,上图可理解为一幅春季的农场图片。往往由图像中所包含物体的特征所推理得到的语义描述。高层语义描述具有不唯一性。图像研究分类 基础研究 图像的基本规律、模式识别的基本理论、生物学基础等;算法研究 针对图像处理的基本问题,设计模型与统计、优化算法;应用研究 针对工业界所面临的问题(可能超出图像处理基本问题范畴),进行创新性研究。基础研究算法研究应用研究三者同等重要三者同等重要(图像基础研究应紧密结合应用背景图像基础研究应紧密结合应用背景)数字图像的处理主要有以下方面:(1)图像变换:傅立叶变换,小波变换等。(2)图像增强与复原:突出图像信息,抗干扰。(3)图像
9、压缩编码:简化图像利于传输等。(4)图像分割:提取图像中的有意义的特征。(5)图像分析:对图像中的信息进行各种分析。(6)图像识别:提取图像中的信息进行判别。(7)图像隐藏:对图像加入水印进行信息伪装。图像滤波与去噪(Image filtering and denoising):输入噪声图像,去除图像中所包含的噪声信息,以利于图像的进一步分析和处理。噪声类型 生成噪声:高斯噪声,椒盐噪声 真实噪声:相机采集图像时的真实噪声,类高斯,但方差较小,且具有空间不一致性。图像填充(Image inpainting)原本出现于艺术家手工修复艺术作品的污损或划痕部分,主要任务是通过数学模型和计算机算法,将
10、图像中的缺失部分(由于污损、划痕、图像编辑、文字等造成的缺损)自动填充完整。图像超分辨率(Super-resolution)图像的超分辨率重建问题是指:给定低分辨率图像,如何重建出相应的高分辨图像;挑战:挑战:目前可以很好实现图像边缘的超分辨率,但无法完美实现纹理的超分辨率。图像去模糊(Image deblur)去除图像中的模糊现象。图像在拍摄过程中,由于成像过程中相机或者拍摄物体的运动所产生的模糊现象。常常发生在低光照条件下降低快门速度拍照。模糊图像去除模糊后的图像(包括模糊核)注:目前,家用相机和单反相机仍然受到模糊的影响,去模糊问题还远远没有解决。图像分割(Image segmentat
11、ion)低层分割:将图像分割成为颜色或者纹理一致的小图像区域集合;中层分割:将图像分割成为不同深度、不同物体所构成的图像区域集;高层分割:将图像分割成为具有不同语义或目标的区域。图像特征提取、表达与分类(Feature extraction,representation and classification)特征提取:提取将图像的低层特征,例如角点、纹理、边缘等,具有高维性。特征表达:将高维图像特征抽象、压缩表示为固定维数的特征向量。图像分类:基于图像特征向量,利用模式识别算法实现图像分类。cowshouseairplanepeople特征提取特征表达分类算法 视频处理(Video proce
12、ssing)图像处理中的所有问题均对应着相应视频处理问题:视频去噪、填充、超分辨率、分割与理解 与图像处理的不同之处:视频相邻帧之间的强相关性为解决视频处理问题提供的新的信息。因此视频处理结果相对于单帧图像处理效果更好。Image Acquisition Toolbox Image Processing Toolbox Signal Processing Toolbox Wavelet Toolbox Statistics Toolbox Bioinformatics Toolbox Matlab Compiler Matlab COM builder 图像采集工具箱提供了大量的函数用于采集图
13、像和视频信号。该工具箱支持的硬件设备包括工业标准的PC图像采集卡和相应的设备。Matlab的Image Processing Toolbox支持多种图像数据格式,这些图像文件格式主要有JPEG、TIFF、HDF、HDF.EOS和DICOM。同时,Matlab中还可以导入/导出AVI格式的数据文件,支持其他工业标准的数据文件格式。Matlab对图像的处理功能主要集中在它的图像处理工对图像的处理功能主要集中在它的图像处理工具箱(具箱(Image Processing Toolbox)中。)中。图像处理工具箱是由一系列支持图像处理操作的函数图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行
14、诸如几何操作、线性滤波和滤波器设计、组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、数学形态学处理等图图像变换、图像分析与图像增强、数学形态学处理等图像处理操作。像处理操作。图像处理编程基本流程 第1步:读图像文件 第2步:图像处理算法(矩阵数据处理)第3步:存图像文件 Matlab imread:读取图像文件 imwrite:存储图像到硬盘 imshow:显示图像处理效果(用于调试)编程(Matlab与C混编)Matlab处理读、存图像以及可以以矩阵方式计算的数据处理部分;C语言程序处理涉及循环操作的数据处理部分。Matlab 图像处理工具箱提供了一个高级的图
15、像显示函数图像处理工具箱提供了一个高级的图像显示函数imshow。其语法格式如下,。其语法格式如下,灰度图像灰度图像 imshow(I)imshow(I,n)imshow(I,low high)二值图像二值图像 imshow(BW)索引图像索引图像 imshow(X,map)真彩色图像真彩色图像 imshow(RGB)tu=imread(football.jpg);imshow(tu);subplot(1,3,1)imshow(tu(:,:,1 2 3)subplot(1,3,2)imshow(tu(:,:,3 2 1)subplot(1,3,3)imshow(tu(:,:,1 3 2)如果图
16、像太小,显示很小,不利于浏览,这是可是采用bw=zeros(20,20);bw(2:2:18,2:2:18)=1subplot(1,3,1);,imshow(bw)subplot(1,3,2);,imshow(bw),truesize(100 100)subplot(1,3,3);imshow(bw,notruesize)I=imread(G:a.tif);p=rgb2gray(I);%RGB转为灰度图imcontour(p);%画图像等值线 通常,在显示一幅图像前首先要调用通常,在显示一幅图像前首先要调用imread函数装载函数装载 图像,将数据存储为图像,将数据存储为Matlab工作平台中
17、的一个或多个变工作平台中的一个或多个变 量。但是,如果不希望在显示图像之前装载图像,则可量。但是,如果不希望在显示图像之前装载图像,则可 以使用以下命令格式直接进行图像文件的显示,以使用以下命令格式直接进行图像文件的显示,imshow 其中,为要显示的图像文件的文件名。其中,为要显示的图像文件的文件名。1.图像类型转换的必要性图像类型转换的必要性 对于索引图像进行滤波时,必须把它转换为对于索引图像进行滤波时,必须把它转换为RGB图图 像,否则光对图像的下标进行滤波,得到的结果是毫无像,否则光对图像的下标进行滤波,得到的结果是毫无 意义的。意义的。2.各种类型图像的转换关系各种类型图像的转换关系
18、 工具箱中提供了许多图像类型转换的函数,从函数名称工具箱中提供了许多图像类型转换的函数,从函数名称 可以看出它们的功能。可以看出它们的功能。例如:例如:dither函数函数 功能:图像抖动,利用仅能显示少数彩色的设备显示含功能:图像抖动,利用仅能显示少数彩色的设备显示含 有丰富颜色信息图像的一种非常有用的方法。有丰富颜色信息图像的一种非常有用的方法。该函数可以把该函数可以把RGB图像转换成索引图像或把灰度图像转图像转换成索引图像或把灰度图像转 换成二值图像。换成二值图像。格式:格式:X=dither(RGB,map)BW=dither(I)例:例:I=imread(autumn.tif);ma
19、p=pink(1024);X=dither(I,map);imshow(I);figure,imshow(X,map);colorbar 显示二进制图像,可用下面方法:BW=imread(circles.png);imshow(BW);在Matlab 7.0中,二进制图像是一个逻辑类,仅包括0和1两个数值,像素0显示为黑色,像素1显示为白色。在显示时,也可以通过NOT()命令,对二进制图像进行取反,使数值0显示为白色,1显示为黑色。例如使用 imshow(BW)图像的直方图处理图像的直方图处理 图像的直方图是灰度级的函数,描述的是图像中每种灰度级灰度级的函数,描述的是图像中每种灰度级像素的个数
20、,反映图像中每种灰度出现的频率。横坐标是灰像素的个数,反映图像中每种灰度出现的频率。横坐标是灰度级,纵坐标是灰度级出现的频率。度级,纵坐标是灰度级出现的频率。1)数字化参数一般一幅数字图像应该利用全部或几乎全部可能的灰度级;对直方图做快速检查。2)边界阈值选择使用轮廓线确定简单物体的边界的方法,称为阈值化;对物体与背景有较强对比的景物的分割特别有用;基于直方图的图像矫正、分割 直方图均衡是图像处理中很重要的研究内容,它通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度。图像的灰度统计直方图是 1个 1-D的离散函数I=imread(G:a.tif);J=histeq(I);image(
21、J);%初始化及得到lenna的灰度lenna=zeros(128,128);lenna_equ=zeros(128,128);histgram=zeros(256);cdf=zeros(256);lenna,map=imread(c:templenna.bmp,bmp);%get histogramfor i=1:128 for j=1:128 k=lenna(i,j);histgram(k)=histgram(k)+1;endend%get cdfcdf(1)=histgram(1);for i=2:256 cdf(i)=cdf(i-1)+histgram(i);end%run point
22、 operationfor i=1:128 for j=1:128k=lenna(i,j);lenna_equ(i,j)=cdf(k)*256/(128*128);endend%生成直方图均衡化后的lenna图imwrite(lenna_equ,map,c:templenna_equ.bmp);I=imread(G:a.tif);C,R,P=impixel(I);image(I);C,R,PI=imread(G:a.tif);imhist(I);%灰度图像直方图Y,map=rgb2ind(I,256);imhist(Y,map);%索引图像直方图代数运算代数运算 代数运算是指将两幅或多幅图像通
23、过对应像素之间的加、代数运算是指将两幅或多幅图像通过对应像素之间的加、减、乘、除运算得到输出图像的方法。减、乘、除运算得到输出图像的方法。imadd(X,Y);Y可以是另一幅图像,也可以是一个常数。可以是另一幅图像,也可以是一个常数。例例1:I=imread(rice.png);J=imread(cameraman.tif);K=imadd(I,J);subplot(131);imshow(I);subplot(132);imshow(J);subplot(133);imshow(K);图像的加法图像的加法例例2:实现亮度的增加实现亮度的增加 RGB=imread(greens.jpg);RG
24、B1=imadd(RGB,50);subplot(1,2,1);imshow(RGB);subplot(1,2,2);imshow(RGB1);检测同一场景两幅图像之间的变化检测同一场景两幅图像之间的变化=-差影法在自动现场监测中的应用差影法在自动现场监测中的应用 Z=imsubtract(X,Y);计算计算X与与Y的像素之差,负数将被截取为的像素之差,负数将被截取为0。Z=imabsdiff(X,Y);计算计算X与与Y的像素之差的绝对值,结果为非负的。的像素之差的绝对值,结果为非负的。空间通过函数imresize来实现对图像的放大和缩小。B=imresize(A,m,method)A:原图像
25、矩阵 M:放大倍数。M1放大 M1缩小 Method:插值方法 最近邻域插值(Nearest neighbor interpolation)双线性插值(Bilinear interpolation)双三次插值(Bicubic interpolation)roipoly MATLAB提供了 Gamma校正、中值滤波、对比度调整、直方图均衡、自适应滤波等对图像进行增强处理。Adjust image intensity values or colormapJ=imadjust(I,low_in high_in,low_out high_out,gamma)RGB2=imadjust(RGB1,.)R
26、GB1=imread(G:a.tif);RGB2=imadjust(RGB1,.2.3 0;.6.7 1,);imshow(RGB1),figure,imshow(RGB2)I=imread(G:a.tif);p=rgb2gray(I);J1=imnoise(p,salt&pepper,0.04);subplot(121),subimage(J1);title(加入盐椒噪声后的图像,密度D=0.04);J2=imnoise(p,gaussian,0,0.04);subplot(122),subimage(J2);title(加入高斯噪声后的图像,M=0,V=0.04);)I=imread(G:
27、a.tif);p=rgb2gray(I);J1=imnoise(p,salt&pepper,0.04);subplot(221),subimage(J1);title(加入盐椒噪声后的图像,密度D=0.04);J2=imnoise(p,gaussian,0,0.04);subplot(222),subimage(J2);title(加入高斯噪声后的图像,M=0,V=0.04);J3=medfilt2(J1);subplot(223),subimage(J3);title(加入盐椒噪声中值滤波后的图像);J4=medfilt2(J2);subplot(224),subimage(J4);titl
28、e(加入高斯噪声中值滤波后的图像);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);I=imread(noise.bmp);%采用运动滤波PSF进行模糊H=fspecial(motion,50,45);MotionBlur=imfilter(I,H);Figure,imshow(MotionBlur);%采用均值滤波PSF进行模糊H=fspecial(disk,10);Averag
29、eBlur=imfilter(I,H);Figure,imshow(AverageBlur);%噪声的添加V=.02;Noisy=imnoise(I,gaussian,0,V);Figure,imshow(Noisy);通过调用deconvwnr函数可以利用魏纳滤波方法对图像进行复原处理。当图像的频率特性和噪声已知时,效果非常好。J=deconvwnr(I,PSF,NCORR,ICORR)J=deconvwnr(I,PSF,NSR)I:输入图像 PSF:点扩散函数 缺省参数 NSR:信噪比(默认0)NCORR:噪声的自相关函数 ICORR:原始图像的自相关函数Blurred=imread(bl
30、ure.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);用于由于受干扰而质量降低的图像N3=filter2
31、(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);Origin3x35x57x7K3=medfilt2(K,3,3);figure,imshow(K3);K5=medfilt2(K,5,5);figure,imshow(K5);M3=filter2(fspecial(average,3),K)/255;figure,imshow(M
32、3);origin3x3 Median5x5 Median3x3 Average可以使用Edge可以提供许多微分算子模板,指定其是对水平边缘还是垂直边缘敏感。该函数在边缘检测时还可以指定一个域值,只有满足这个域值的点才作为边缘点。I=imread(edge.bmp);BW1=edge(I,sobel);BW2=edge(I,canny);Figure,imshow(BW1);Figure,imshow(BW2);为了使图像处理简化,通常的方法是对为了使图像处理简化,通常的方法是对图像进行变换。图像变换技术在图像增图像进行变换。图像变换技术在图像增强、图像恢复和有效的减少图像数据、强、图像恢复和
33、有效的减少图像数据、进行压缩以及特征提取方面都有着十分进行压缩以及特征提取方面都有着十分重要的作用。重要的作用。图像变换可用于图像数据压缩、特征提取、去噪音等。I=imread(G:a.tif);p=rgb2gray(I);J=dct2(p);figure;imshow(log(abs(J),);colormap(jet);colorbar(herz);I=imread(G:a.tif);p=rgb2gray(I);J=dct2(p);K=idct2(J);figure;imshow(K,0 255);I=imread(f:a.tif);p=rgb2gray(I);J=dct2(p);K=id
34、ct2(J);figure;subplot(121),imshow(p);title(Oring);subplot(122),imshow(K,0 255);title(DCT&IDCT);%创建图像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);%坐标轴平移OF=fftshift(FM);OF2=log(abs(OF);figure,imshow(OF2,-1,5,notruesize);colormap(jet);%图片保存imwrite(OF2,C:004.bmp);