使用掩码对特定区域进行直方图均衡

Histogram Equalization on specific area using mask

我正在处理需要处理的图像。然而,只有这些图像的特定区域是感兴趣的,所以对于每张图像,我都有一个相应的蒙版(可以是任何形状,而不是边界框或任何特定的)。我想做直方图均衡化,但只在“蒙面”上,因为我对图像的其余部分不感兴趣。

有人问过类似的问题here,但是提出的解决方案依赖于边界框或均衡整个图像,这不是我的目标。

任何使用直方图均衡或 CLAHE、RGB 或灰度图像的解决方案都会很有趣

这是可能的。这是一个简单的方法:

流量:

您可以在掩码的帮助下对给定区域执行直方图均衡化。

  • 使用蒙版,存储像素为白色的坐标。
  • 存储灰度图像中存在的这些坐标的像素强度
  • 对这些存储的像素执行直方图均衡化。您现在将获得一组新值。
  • 根据坐标位置用新像素值替换旧像素值。

代码:

以下是使用灰度图像的插图。

img = cv2.imread('flower.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

掩码如下:

mask = cv2.imread('mask.jpg', 0)

我只想对花进行直方图均衡化。

将像素为白色(255)的坐标存储在mask中:

coord = np.where(mask == 255)

将所有像素强度存储在 gray 中存在的这些坐标上:

pixels = gray[coord]

对这些像素强度执行直方图均衡化:

equalized_pixels = cv2.equalizeHist(pixels)

创建名为 gray2gray 的副本。将均衡的强度放在相同的坐标中:

gray2 = gray.copy()
for i, C in enumerate(zip(coord[0], coord[1])):
    gray2[C[0], C[1]] = equalized_pixels[i][0]

cv2.imshow('Selective equalization', gray2)

比较:

Note: This process can be extended for Histogram Equalization or CLAHE, ON RGB or grayscale images.