背景亮度未知时的背景减法
Background subtraction when background brightness is unknown
我目前正在从事一个计算机视觉项目,并且我的大部分算法都可以正常工作。但是,我目前正在对每张图像手动进行背景减法。这是因为我能找到的最常见的背景减法算法都使用了阈值,我的项目应该处理比我要提取的对象更亮和更暗的背景。
这是我目前减去背景的方式(使用 python 和 scikit 堆栈):
val = filters.threshold_otsu(image)
return image > val
当然,这只适用于比主体更暗的背景。
我的想法是找出背景是否明亮,然后根据那个改变不等式的符号,但找不到办法做到这一点。
是否有一种背景减除算法能够同时处理明亮和黑暗的背景,或者有其他方法可以解决这个问题?
有几种自动阈值技术可用。大津就是其中之一。
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)
一般情况下,没有固定的方法可以解决您的问题。前景和背景可以根据情况定义不同。
也就是说,使用一些启发式方法使算法在您的数据集上运行并非不可能。如果您能分享一些图片,让我们更好地理解您对前景和背景的定义,将会很有帮助。
以下是一些可能有用的启发式方法:
- 运行 Ostu 使用 THRESH_BINARY 和 THRESH_BINARY_INV 进行阈值处理。然后假设你的前景总是居中,选择中心区域的大部分是白色的结果。
- 如果前景总是大于背景,反之亦然,则计算白色区域的面积。
我目前正在从事一个计算机视觉项目,并且我的大部分算法都可以正常工作。但是,我目前正在对每张图像手动进行背景减法。这是因为我能找到的最常见的背景减法算法都使用了阈值,我的项目应该处理比我要提取的对象更亮和更暗的背景。
这是我目前减去背景的方式(使用 python 和 scikit 堆栈):
val = filters.threshold_otsu(image)
return image > val
当然,这只适用于比主体更暗的背景。 我的想法是找出背景是否明亮,然后根据那个改变不等式的符号,但找不到办法做到这一点。
是否有一种背景减除算法能够同时处理明亮和黑暗的背景,或者有其他方法可以解决这个问题?
有几种自动阈值技术可用。大津就是其中之一。
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)
一般情况下,没有固定的方法可以解决您的问题。前景和背景可以根据情况定义不同。
也就是说,使用一些启发式方法使算法在您的数据集上运行并非不可能。如果您能分享一些图片,让我们更好地理解您对前景和背景的定义,将会很有帮助。
以下是一些可能有用的启发式方法:
- 运行 Ostu 使用 THRESH_BINARY 和 THRESH_BINARY_INV 进行阈值处理。然后假设你的前景总是居中,选择中心区域的大部分是白色的结果。
- 如果前景总是大于背景,反之亦然,则计算白色区域的面积。