作业3:直方图均衡
1.选取一张对比度不明显的彩色图像,编写MATLAB代码对RGB通道独立地进行直方图
均衡,同时用PHOTOSHOP软件对其进行均衡,比较两种处理方法在效果上的差异。
使用R/G/B=image(:,:,1/2/3);提取图像的三个通道,imshow(R);显示三个通道的图像,imhist(R);显示对应颜色分量的直方图,r=histeq(R);分别对三个通道进行直方图均衡化,equated = cat(3,r,g,b);联合RGB三个数组,得到均衡化后的图像。
原图与matlab直方图均衡化后的图像
原图的RGB分量
均衡后的RGB分量
在photoshop中处理图像后得到下图的结果。
Ps中得到的图像RGB通道独立直方图均衡得到的图像比较:选取的原图是逆光拍摄,颜色很暗,暗部细节很多。
经过matlab处理后,灰度级部分合并,灰度级较低的间隔变大,灰度级较高的间隔变小。
但对真彩色图像的直方图均衡化时,通过单纯地对RGB三个分量图像分别均衡、合并, 会使均衡后的图像出现轻微的色彩失真现象, 而且原图中灰度级较高的地方的细节部分缺失。
但是经过ps处理后的图像,原本灰度值较低的地方明显变亮,同时原本灰度值较高的地方仍然很好保留了,并没有出现matlab处理后的问题。
Ps处理后的图像色彩也很正常,没有出现失真的问题。
数字图像直方图的算法步骤:
①列出原始图像的灰度级f j,j=0,1,…,L-1,
②统计各灰度级的像素数目n j,j=0,1,…,L-1,
③计算原始图像直方图各灰度级的频数p(f j)= n j/N,j=0,1,…,L-1,
④计算累计分布函数C(j)=Σp(f k), j=0,1,…,L-1,
⑤g i= INT[(g max-g min)C(f)+g min+0.5]
2.阅读"Exact Hitogram Specification"这篇英文文献第二部分和第三部分,结合压缩包中
MATLAB源代码,理解精确直方图均衡的算法原理,重点是借助空间滤波实现像素排序的算法原理,用(1)中图片,比较精确直方图均衡和PHOTOSHOP均衡的效果差异。
精确直方图均衡的算法原理:由于数字图像是离散的,所以直方图均衡化后并不能产生具有理想均衡直方图的图像,而如果定义一种新的排序关系,在对像素进行排序时应用严格的排序就可以得到一个精确均衡的直方图。
步骤:
①f是离散N*M图像的灰度级,H是直方图;
②定义<一种严格排序;
③让像素按照这个顺序排序;
④在灰度级中从左到右将③中的排序分割,类似j组有hj个像素;
⑤对于j组里的所有像素,都设为j灰度级。
排序判定规则:
严格排序可以由一对一映射和一组整数构成,比如:O:[1,N]×[1,M]→[1,M×N],那么如果在整数集中按通常的排序O(x1,y1)>O(x2,y2),那么诱导排序f(x1,y1)>f(x2,y2)。
总共这些映射的数量是(MN)!,但它们中的大部分对于精确直方图均衡都是无用的。
为了得到一个有用的严格排序,诱导排序必须与正常排序一致,即在正常排序时,一个像素的灰度值大于另一个像素的灰度值,在新排序中也应该是这样的。
而且,新的排序应当细化正常排序,细化程度在一定程度上应与人类对亮度的感知相一致。
这种排序要考虑像素邻域。
在有些改善直方图均衡的方法中,会考虑水平和垂直方向4个相邻像素的灰度值,但是4个像素的平均灰度值并不能完全区分,所以在这里考虑每个像素周围的一片区域。
K是一个整数,w1,w2,…w k是关系为w1⊂w2⊂…⊂wk的集合。
对于每个像素f(x,y),m i(x,y)是f(x,y)在w i集合中灰度值的平均值。
M(x,y)表示k元组,考虑定义在k元组上的字典顺序。
当M(x1,y1)<M(x2,y2)时,f(x1,y1)<f(x2,y2)。
在这种排序下,如果一个像素的局部灰度均值远大于另一个像素的局部灰度均值,经过排序后它的亮度将会高于另一个像素。
通过k取不同值,调整直方图均衡的程度。
原图
Ps处理后精确直方图均衡化后
比较:精确直方图均衡后的图像不仅在灰度值低的部分提高了亮度,灰度级经过严格排序后变得非常平均。
图像的对比度也增强很多,而暗部的细节变得更加清晰。
Ps处理后,图像也有明显的亮度和对比度的增强,但是整体灰度级没有精确直方图均衡后的图像更加平均。
总体来说,两种处理得到的图像差不多。
源代码:
1.histeq1
image=imread('original.jpg');
R=image(:,:,1);%%提取图片的RGB三种颜色
G=image(:,:,2);
B=image(:,:,3);
subplot(3,2,1),imshow(R);
title('红色分量');
subplot(3,2,2), imhist(R);
title('红色分量直方图');
subplot(3,2,3),imshow(G);
title('绿色分量');
subplot(3,2,4), imhist(G);
title('绿色分量直方图');
subplot(3,2,5),imshow(B);
title('蓝色分量');
subplot(3,2,6), imhist(B);
title('蓝色分量直方图');
r=histeq(R);%%分别对RGB通道进行直方图均衡
g=histeq(G);
b=histeq(B);
figure,
subplot(3,2,1),imshow(r);
title('红色分量均衡');
subplot(3,2,2), imhist(r);
title('红色分量均衡直方图');
subplot(3,2,3),imshow(g);
title('绿色分量均衡');
subplot(3,2,4), imhist(g);
title('绿色分量均衡直方图');
subplot(3,2,5), imshow(b);
title('蓝色分量均衡');
subplot(3,2,6), imhist(b);
title('蓝色分量均衡直方图');
figure,
equated = cat(3,r,g,b);%%联合RGB三个数组,维数为3
subplot(1,2,1),imshow(image);
title('original');
subplot(1,2,2),imshow(equated);
title('均衡化后的图像');
2.exact_histogram1
image=imread('grey.jpg');
output=exact_histogram(image);
imshow(output);。