《数字图像处理》课内实验_new.doc_第1页
《数字图像处理》课内实验_new.doc_第2页
《数字图像处理》课内实验_new.doc_第3页
《数字图像处理》课内实验_new.doc_第4页
《数字图像处理》课内实验_new.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字图像处理课内实验实验一 直方图均衡一、实验题目: 直方图均衡二、实验目的:在学习图像直方图的概念、计算方法、性质和相关应用基础上,生成、绘制图像的直方图,并应用MATLAB编程实现图像直方图均衡化程序。三、实验内容:(1)计算并绘制图像直方图;(2)编程实现图像的直方图均衡化处理,显示均衡前后的直方图和图像;四、预备知识:(1)熟悉图像读写和显示;(2)理解图像直方图的概念及用途;(3)理解直方图均衡化的概念及应用背景;五、实验原理: 在对图像进行处理之前,了解图像整体或局部的灰度分布情况非常必要。对图像的灰度分布进行分析的重要手段就是建立图像的灰度直方图(Density Histogram),利用图像灰度直方图,可以直观地看出图像中的像素亮度分布情况;通过直方图均衡化,可以对图像的质量进行调整。(1)生成并绘制图像的直方图假设一幅数字图像的像素总数为N,在范围0,G内共有L个灰度级,其直方图定义为离散函数,其中,rk是区间0,G内的第K级的亮度,nk是灰度级为rk的图像中的像素数。对于uint 8类图像,G的值为255;对于uint 16类图像,G的值为65535;对于double类图像,G的值为1.0。记住,MATLAB中的索引不能为0,故r1相当于灰度级0,r2相当于灰度级1,如此等等,rL相当于灰度级G。其中,uint 8类图像或uint 16类图像中G=L-1。通常,会用到归一化直方图,即用所有元素h(rk)除以图像中的像素总数N所得到的图形:P(rk)表示灰度级rk出现的频数。MATLAB图像处理工具箱提供了imhist函数来计算和显示图像的直方图,其调用格式为:imhist(I,b)COUNTS,X = imhist(I)其中I为输入图像,b为指定的灰度级数目,默认值为256。COUNTS,X=imhist()返回直方图统计的数据和相应的灰度级向量X。使用表达式p= imhist(I,b)/N就可简单地获得归一化直方图,这里N为图像中的像素总数。显示图像lean.bmp的直方图及归一化直方图,如图1.2.1所示。(a) 原图 (b) 直方图 (c) 归一化直方图图1.2.1 灰度图像的直方图及归一化直方图如果图像的灰度分别集中在较窄的区间,从而引起图像细节的模糊,为了增强图像,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现。这种方法是以概率论为基础的,常用的方法有直方图均衡化和直方图匹配(规定化)。(2) 直方图均衡化直方图均衡化也叫做直方图均匀化,是将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像,此时图像的熵最大,图像所包含的信息量最大,且扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果。设一幅图像总像元数为N,灰度级的个数为L,第K个灰度级rk出现的频数为nk,则第k灰度级出现的概率为此时变换函数可表示为根据原图像的直方图统计值就可算出均衡化后各像元的灰度值。直方图上灰度分布较密的部分被拉伸;灰度分布较稀疏的部分被压缩,使图像对比度总体上得到增强。MATLAB图像处理工具箱提供了直方图均衡函数histeq。其调用格式为:J = histeq(I,n);J,T = histeq(I,);其中,n是均衡化后的灰度级数目,是一个可选参数,缺省值是64。J,T=histeq(I,)返回能从图像I的灰度直方图变换成图像J的直方图的变换函数T。显示图像RSImg.gif的直方图均衡化前后的图像及对应的直方图,如图2-3所示。(a)原图像 (b) 直方图均衡化后图像 (c) 原图的直方图 (d) 均衡化后的直方图图1.2.3 直方图均衡化前后的图像及其直方图经过均衡化后,原图中较暗区域中的一些细节更清晰。六、实验步骤:(1)打开一幅灰度图像,利用MATLAB工具箱所提供的函数计算并绘制图像的直方图和归一化直方图;(2)利用相应的MATLAB函数对灰度图像进行直方图均衡化,显示均衡化后的图像及对应的直方图,分析均衡化后图像有何变化,均衡化后的直方图有何特点;七、思考题(1) 灰度直方图可以反映一幅图像的哪些特征?(2) 均衡化后的直方图有何特点?八、实验程序代码:(1)生成并绘制灰度图像的直方图及归一化直方图clear all;I=imread(lena_gray_256.tif); %打开一幅灰度图像m,n=size(I);p=m*n;J=imhist(I)./p; %计算图像的归一化直方图subplot(1,3,1),imshow(I);subplot(1,3,2),imhist(I,64);subplot(1,3,3),plot(J);(2)直方图均衡化clear all;Im=imread(region.jpg);J=histeq(Im); %均衡化subplot(2,2,1);imshow(Im);title(原图); %显示原图subplot(2,2,2);imhist(Im);title(原图直方图); %显示原图的直方图subplot(2,2,3);imshow(J);title(均衡化结果); %显示均衡化后的图像subplot(2,2,4);imhist(J);title(均衡化结果的直方图); %显示均衡化后的直方图实验二 频域图像增强一、实验题目: 频域图像增强二、实验目的:掌握基于频域的图像增强方法。三、实验内容:(1)编程实现图像的理想低通和高通滤波;(2)编程实现图像的巴特沃斯低通和高通滤波。四、预备知识:(1)熟悉MATLAB图像输入输出操作;(2)熟悉图像的频域变换处理;(3)熟悉二维频谱的显示方法。五、实验原理:图像增强是对图像进行加工,以得到视觉效果更好或更有用的新图像。图像增强在处理方法上可分为基于空域的图像增强和基于频域的图像增强。频域图像增强的步骤:首先将图像变换到频域,然后在频域进行需要的滤波,即和滤波器转移函数相乘,最后反变换回时域得到增强的图像。常用的频域增强方法有低通滤波、高通滤波、带通和带阻滤波和同态滤波。2-D理想滤波器转移函数:低通: , 高通: (1.6.1)是非负数,是从点到频率平面原点的距离。阶数为n,截断频率为的2-D巴特沃斯滤波器转移函数: 高通: (1.6.2)六、 实验步骤:(1) 读入图像;(2) 实现图像的理想低通和高通滤波;(3) 实现图像的巴特沃斯低通和高通滤波。七、 思考题目:分析为什么图像通过低通滤波器后变得模糊?为什么通过高通滤波器后得到锐化结果?八、 实验程序代码:图像频域滤波可用fft2函数把图像变换到频域,在频域按公式(1.6.1)、(1.6.2)分别实现频域的理想高低通滤波和频域的巴特沃斯高低通滤波,最后用ifft2反变换到时域得到最后结果。二维频谱的显示可用函数mesh完成。用巴特沃斯滤波器对图像进行低通和高通滤波的例子见图1.6.1。图1.6.1 图像频率滤波完整的代码:%理想低通和高通clc;clear;data4=imread(lena.gif);subplot(3,2,1); imshow(data4);title(原图);i=fft2(data4);subplot(3,2,2); i=fftshift(i); z=log(abs(i); x=0:1:255;y=0:1:255;x,y=meshgrid(x,y);mesh(z); %以三维坐标显示该图像频谱图title(原图频谱);n,m=size(i); %对该图进行低通滤波for k=1:1:n for l=1:1:m if (k2+l2)=1902 %选取D=190 result(k,l)=0; else result(k,l)=i(k,l); end endendsubplot(3,2,4);z=log(abs(result); %三维方式显示低通滤波后的频谱图x=0:1:255;y=0:1:255;x,y=meshgrid(x,y);mesh(z);title(理想低通滤波后的频谱);subplot(3,2,3); %新建图像显示窗口result=fftshift(result); %滤波后的数据去中心化b=ifft2(result); %逆傅里叶变换imshow(uint8(abs(b);title(理想低通滤波后的图像);subplot(3,2,6); %新建图像显示窗口 % n,m=size(c); %对原图进行高通滤波 for k=1:1:n for l=1:1:m if (k2+l2)=1902 %选取D=190 result(k,l)=0; else result(k,l)=i(k,l); end endendz=log(abs(result);x=0:1:255; %三维方式显示高通滤波前的频谱图 y=0:1:255;x,y=meshgrid(x,y);mesh(z);title(理想高通滤波后的频谱);subplot(3,2,5); result=fftshift(result); %滤波后的数据去中心化d=ifft2(result); %逆傅里叶变换imshow(uint8(abs(d);title(理想高通滤波后的图像);%频域增强(巴特沃斯原型)%二阶巴特沃斯(Butterworth)低通滤波器%clc;%clear;Figure;J1=imread(lena.gif);subplot(3,2,1);imshow(J1);title(原图);f=double(J1); g=fft2(f); % 傅立叶变换g=fftshift(g); % 转换数据矩阵subplot(3,2,2);x=0:1:255;y=0:1:255;x,y=meshgrid(x,y);z=log(abs(g); %取幅度mesh(z); %以三维坐标显示该图像频谱图title(原图频谱);M,N=size(g);nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器d0=20;m=fix(M/2); n=fix(N/2);for i=1:M for j=1:N d=sqrt(i-m)2+(j-n)2); h=1/(1+0.414*(d/d0)(2*nn); % 计算低通滤波器传递函数 result(i,j)=h*g(i,j); endendsubplot(3,2,4);x=0:1:255;y=0:1:255;x,y=meshgrid(x,y);z=log(abs(result); %取幅度mesh(z); %以三维坐标显示该图像频谱图title(低通滤波后的频谱);result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2);subplot(3,2,3);imshow(J3);title(低通滤波后的图像);%利用二阶巴特沃斯(Butterworth)高通滤波器nn=2; % 二阶巴特沃斯(Butterworth)高通滤波器d0=5;m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt(i-m)2+(j-n)2); if (d=0) h=0; else h=1/(1+0.414*(d0/d)(2*nn);% 计算传递函数 end result(i,j)=h*g(i,j); endendsubplot(3,2,6);x=0:1:255;y=0:1:255;x,y=meshgrid(x,y);z=log(abs(result); %取幅度mesh(z); %以三维坐标显示该图像频谱图title(高通滤波后的频谱);result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2);subplot(3,2,5);imshow(J3);title(高通滤波后的图像);实验三 图像边缘检测与连接一、实验题目: 图像边缘检测与连接二、实验目的:掌握图像边缘检测的主要原理和常用方法;依据边缘检测理论,实现灰度图像一阶和二阶边缘检测方法;编程实现Hough变换提取直线;启发学生依据边缘特征进行图像分析与识别,提高学生图像处理与分析能力和实际动手能力。三、实验内容:(1)编程实现一阶差分边缘检测算法,包括Robert梯度算子、Prewitt算子、Sobel算子等;(2)编程实现二阶差分拉普拉斯边缘检测算法以及LoG检测法和Canny检测法;(3)分析与比较各种边缘检测算法的性能; (4)编程实现Hough变换提取直线 (5)分析Hough变换检测性能;四、预备知识:(1)熟悉图像读写和显示;(2)熟悉图像分割理论;(3)熟悉Hough变换的基本原理;(4)熟悉Hough变换提取直线的方法;五、实验原理:1、边缘检测图像边缘是图像的重要特征,是图像中特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素集合。图像的边缘部分集中了图像的大部分信息,一幅图像的边缘结构与特点往往是决定图像特质的重要部分。图像边缘的另一个定义是指其周围像素灰度变化不连续的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间,因此,边缘是图像分割、图像理解及图像识别的重要特征。图像边缘检测主要用于增强图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。目前为止最通用的方法是检测亮度值的不连续性,用一阶和二阶导数检测的。(1)微分法微分法的目的是利用微分运算求信号的变化率,加强高频分量的作用,从而使轮廓清晰。遵循如下两个基本准则之一:找到亮度的一阶导数在幅度上比指定的阈值大的地方;找到亮度的二阶导数有零交叉的地方。(2)差分边缘检测方法利用像素灰度的一阶导数算子在灰度迅速变化处得到高值来进行奇异点的检测。它在某一点的值就代表该点的边缘强度,通过对这些值设置阈值来进一步得到边缘图像。差分边缘检测方法是最原始、最基本的方法。但要求差分方向与边缘方向垂直,这就需要对图像的不同方向(一般为垂直方向、水平方向和对角线方向)都进行差分运算,增加了实际运算的繁琐性,目前很少采用。(3)Roberts边缘检测算子Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差,即:然后根据式(1.7.2)计算出Roberts的梯度幅度值:它们的卷积算子为:Roberts检测器较为简单,但具有一些功能上的限制,例如,它是非对称的,而且不能检测诸如45倍数的边缘。然而,它还是经常用于硬件实现中,因为它既简单又快速。(4)Sobel边缘检测算子对数字图像的每个像素,考察它上下左右邻点灰度的加权差,与之接近的邻点的权大。据此,定义Sobel算子如下:卷积算子为:Sobel算子很容易在空间上实现,边缘检测效果较好,且受噪声的影响也较小。邻域增大抗噪性会更好,但计算量也会增大,得出的边缘也会相应变粗。Sobel算子会检测出许多伪边缘,边缘定位精度不够高,在精度要求不高时是一种较常用的边缘检测方法。(5)Prewitt边缘检测算子Prewitt边缘检测算子模板如下:图像中的每个像素都用这两个核作卷积,一个核对垂直边缘影响最大,另一个核对水平边缘影响最大。两个卷积的绝对值的最大值作为该点的输出值。不能简单的将小于0的值处理为0,这样会丢失信息。它比Sobel检测器在计算上要简单一些,但比较容易产生一些噪声。(6)拉普拉斯边缘检测算子拉普拉斯边缘检测算子是一种二阶微分算子,与其它边缘检测方法的不同之处在于,该方法是一种各向同性的检测方法,即其边缘的增强程度与边缘的方向无关,从而可以满足不同走向的边缘锐化的要求。定义如下:几种常用的实现Laplace运算的检测模板如下:拉普拉斯算子自身很少被直接用作边缘检测,因为二阶导数对噪声具有无法接受的敏感性,它的幅度会产生双边缘,而且它不能检测边缘的方向。然而,当与其它边缘检测技术组合使用时,拉普拉斯算子是一种有效的补充方法。例如,虽然它的双边缘使得它不适合直接用于边缘检测,但该性质可用于边缘定位。(7)Laplacian of a Gaussian(LoG)检测器高斯函数 其中,r2=x2+y2,是标准偏差。这是一个平滑函数,若和一幅图像卷积,则会使图像变模糊。模糊程度由的值决定。该函数的拉普拉斯算子为:求二阶导数是线性运算,所以用对图像进行卷积与先用平滑函数对图像卷积再计算结果的拉普拉斯算子是一样的。这是LoG检测器最关键的概念,用对图像卷积会产生两个效果:是图像变平滑(从而减少噪声);计算拉普拉斯算子,以便产生双边缘图像。然后,定位边缘就是找到两个边缘之间的零交叉。(8)Canny边缘检测器Canny检测器的效果较好,更适合用于检测真正的弱边缘。Canny算子给出了一个好的边缘检测算子的3个指标:低失误率,即真正的边缘点尽可能提取,非边缘点尽可能不提取;高位置精度,检测的边缘应尽可能接近真实边缘;对每一个边缘点有唯一的响应,即得到单像素宽度的边缘。(9)各种算子的MATLAB实现及效果比较在MATLAB中可以由edge函数实现各算子对边缘的检测,其调用格式为:BW = edge(I,METHOD)自动选择阈值用指定的算子进行边缘检测;BW = edge(I,METHOD,THRESH)根据给定的阈值THRESH用指定的算子进行边缘检测,忽略所有小于阈值的边缘。当THRESH为空时,自动选择阈值;BW, THRESH = edge(I,METHOD,)返回edge使用的阈值,以确定哪个梯度值足够大到可以称为边缘点。其中,I为输入图像。返回图像BW为与I同大的二值图像,1表示边缘,0表示非边缘。I是unit8型、unit16型,或者是double型,BW是unit8型。METHOD:使用检测算子的类型,经常使用的有:sobel:缺省值,用导数的sobel近似值检测边缘,那些梯度最大的点返回边缘。roberts:用导数的roberts近似值检测边缘,那些梯度最大的点返回边缘。prewitt:用导数的prewitt近似值检测边缘,那些梯度最大的点返回边缘。LoG:用LoG算子检测边缘。Canny:用Canny算子检测边缘。THRESH:指定的阈值,所有不强于thresh的边缘都被忽略。使用几种典型边缘检测算子得到的边缘图像如图1.7.2所示。(a) 原图像 (b) Sobel检测的边缘(c)Roberts检测的边缘 (d) Prewitt检测的边缘(e) LoG检测的边缘 (f) Canny检测的边缘图1.7.2 使用几种典型边缘检测算子得到的边缘图由图可见,Canny算子的检测结果明显优于其它几个检测算子,除了检测到要求的特征外,还产生了最清晰的映射。2、边缘连接Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。Hough变换检测直线的原理Hough变换的核心是两个坐标系的变换。总所周知,一个点或者一个线段在不同坐标系下的表现形式是不同的。图像空间中一个像素的位置坐标对应Hough空间(Hough变换以后的空间,极坐标空间较常用)中的一条曲线,即直角坐标系中的点(x,y)与极坐标系中的正弦曲线相对应。如果图像空间中n个像素共一直线,那么它们Hough空间中的n条正弦曲线有一个公共交点如图5-1所示。把一幅图像中的所有有效像素(如二值化后的黑色像素)均对应到Hough空间,在Hough空间通过某交点的正弦曲线越多,此点所对应的图像空间的直线存在的可能性越大。将有较多正弦曲线通过的交点称做兴趣点(Point of Intereste, POI),Hough空间的兴趣点越多说明图像空间的直线越多。在Hough空间中对通过兴趣点的正弦曲线数进行简单的累加统计操作来完成直线检测任务。 (a) 图像空间的点 (b) 参数空间的正弦曲线图2.5.1 Hough变换检测直线图2.5.1(a)中为从原点到直线的垂直距离,为从x轴算起的角度,这条直线在-平面中为一点,见图2.5.1(b)。Hough变换检测直线的算法步骤如下:图像预处理,一般Hough变换只适应于黑白图像,即Hough变换之前应首先进行图像边缘提取;初始化一个、平面的数组。一般方向上的量化数目为对角线方向像素数,方向上的量化间距为2;顺序搜索图像的所有黑点,对每一个黑点,按式(5.1)计算、取不同值,分别将对应的数组元素加1;求出数组中的最大值并记录对应的、;绘出、对应的直线。Hough变换的基本策略是:由图像空间中的边缘数据点去计算参数空间中的参考点的可能轨迹,并在一个累加器中给计算出的参考点计数,最后选出峰值。在matlab中,使用hough函数计算二值图像的标准Hough变换。调用格式为:H, THETA, RHO = HOUGH(BW);H, THETA, RHO = HOUGH(BW,PARAM1,VAL1,PARAM2,VAL2);其中BW是作过边缘提取的二值图像,H是Hough变换后得到的矩阵,THETA、RHO分别对应Hough变换矩阵的每一列和每一行的值和值。PARAM1即为ThetaResolution,它定义了Hough变换矩阵沿着theta轴的间隔,缺省值为1;PARAM2即为RhoResolution,它定义了Hough变换矩阵沿着rho轴的间隔,缺省值为1。使用Hough变换进行线检测和链接的第一步是峰值检测。因为数字图像的空间中的量化、Hough变换的参数空间中的量化以及典型图像的边缘都不是很直这个事实,Hough变换的峰值一般都位于多个Hough变换单元中。在matlab中,函数houghpeaks可用于在Hough变换中找到一组有意义的明显峰值。调用格式为:PEAKS = HOUGHPEAKS(H,NUMPEAKS);PEAKS = HOUGHPEAKS(.,PARAM1,VAL1,PARAM2,VAL2);其中NUMPEAKS规定了能够识别的最多峰值数,缺省值为1;PEAKS是一个Q2的矩阵,其中Q的取值范围0-NUMPEAKS。PARAM1即为Threshold,它是非负参数,缺省值为0.5*max(H(:) ,H矩阵中高于Threshold的值才被认为是峰;PARAM2即为NHoodSize,它是一个二元向量m,n,取值为正奇数,定义了峰值附近的邻域尺寸,当峰值确定后,每一个峰值附近的邻域值被设为0,缺省值取最小的奇数值大于或等于size(H)/50 。找到的位置相关的像素用函数houghlines链接线段,调用格式为:LINES = HOUGHLINES(BW, THETA, RHO, PEAKS);LINES = HOUGHLINES(.,PARAM1,VAL1,PARAM2,VAL2);其中PARAM1即为FillGap,它是正实数,缺省值为20 ,当两线段间隔小于FillGap数值时,被合并在一起;PARAM2即为MinLength,它是正实数,缺省值为40 ,融合后线段长度小于MinLength的被舍弃。在这个例子中,使用函数hough, houghpeaks和houghlines来寻找图像中的一组线段。注:图像须首先边缘提取得到二值图才能进行hough变换,结果如图2.5.2。 (a) 原始图像 (b) 带有所选5个峰值位置 (c) Hough变换峰值的Hough变换 对应的线段图2.5.2 使用Hough变换作线检测检测和连接图2.5.2(b)显示了带有5个看起来很明显峰值位置重叠的Hough变换。图2.5.2(c)显示了结果图像,其中检测到的线段叠加为绿色的粗线。Hough变换运算量太大,且不考虑各点之间的距离信息,易于将不属于直线的点也连接到直线上,产生所谓过连接。实际中,通常可把图像分成小块,对各块图像利用Hough变换提取直线,然后将各直线连接起来,或增加变换过程中的遍历步径,来减少运算量。六、实验步骤:1、边缘检测(1)打开一幅灰度图像,利用MATLAB工具箱所提供的edge函数,用典型的几种边缘检测算子,分别对图像进行边缘检测,显示检测结果;(2)分析比较不同算子的检测效果;2、边缘连接(3)打开一幅灰度图像,利用MATLA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论