【发布时间】:2019-08-18 06:42:35
【问题描述】:
照明问题是常见且困难的。如何检测和减少光反射以从图像中保存更多信息?我用 OpenCV 和 Python 尝试了几种方法,但都没有运气。
(带反射的图像)
(没有反射的图像)
我尝试转换为 HSV 颜色空间,并将直方图均衡应用于 V 通道,使用 Clahe 均衡:
import cv2
import numpy as np
image = cv2.imread('glare.png')
hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
h, s, v = cv2.split(hsv_image)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
v = clahe.apply(v)
hsv_image = cv2.merge([h, s, v])
hsv_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2RGB)
cv2.imwrite('clahe_h.png', hsv_image)
结果:
我也尝试使用阈值来找到明亮的像素,然后使用Image Inpainting 将它们替换为相邻的像素。
import cv2
import numpy as np
image = cv2.imread('glare.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)[1]
dst_TELEA = cv2.inpaint(image,thresh,3,cv2.INPAINT_TELEA)
cv2.imwrite('after_INPAINT.png',dst_TELEA)
【问题讨论】:
-
does this help?他们声称使用自适应阈值,look here for example on using it
-
您可能可以进行边缘检测。您将在 玻璃 上获得显着的边缘。然后您可以将 边缘边界 内的像素与外面的像素映射。但是,这可能仅适用于此消息。另外,尝试在所有三个频道上运行 CLAHE
-
谢谢,我尝试了自适应阈值,但它没有产生任何好的结果。 @Rick M。谢谢,我想知道处理光反射问题的最合适方法是什么,不仅是这种情况,而且感谢您的回答,我会尝试并发布结果。
-
尝试使用 230 到 240 的阈值,我试过了,它似乎检测到了完美反射的边缘。在此之后,您可以调用 inPaint。我知道的大多数反射/阴影去除方法都是基于边缘的方法。您可能想对此进行一些研究。
-
在第一个示例中,您使用 cv2.COLOR_RGB2HSV 转换图像。 cv2.imread() 输出 BGR 而不是 RGB 图像。无论如何,你最终找到解决方案了吗?