假设大小为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
假设大小为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
“直方图均衡化是自动获取转换函数的过程,所以你不必担心形状和转换函数的性质”
所以在直方图均衡化,变换函数计算使用累积频率的方法,这个过程是自动的。从图像的直方图中,我们确定累积直方图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