假设给定大小为 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