使用掩码对特定区域进行直方图均衡
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)
创建名为 gray2
的 gray
的副本。将均衡的强度放在相同的坐标中:
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.
我正在处理需要处理的图像。然而,只有这些图像的特定区域是感兴趣的,所以对于每张图像,我都有一个相应的蒙版(可以是任何形状,而不是边界框或任何特定的)。我想做直方图均衡化,但只在“蒙面”上,因为我对图像的其余部分不感兴趣。
有人问过类似的问题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)
创建名为 gray2
的 gray
的副本。将均衡的强度放在相同的坐标中:
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.