任务安排:
1、理解图像直方图的含义;
2、使用直方图实现匹配。
任务完成:
图像直方图是反映一个图像像素分布的统计图,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
当图像的灰度分布不均匀,其灰度分布集中在较窄范围内时,图像的细节往往不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化(匹配)两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。
直方图均衡化
直方图的均衡化实际也是一种灰度的变换过程,将当前的灰度分布通过一个变换函数,变换为范围更宽、灰度分布更均匀的图像。也就是将原图像的直方图修改为在整个灰度区间内大致均匀分布,因此扩大了图像的动态范围,增强图像的对比度。
直方图规定化
直方图规定化,也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,也就是在执行规定化操作时,首先要知道变换后的灰度直方图,这样才能确定变换函数。规定化操作能够有目的的增强某个灰度区间,相比于,均衡化操作,规定化多了一个输入,但是其变换后的结果也更灵活。
直方图匹配(规定化)首先求出灰度图像的灰度级数的概率密度和累计分布函数,得到原始图像和模板图像的灰度累计分布函数直方图后(这里的模板的灰度级数N和原始图像的灰度级数M我们只讨论M>=N的情况),通过单映射规则(SML)或组映射规则(GML)将模板灰度分布特征映射到原始图像中。
灰度图直方图匹配
clear
A=imread('gray_one.jpg');%读取原图像A
B=imread('gray_two.jpg');%读取匹配图像B
Amatch=imhist(B);%获取匹配图像B的直方图
Aout=histeq(A,Amatch);%直方图匹配
figure;%显示原图像、匹配图像和匹配后的图像
subplot(1,3,1),imshow(A);title('原图A');
subplot(1,3,2),imshow(B);title('匹配图像B');
subplot(1,3,3),imshow(Aout);title('匹配后图A');
figure;%显示原图像、匹配图像和匹配后图像的直方图
subplot(3,1,1),imhist(A,64);title('原图A直方图');
subplot(3,1,2),imhist(B,64);title('匹配图像B直方图');
subplot(3,1,3),imhist(Aout,64);title('匹配之后图A直方图');
clear
C=imread('color_one.jpg');%读取原图像C
D=imread('color_two.jpg');%读取匹配图像D
R=C(:,:,1);%获取原图像C的R通道red
G=C(:,:,2);%获取原图像C的G通道green
B=C(:,:,3);%获取原图像C的B通道blue
Rmatch=D(:,:,1);%获取匹配图像D的R通道
Gmatch=D(:,:,2);%获取匹配图像D的G通道
Bmatch=D(:,:,3);%获取匹配图像D的B通道
Rmatch_hist=imhist(Rmatch);%获取匹配图像D的R通道直方图
Gmatch_hist=imhist(Gmatch);%获取匹配图像D的G通道直方图
Bmatch_hist=imhist(Bmatch);%获取匹配图像D的B通道直方图
Rout=histeq(R,Rmatch_hist);%R通道直方图匹配
Gout=histeq(G,Gmatch_hist);%G通道直方图匹配
Bout=histeq(B,Bmatch_hist);%B通道直方图匹配
E(:,:,1)=Rout;%匹配后的RGB三个通道组成图像E
E(:,:,2)=Gout;
E(:,:,3)=Bout;
figure;%显示原图像、匹配图像和匹配后的图像
subplot(1,3,1),imshow(C);title('原图像C');
subplot(1,3,2),imshow(D);title('匹配图像D');
subplot(1,3,3),imshow(E);title('匹配之后图像');
figure;%显示原图像、匹配图像和匹配后图像的直方图
subplot(3,3,1),imhist(R,64);title('原图像C的R通道直方图');
subplot(3,3,2),imhist(G,64);title('原图像C的G通道直方图');
subplot(3,3,3),imhist(B,64);title('原图像C的B通道直方图');
subplot(3,3,4),imhist(Rmatch,64);title('匹配图像D的R通道直方图');
subplot(3,3,5),imhist(Gmatch,64);title('匹配图像D的G通道直方图');
subplot(3,3,6),imhist(Bmatch,64);title('匹配图像D的B通道直方图');
subplot(3,3,7),imhist(Rout,64);title('匹配之后图像的R通道直方图');
subplot(3,3,8),imhist(Gout,64);title('匹配之后图像的G通道直方图');
subplot(3,3,9),imhist(Bout,64);title('匹配之后图像的B通道直方图');