背景亮度未知时的背景减法

时间:2017-11-16 12:20:59

标签: python computer-vision scikit-image

我目前正致力于计算机视觉项目,并且我的大部分算法都在运行。但是,我目前正在每张图片上手动进行背景减法。这是因为我能找到的最常见的背景减法算法使用了阈值处理,我的项目应该处理比我想要提取的对象更亮和更暗的背景。

这是我当前减去背景的方式(使用python和scikit堆栈):

val = filters.threshold_otsu(image)
return image > val

当然,这仅适用于比主体更暗的背景。 我有想法找出背景是否明亮,然后根据改变不平等的标志,但找不到办法。

是否有背景减法算法能够处理明亮和黑暗的背景,还是有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

通常没有固定的方法来解决您的问题。前景和背景可以根据情况进行不同的定义。

话虽这么说,使用一些启发式方法使算法适用于您的数据集并非不可能。如果您可以分享一些图像以便我们更好地理解您对前景和背景的定义,将会很有帮助。

以下是一些可能有帮助的启发式方法:

  1. 使用THRESH_BINARY和THRESH_BINARY_INV运行Ostu阈值。然后假设您的前景始终居中,请选择中心区域的大部分为白色的结果。
  2. 如果前景总是大于backgorund,反之亦然,则改为计算白色区域的面积。

答案 1 :(得分:-1)

有几种自动阈值技术可供选择。其中一个是大津。

http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html

它在opencv(https://docs.opencv.org/trunk/d7/d4d/tutorial_py_thresholding.html

中实现
import cv2
img = cv2.imread('noisy2.png',0)
ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)