假设尺寸为64×64像素(M * N = 4096)的给定3位图像(L = 8)具有如下所示的强度分布。如何获得直方图均衡转换函数 然后计算图像的均衡直方图?
Rk nk
0 800
1 520
2 970
3 660
4 330
5 450
6 260
7 106
答案 0 :(得分:5)
“直方图均衡是自动获得转换函数的过程。所以你不必担心转换函数的形状和性质”
因此,在直方图均衡中,使用累积频率方法计算变换函数,并且该过程是自动的。从图像的直方图中,我们确定累积直方图c
,在我们前进时重新调整值,使它们占据8位范围。通过这种方式,c
成为一个查找表,可以随后应用于图像以执行均衡。
rk nk c sk = c/MN (L-1)sk rounded value
0 800 800 0.195 1.365 1
1 520 1320 0.322 2.254 2
2 970 2290 0.559 3.913 4
3 660 2950 0.720 5.04 5
4 330 3280 0.801 5.601 6
5 450 3730 0.911 6.377 6
6 260 3990 0.974 6.818 7
7 106 4096 1.000 7.0 7
现在均衡的直方图是
rk nk
0 0
1 800
2 520
3 0
4 970
5 660
6 330 + 450 = 780
7 260 + 106 = 366
均衡算法可以作为
给出Compute a scaling factor, α= 255 / number of pixels
Calculate histogram of the image
Create a look up table c with
c[0] = α * histogram[0]
for all remaining grey levels, i, do
c[i] = c[i-1] + α * histogram[i]
end for
for all pixel coordinates, x and y, do
g(x, y) = c[f(x, y)]
end for
但直方图均衡存在问题,主要是因为它是一种完全自动的技术,没有设置参数。有时,它可以提高我们显着解释图像的能力。但是,很难预测任何给定图像的均衡效果如何;事实上,它可能没有任何用处。这是因为对比度的改善在统计上是最佳的,而不是在感知上。在具有窄直方图和相对较少灰度级的图像中,由于直方图均衡化导致的对比度的大幅增加可能具有降低感知图像质量的不利影响。特别是,采样或量化伪像和图像噪声可能会变得更加突出。
自动获得转换(映射)功能的替代方法是直方图规范。在直方图规范中,我们不需要平直的直方图,而是明确指定特定的形状。我们可能希望在需要一组相关图像具有相同直方图的情况下这样做,或许,特定操作对所有图像产生相同的结果。 直方图规范可以视为两阶段过程。首先,我们通过均衡将输入图像转换为具有平直线图的临时图像。然后我们将这个均衡的临时图像转换成具有所需直方图的输出图像。容易获得第二阶段的映射函数。由于累积直方图的重新缩放版本可用于将具有任何形状的直方图变换为平直线图,因此累积直方图的倒数将执行从平坦直方图到具有指定形状的直方图的逆变换。
有关直方图均衡和使用C和C ++代码的映射函数的更多详细信息 https://programming-technique.blogspot.com/2013/01/histogram-equalization-using-c-image.html