当前位置:文档之家› MATLAB数字图像处理基本操作及空域滤波

MATLAB数字图像处理基本操作及空域滤波

实验一 MATLAB数字图像处理基本操作及空域滤波实验目的1、了解有关数字图像处理的基本概念,熟悉Matlab软件中关于数字图像处理的基本命令,掌握利用Matlab软件进行数字图像处理的简单方法。

2、了解并掌握直方图统计方法以及分段线性拉伸、直方图均衡等亮度调整算法,通过观察对这些运算建立感性认识。

3、掌握空域滤波中常用的平滑和锐化滤波器。

实验内容1. 观察各类图像的直方图;操作LUT灰度对照表,进行分段线性拉伸;采用直方图均衡方法对低对比度的图像进行对比度增强。

2.掌握图像模板卷积运算的实质,认识各种模板的处理效果;3. 掌握邻域平均及中值滤波降噪方法的特点,认识其功能及适用场合;4. 掌握拉普拉斯算子、Sobel算子、Prewitt算子和Isotropic算子的特点,认识其功能及适用场合。

实验原理1、数字图像以一定的格式存放在计算机的存储器中(如磁盘),常见的格式有BMP,TIF,PCX等等,要进行数字图像处理,第一项工作就是把图像读到计算机的内存中,以便进行进一步的处理。

在Matlab中,函数imread()完成此项工作。

下面一小段Matlab语句即可实现将图像“rice.tif”显示在一个图像窗口的左边,将其轮廓图显示在该窗口的右边。

I=imread('rice.tif');subplot(1,2,1);imshow(I)subplot(1,2,2);imcontour(I);这里,imread(‘rice.tif’)将磁盘上的图像文件rice.tif读入内存变量I中,subplot(1,2,1)生成一个可以横向放置2幅图像的窗口,并设置下一显示位置在左边,imshow(I)显示图像I,subplot(1,2,2)准备下一图像的显示位置,imcontour(I)生成图像I 的轮廓并显示在窗口的右边。

数字图像一般可分为二值图、灰度图和真彩图等几类。

bw=imread('text.tif');bw2=imcomplement(bw);subplot(1,2,1),imshow(bw)subplot(1,2,2),imshow(bw2)这里函数imcomplement(bw)完成对二值图像text.tif(bw)的求补运算。

(即原来黑的变白的,原来白的变黑的。

)该函数也可以用于灰度图像,此时图像的数据被255减。

在Matlab中,函数imresize(X,M,method)可用来改变图像的大小,其中X表示图像,实数M>0是放大倍数,method用来选择计算数据的方法,其可取值及意义分别为:“nearest”—最近邻插值法,“bilinear”—双线性插值法,“bicubic”—双三次插值法。

下面这段程序调整图像的大小:I=imread('circuit.tif');J=imresize(I,1.25);imshow(I)figure,imshow(J)也可以指定目标图像的大小,此时imresize()的调用格式为:Y=imresize(X,[320,480])其中[320,480]表示将图像的大小调整为320 480。

函数imrotate对图像进行旋转操作,我们看如下的程序段:I=imread('cameraman.tif');J=imrotate(I,-15,'bilinear');K=imrotate(I,-15,'bilinear','crop');imshow(I)figure,imshow(J)figure,imshow(K)注意右边的图像是由参数“crop”实现的,该参数表示将旋转后的图像取与原图像相同的中心部分输出。

2、直方图的定义图象的灰度直方图是一个函数,表示数字图象中每一灰度级与该灰度级出现的频数(即具有这一灰度级的象素数目)间的对应关系:P b N b M()()=M 为一幅图象所包含的象素总数;N (b )为图象中灰度值为b 的象素总数。

通常,以灰度值b 为横坐标,N (b )为纵坐标。

直方图是图象中象素灰度值的一阶概率分布密度的一种近似。

3、对比度增强对比度增强又称为点运算,逐点改变输入图象的每一象素的灰度,而各象素的位置不改变,一般用来拓宽图象的灰度范围。

