实验三图像增强—灰度变换⼀、实验⽬的:
1、了解图像增强的⽬的及意义,加深对图像增强的感性认识,巩固所学理论知识。2、学会对图像直⽅图的分析。
3、掌握直接灰度变换的图像增强⽅法。⼆、实验原理及知识点
术语‘空间域’指的是图像平⾯本⾝,在空间域内处理图像的⽅法是直接对图像的像素进⾏处理。空间域处理⽅法分为两种:灰度级变换、空间滤波。空间域技术直接对像素进⾏操作其表达式为:g(x,y)=T[f(x,y)]
其中f(x,y)为输⼊图像,g(x,y)为输出图像,T是对图像f进⾏处理的操作符,定义在点(x,y)的指定领域内。
定义点(x,y)的空间邻近区域的主要⽅法是,使⽤中⼼位于(x,y)的正⽅形或长⽅形区域。此区域的中⼼从原点(如左上⾓)开始逐像素点移动,在移动的同时,该区域会包含不同的领域。T应⽤于每个位置(x,y),以便在该位置得到输出图像g。在计算(x,y)处的g值时,只使⽤该领域的像素。
灰度变换T的最简单形式是使⽤领域⼤⼩为1×1,此时,(x,y)处的g值仅由f在该点处的亮度决定,T也变为⼀个亮度或灰度级变化函数。当处理单设(灰度)图像时,这两个术语可以互换。由于亮度变换函数仅取决于亮度的值,⽽与(x,y)⽆关,所以亮度函数通常可写做如下所⽰的简单形式: s=T(r)
其中,r表⽰图像f中相应点(x,y)的亮度,s表⽰图像g中相应点(x,y)的亮度。核⼼函数是imhist,其基本语法为:h=imhist(f,b)
其中,f为输⼊图像,h为其直⽅图h(),b是⽤于形成直⽅图像的灰度级的个数。如果b未包含在此变量中,则默认值为256.如要处理⼀幅uint8
类图像并令b=2,则亮度标度范围分为两部分:0—127和128—255.所得的直⽅图只有两个值:h(1)等于图像在区间[0,127]内的像素总数,h(2)等于图像在区间[127,255]内的像素总数。使⽤ p=imhist(f,b)/numel(f)
则可获得归⼀化直⽅图。其中numel(f)是数组f中的元素个数(图像中的像素数)三、实验内容:1、图像数据读出2、计算并分析图像直⽅图
3、利⽤直接灰度变换法对图像进⾏灰度变换4、直⽅图绘制选项
例1:计算并绘制图像直⽅图f=imread('e:\\images\\medicine.jpg');imshow(f);g=rgb2gray(f);figure(2),imshow(g);
figure(3),imhist(g,256); %显⽰其直⽅图
g1=imadjust(f,[0 1],[1 0]); %灰度转换,实现明暗转换(负⽚图像)
figure,imshow(g1);
g2=imadjust(f,[0.5 0.75],[0 1]); %将0.5到0.75的灰度级扩展到范围[0 1]figure,imshow(g2);
figure,subplot(1,2,1),imshow(g1);subplot(1,2,2),imshow(g2);
例2.1:显⽰图像的直⽅图>> f=imread('e:\\images\\pollen.jpg');>> whos f
Name Size Bytes Classf 500x500x3 750000 uint8 array
Grand total is 750000 elements using 750000 bytes >>figure(1),imshow(f)>> g=rgb2gray(f);>> imshow(g)>> figure,imhist(g);
2.2 学习使⽤imcontour函数显⽰图像的等灰度值图
imcontour(I,n) n为灰度级的个数
imcontour(I,v) v是由⽤户指定所选的灰度级向量>> figure(4),imcontour(g,8);
3、学习使⽤imadjust函数通过直⽅图调整对⽐度
J=imadjust(I,[low high],[bottom top],gamma) 返回图像I经直⽅图调整后的图像J [low high] 为原图像中要变换的灰度范围[bottom top] 指定了变换后的灰度范围gamma为校正量>> figure(3),imhist(g);>> k=imadjust(g,[0.1 0.2 ] ,[ ]);>> figure(4),imhist(k);>> k=imadjust(g,[0.1 0.2 ] ,[ ]);>> figure(4),imhist(k);>> figure(5),imshow(k);
4、histeq函数直⽅图均衡化
J=histeq(I,hgram)
将直⽅图变换成⽤户指定的向量hgram. hgram中的每⼀个元素都在[0 ,1]中。J=histeq(I,n)
指定均衡化后的灰度级数n,缺少为.[J,T]=histeq(I,……)
返回从能将图像I的灰度直⽅图变换成图像J的直⽅图的变换T。>> f=imread('e:\\images\yre.jpg');>> whos f
Name Size Bytes Classf 128x137x3 52608 uint8 array
Grand total is 52608 elements using 52608 bytes>> imshow(f) >> g=rgb2gray(f);>> figure,imhist(g);>> k=histeq(g);>> figure,imshow(k);>> figure,imhist(k);
例3:
g=imread('e:\\images\\point.jpg');figure(1),imshow(g);
h=log(1+double(g)); %对输⼊图像对数映射变换h=mat2gray(h); %将矩阵h转换为灰度图⽚h=im2uint8(h); %将灰度图转换为8位图figure,imshow(h)
5、通过imhist函数,可以得到⼯具箱中默认显⽰的直⽅图。但绘制直⽅图的⽅法还有很多,下⾯是⼀些有代表性的绘制选项。
可以利⽤条形图来绘制,可以使⽤函数:bar( horz,v,width)
其中v是⼀个⾏向量,包含将被绘制的点;horz是⼀个与v有着相同的维数的向量,包含⽔平值的增量;width是⼀个值在0和1之间的数。若省略horz,则⽔平轴会从0到length(v)等分为若⼲个单位。当width的值为1时,竖条较明显。当width的值为0时,竖条是简单的垂直线。绘制条形图时,通常将⽔平轴等分为⼏段,以降低⽔平轴的分辨率。例:⽣成⼀幅条形图,其⽔平轴以10个灰度级为⼀组。h=imhist(f);h1=h(1:10:256);horz(1:10:256);bar(horz,h1,1);bar(horz,h1,0.8);bar(h1,1);
figure(4),stem(horz,h,'fill');axis([0 255 0 500]);
>> set(gca,'xtick',[0:50:255]);>> set(gca,'ytick',[0:50:500]);
5、最后,考虑plot函数,该函数将⼀组点⽤直线连接起来,语法为:plot(horz,v,’color_linestyle_marker’)
如:>>plot(horz,v,’color’,’g’,’linestyle’,’none’,’marker’,’s’)
将绘制中间⽆连线的绿⾊⽅形。Plot的默认值为⿊⾊⽆标记实线。四、实验仪器PC⼀台,MATLAB软件五、实验图⽚
Fig.1 point.jpg Fig.2 medicine.jpg
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务