OpenCV 4.10.0
开源计算机视觉
|
考虑这样一个图像,其像素值仅限于某个特定的值范围。例如,较亮的图像中的所有像素都限于高值。但一张好图像应该包含图像中所有区域的像素。因此,您需要将该直方图拉伸到两端(如下图所示,来自维基百科),而这正是直方图均衡所做的(用简单的话来说)。这通常会提高图像对比度。
我建议您阅读维基百科上的直方图均衡页面,以了解更多详细信息。它有很好的解释和详细的例子,以便您在阅读后几乎能理解所有内容。
我们使用以下函数:cv.equalizeHist (src, dst)
src | 源 8 位单通道图像。 |
dst | 与 src 相同大小和类型、目标图像。 |
在自适应直方图均衡中,图像被分成称为“图块”的小块(在 OpenCV 中,默认情况下图块大小为 8x8)。然后,通常对这些块中的每一个执行直方图均衡。因此,在较小的区域中,直方图将限于较小的区域(除非有噪声)。如果存在噪声,它将被放大。为了避免这种情况,将应用对比度限制。如果任何直方图柱状图高于指定的对比度限制(在 OpenCV 中默认为 40),则在应用直方图均衡之前,这些像素将被剪裁并均匀分布到其他柱状图中。均衡之后,应用双线性插值以去除图块边框中的伪影。
我们使用以下类:cv.CLAHE (clipLimit = 40, tileGridSize = new cv.Size(8, 8))
clipLimit | 对比度限制阈值。 |
tileGridSize | 用于直方图均衡的网格大小。输入图像将被分成大小相等的矩形图块。tileGridSize 定义了行和列中的图块数。 |