(1) 灰度变换法(LUT 对照)典型的对比度拉伸灰度变换关系如图1所示,其对应关系如下:g f f a f a g a f b f b g b f L a b =≤<-+≤<-+≤<⎧⎨⎪⎩⎪αβγ0()()式中,f 、g 分别表示输入及输出图象,α、β、γ为折线段的斜率,a 、b 决定低、中、高灰度级的范围。

选择不同的α、β、γ、 a 、b 、g a 及g b 数值,可得到各种各样的灰度拉伸效果。

灰度变换前后的灰度变化范围是不变的,对一部分灰度区域的扩张(感兴趣区)都是以其它区域的压缩为代价的。

可见,输出和输入图象之间各点的灰度是按照一定的映射关系相联系的,这种映射关系在计算机中则是通过一个查照表(look-up table ,即LUT )实现的。

通过LUT 对照改变了图象中不同灰度特性趋于的对比度或反差(contrast ),达到改善视觉效果的目的。

(2) 直方图均衡直方图均衡(histogram equalization )就是通过点运算使输入图像的灰度分布较为均匀,使图像具有较好的视觉效果。

设r, s 分别为原图和新图的灰度,ϕr (r ), ϕs (s )分别为原图及新图的概率密度函数,则均衡变换为原图像的累积分布函数:图1. 典型的对比度拉伸灰度变换关系s T r r r r==⎰()ϕ()0对于离散图像,均衡转换公式为:∑∑=====kj jkj j r k k nM Lr P r T s 0max)()(其中,L max 指图像中的最大灰度值(对于灰度图像就是255)。

下面给出直方图均衡化增强图像对比度的MA TLAB 程序: I=imread(‘原图像名.gif); % 读入原图像 J=histeq(I); %对原图像进行直方图均衡化处理 Imshow(I); %显示原图像Title(‘原图像’); %给原图像加标题名Figure ;imshow(J); %对原图像进行屏幕控制;显示直方图均衡化后的图像 Title(‘直方图均衡化后的图像’) ; %给直方图均衡化后的图像加标题名Figure; subplot(1,2,1) ;%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图Imhist(I,64); %将原图像直方图显示为64级灰度 Title(‘原图像直方图’) ; %给原图像直方图加标题名 Subplot(1,2,2); %作第2幅子图Imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度 Title(‘均衡变换后的直方图’) ; %给均衡化后图像直方图加标题名处理后的图像直方图分布更均匀了,图像在每个灰度级上都有像素点。

从处理前后的图像可以看出,许多在原始图像中看不清楚的细节在直方图均衡化处理后所得到的图像中都变得十分清晰。

4、图像平滑和锐化的空间域方法都可表示为模板卷积的形式。

如可将邻域平均处理看作一个作用于图象f (m ,n )的低通滤波器,该滤波器的脉冲响应为H (r , s ),用离散卷积表示如下:1, ,2 ,1 ,0, ),(),(),(-=--=∑∑-=-=N n m s r H s n r m f n m f k k r llsk 、l 由邻域大小决定,一般取k =l =1(即3⨯3窗口);H (r , s)为加权函数,称为掩模(mask )或模板。

这种离散卷积运算等价于用模板中心点逐一对准每一象素f (m , n ),然后将模板元素和它所“压上”的图象元素对应相乘,再求和,其结果就是该中心点象素平滑后的输出(,)fx y 。

图像锐化也可以用类似的方法表示。

常用的平滑模板算子有:123111111121111111 , 121 , 242 ,91016111111121⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦H H H 4511101/4011101 , 1/411/48211101/40⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦H H用于锐化或检测边缘的常用模板算子有:拉普拉斯算子:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----010141010Sobel 算子:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡121000121 101202101------Prewitt 算子:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡111000111 101101101------Isotropic 算子:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡121000121 101202101------ 实验步骤1.读入图像“moon.tif ”,将其显示在一个可以显示2幅图像的窗口中的左边,求出“moon.tif ”的轮廓,并将其显示在上述窗口的右边。

2.读入图像“cameraman.tif ”,将该图像显示在一个可以显示4幅图像(两行两列)的左上角显示该图像;求出该图像的补图像,将结果显示在右上角;将原图分别顺时针旋转45度和逆时针旋转45度,前者保持输出图像大小不变,后者保持图像完全显示,将结果分别显示在左下角和右下角。

3.读入图像“cameraman.tif ”,将其分别放大到1.5倍(用“bilinear ”方法)和2.6倍(用“bicubic ”方法),显示在不同的图像窗口中。

4.读入图像“moon.tif”,将其放大2倍,并将结果用BMP格式以“moon1.bmp”为文件名,写入磁盘。

(用imwrite命令,该命令的用法请用help imwrite查看)5.读入图像“pout.tif”,对获取的数字图像进行分段线性拉伸,参数自己任意给出。

6、显示“pout.tif”的原图、经过均衡化处理过的图像及相应直方图。

7.对图像“cameraman.tif”采用实验原理中给出的算子进行各种增强和平滑处理并显示结果。

实验思考题1.直方图是什么概念?它反映了图像的什么信息?2.直方图均衡化是什么意思?它的主要用途是什么?3.邻域平均和中值滤波各适用于那些图像平滑处理?4.拉普拉斯算子、Sobel算子、Prewitt算子和Isotropic算子进行图像增强处理时各自的特点是什么?实验报告要求1.给出图像处理的源程序和结果。

2.对实验结果进行简要分析。

例程:1、f=imread('cameraman.tif');subplot(1,2,1);imshow(f);subplot(1,2,2);imcontour(f);2、f=imread('cameraman.tif');subplot(2,2,1);imshow(f);subplot(2,2,2);imshow(imcomplement(f));subplot(2,2,3);imrotate(f,45,'bilinear','crop'); subplot(2,2,4);imrotate(f,-45,'bilinear','loose');3、f=imread('cameraman.tif');imshow(imresize(f,1.5,'bilinear')); figure;imshow(imresize(f,2.6,'bicubic'));4、f=imread('moon.tif');imwrite(imresize(f,2),'moon1.bmp');5、6、f=imread('pout.tif');f1=histeq(f);imshow(f);figure,imhist(f,64);figure,imshow(f1);figure,imhist(f1,64);[m,n]=size(f);f2=double(f);for i=1:mfor j=1:nif f2(i,j)<70f3(i,j)=0.5*f2(i,j);else if f2(i,j)>=70 & f2(i,j)<160 f3(i,j)=4*(f2(i,j)-70)+35; else if f2(i,j)>=160f3(i,j)=0.5*f2(i,j)+215; endendendendendfigure,imshow(f3,[]);7、f=double(imread('cameraman.tif'));h1=[1 1 1;1 1 1;1 1 1]./9;h2=[1 1 1;1 2 1;1 1 1]./10;h3=[1 2 1;2 4 2;1 2 1]./16;h4=[1 1 1;1 0 1;1 1 1]./8;h5=[0 0.25 0;0.25 1 0.25;0 0.25 0]./2; lap=[0 -1 0;-1 4 -1;0 -1 0];sobel1=[1 0 -1;2 0 -2;1 0 -1];sobel2=sobel1';prewitt1=[1 0 -1;1 0 -1;1 0 -1];prewitt2=prewitt1';isot1=[1 0 -1;1.414 0 -1.414;1 0 -1]; isot2=isot1';subplot(3,4,1);imshow(imfilter(f,h1),[]); subplot(3,4,2);imshow(imfilter(f,h2),[]); subplot(3,4,3);imshow(imfilter(f,h3),[]); subplot(3,4,4);imshow(imfilter(f,h4),[]); subplot(3,4,5);imshow(imfilter(f,h5),[]); subplot(3,4,6);imshow(imfilter(f,lap),[]); subplot(3,4,7);imshow(imfilter(f,sobel1),[]); subplot(3,4,8);imshow(imfilter(f,sobel2),[]); subplot(3,4,9);imshow(imfilter(f,prewitt1),[]); subplot(3,4,10);imshow(imfilter(f,prewitt2),[]); subplot(3,4,11);imshow(imfilter(f,isot1),[]); subplot(3,4,12);imshow(imfilter(f,isot2),[]);。

相关主题