【发布时间】:2013-07-28 15:43:05
【问题描述】:
目前我很难想出一种从我收到的图像中去除梯度的好方法。
图像是由显微镜相机拍摄的照片,中间有眩光。图像具有贯穿整个图像的图案。但是,我应该消除相机灯创建的图像上的眩光。
很遗憾,由于相机的特性,无法在光线下拍摄黑色背景的照片以找到渐变分布。我也没有没有渐变的比较图像。 (注意——拍照时眩光的位置总是一致的)
简单来说,它就像一张带有闪光灯的照片,但我想摆脱闪光灯。唯一的问题是我无法获得没有闪光灯的图像来比较甚至获得只有闪光灯的黑色图像。
我目前的想法是进行边缘检测并在远离边缘的特定位置获取样本(由于颜色差异),并使用它来衡量梯度的分布,因为这些区域应该具有相对相同的颜色。但是我想知道是否有更简单和更好的方法来做到这一点。
如果需要,我稍后会发布图片示例。
目前我更喜欢使用 opencv 在 c++ 中解决这个问题,如果这样更容易的话。
提前感谢您对此问题的任何可能的想法。如果有其他链接、教程或帖子可以解决我的问题,我将不胜感激。
您可以看出,从白点可以看出,img 上有一盏灯正在发光。并且由于光线的原因,顶部比底部浅,椭圆形内部的颜色实际上在彩色照片中有所不同。然而,盒子和椭圆之间的颜色应该是一致的。我最初的想法可能是仅对这些区域进行一些采样,并构建一个我可以用来移除光线的配置文件,但我不确定这会有多有效,或者是否有更好的方法
编辑:
我尝试了 Roger 的建议,结果非常好。使用 110 核高斯模糊器来寻找照明并在此基础上进行 CLAHE。 (都在opencv中完成)
然而,我的同事告诉我,图像看起来并不完全一致,并指出过去光线所在的区域周围稍微亮一些。他建议尝试选择性高斯模糊,其中高于特定阈值像素值的区域不模糊,而图像的其余部分则模糊。
有没有人对此有意见,也许有链接、教程或类似的例子?对于 Photoshop 和 gimp 等程序,我发现的大多数东西往往是选择性模糊
EDIT2:
仅凭眼睛很难分辨,但我相信通过使用简单的平面拟合算法,我已经实现了相对接近的均匀化。((-A * x - B * y) / C) (x,y,z) 其中z 是像素值。我认为这可以通过利用正弦拟合函数来改善?我不确定。但我对结果比较满意。非常感谢罗杰的好主意。
我相信使用一堆图片并获取平均值将是另一种好方法(由 roger 建议)但我无法实现这一点,因为我没有提供各种图片并且机器正在修改所以我无法使用它。
【问题讨论】:
-
您可以尝试使用具有非常大内核的高斯模糊来将图像转换为背景渐变的近似值。不看图很难说。
-
模糊分布是否足够有效,可以在整个 img 中完全创建均匀的亮度分布?
-
我非常喜欢这个问题及其答案。一个月前我发布了一个类似的问题(stackoverflow.com/questions/19035835/…),但这里的答案要好得多。
-
如果您使用一张漫射纸拍摄图像,然后稍微模糊它以去除纸上的伪影,它将为您提供照明的大致基本事实。然后,您可以使用 MOG2 等背景减法将其删除,将 learnRate 设置为 0。
标签: c++ opencv image-processing gradient