【问题标题】:Reflection reduction in image减少图像反射
【发布时间】: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 图像。无论如何,你最终找到解决方案了吗?

标签: opencv computer-vision


【解决方案1】:

没有有效去除眩光的通用方法。

HSV + CLAHE 是一个良好且常见的开端,但行业方法通过假设有关主题的一些信息(人脸、传送带上的水果、通过检眼镜检查的视网膜)来“欺骗”,有时还假设有关照明的信息(白色对于这个问题中的图像,具有非常锋利边缘的天花板灯)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多