Opencv 图像中的反射抑制
照明问题是常见且困难的。如何检测和减少光反射以保存图像中的更多信息?我用OpenCV和Python尝试了几种方法,但运气不佳 (带反射的图像) (无反射图像) 我尝试转换到HSV颜色空间,并对V通道应用直方图均衡化,使用均衡化:Opencv 图像中的反射抑制,opencv,computer-vision,Opencv,Computer Vision,照明问题是常见且困难的。如何检测和减少光反射以保存图像中的更多信息?我用OpenCV和Python尝试了几种方法,但运气不佳 (带反射的图像) (无反射图像) 我尝试转换到HSV颜色空间,并对V通道应用直方图均衡化,使用均衡化: import cv2 import numpy as np image = cv2.imread('glare.png') hsv_image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV) h, s, v = cv2.spli
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)
结果:
我还尝试了阈值化来寻找明亮的像素,然后用相邻的像素替换它们
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)
结果:
(阈值后)
没有有效消除眩光的一般方法
HSV+CLAHE是一个良好且常见的开端,但行业方法通过假设一些关于主题的信息(人脸、传送带上的水果、通过检眼镜的视网膜)以及有时关于照明的信息(对于本问题中的图像,具有非常锐利边缘的白色顶棚灯)来“欺骗”.他们声称使用自适应阈值,您可能可以进行边缘检测。你会在玻璃上看到明显的边缘。然后可以将边缘边界内的像素与边界外的像素进行映射。但是,这可能仅适用于此消息。另外,尝试在所有三个通道上运行CLAHE。我尝试了自适应阈值,但没有产生任何好的结果@Rick M.谢谢,我想知道什么是处理光反射问题的最合适的方法不仅是这种情况,而且谢谢你的回答,我会尝试并发布结果。尝试使用230到240的阈值,我尝试了,它似乎可以完美地检测到反射的边缘。在此之后,你可以称之为修复。我知道的大多数反射/阴影消除方法都是基于边缘的方法。您可能需要对此进行一些研究。在第一个示例中,您使用cv2.COLOR\u RGB2HSV转换图像。imread()输出BGR而不是RGB图像。不管怎样,你最终找到解决办法了吗?