
matlab图像的灰度变换.doc
6页实验二 图像的灰度变换一、实验目的1、 理解数字图像处理中点运算的基本作用;2、 掌握对比度调整与灰度直方图均衡化的方法二、实验原理1、对比度调整如果原图像 f(x, y)的灰度范围是[ m, M],我们希望对图像的灰度范围进行线性调整,调整后的图像 g(x, y)的灰度范围是 [n, N],那么下述变换:就可以实现这一要求yxf)(MATLAB 图像处理工具箱中提供的 imadjust 函数,可以实现上述的线性变换对比度调整imadjust 函数的语法格式为:J = imadjust(I,[low_in high_in], [low_out high_out])J = imadjust(I, [low_in high_in], [low_out high_out])返回原图像 I 经过直方图调整后的新图像 J,[low_in high_in]为原图像中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围,灰度范围可以用 [ ] 空矩阵表示默认范围,默认值为 [0, 1]不使用 imadjust 函数,利用 matlab 语言直接编程也很容易实现灰度图像的对比度调整。
但运算的过程中应当注意以下问题,由于我们读出的图像数据一般是 uint8型,而在 MATLAB 的矩阵运算中要求所有的运算变量为 double 型(双精度型) 因此读出的图像数据不能直接进行运算,必须将图像数据转换成双精度型数据2、直方图均衡化直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善图像的灰度层次MATLAB 图像处理工具箱中提供的 histeq 函数,可以实现直方图的均衡化三、实验内容及要求1、 用 MATLAB 在自建的文件夹中建立 example2.m 程序文件在这个文件的程序中,将girl2.bmp 图像文件读出,显示它的图像及灰度直方图(可以发现其灰度值集中在一段区域) 用 imadjust 函数将它的灰度值调整到[0,1] 之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别;改变灰度值调整范围,观察调整后的图像的变化及其与原图像的差别,调整后的灰度直方图的变化及其与原灰度直方图的区别;进一步利用改变灰度值调整范围,实现图像的反转程序:A=imread('E:\1\girl2.bmp','bmp');figure(1),subplot(2,2,1);imshow(A);figure(1),subplot(2,2,2);imhist(A);B=imadjust(A,[0.35 0.65],[]);figure(1),subplot(2,2,3);imshow(B);figure(1),subplot(2,2,4);imhist(B)两次改变调整范围:A=imread('E:\1\girl2.bmp','bmp');C=imadjust(A,[0.35 0.65],[0 0.5]);figure(2),subplot(2,2,1);imshow(C);figure(2),subplot(2,2,2);imhist(C);D=imadjust(A,[0.35 0.65],[0.2 0.8]);figure(2),subplot(2,2,3);imshow(D);figure(2),subplot(2,2,4);imhist(D)图像的反转:A=imread('E:\1\girl2.bmp','bmp');E=imadjust(A,[0.35 0.65],[1 0]);figure(3),subplot(1,2,1);imshow(E);figure(3),subplot(1,2,2);imhist(E);2、读出图像文件 girl2.bmp,不调用 imadjust 函数,利用 matlab 语言直接编程实现图像的对比度调整和图像的反转。
对比度调整:A=imread('E:\1\girl2.bmp','bmp');I=double(A);J=I*1.5+40;A1=uint8(J);figure(4);subplot(1,2,1),imshow(A);figure(4);subplot(1,2,2),imshow(A1);反转:[X,MAP]=imread('E:\1\girl2.bmp','bmp');figure(5);imshow(X,1-MAP);3、 读取一幅灰度图像,用 histeq 函数将原始图像的灰度直方图均衡化,同时观察均衡化后的图像与前面图像的差别,均衡化后的灰度直方图与前面的灰度直方图的区别读取一幅索引图像,重复直方图均衡化处理,比较二者结果灰度图像:F=imread('E:\1\rice.tif','tif');figure(6);subplot(2,2,1),imshow(F);figure(6);subplot(2,2,2),imhist(F);G=histeq(F);figure(6);subplot(2,2,3),imshow(G);figure(6);subplot(2,2,4),imhist(G); 索引图像:H=imread('E:\1\forest.tif','tif');figure(7);subplot(2,2,1),imshow(H);figure(7);subplot(2,2,2),imhist(H);I=histeq(H);figure(7);subplot(2,2,3),imshow(I);figure(7);subplot(2,2,4),imhist(I);4、 (选做内容)不调用 histeq 函数,利用 matlab 语言直接编程实现图像的直方图均衡化处理。
function yu=myhisteq(x)m=size(x)n=m(1)*m(2)ma=max(max(x))mi=min(min(x))a=ma-mi+1p=zeros(1,a)pa=pfor i=1:m(1)for j=1:m(2) for k=mi:maif x(i,j)==kp(k-mi+1)=p(k-mi+1)+1endend end endfor i=mi:mafor j=mi:ipa(i-mi+1)=pa(i-mi+1)+p(j-mi+1)/nend pa(i-mi+1)=ma*pa(i-mi+1) endfor i=1:m(1)for j=1:m(2)for k=mi:maif x(i,j)==ky(i,j)=round(pa(k-mi+1))endendendendyu=uint8(y)end[x,map]=imread('girl2.bmp')yu=myhisteq(x)subplot(1,2,1),imshow(yu,map)subplot(1,2,1),imhist(yu,map)。
