识别非常低级的图片,并在Python中将其涂成纯黑色
我正在研究一种自动“错误计数”算法,我想知道如果我从两张照片中减去两张,我怎么能识别出非常低的对比度(垫板上没有额外的错误-假设相机处于相同的位置,光线条件非常相似),我不会得到一个干净的黑色图像,因为事实上,光线条件将是最小的不同。现在我应用一个高斯滤波器和mahotas.thresholding.otsu()来找出哪里有bug(在上面放一个白色斑点),然后我使用ndimage.label()对它们进行计数 然而,如果我的输入图像“cropbugs.jpg”是深灰色的,我会在应用otsu()后得到一些随机输出,我的label()函数会返回一个随机的bug计数。如何识别我的图像是深灰色还是低对比度,并将bug count设置为0? 谢谢 到目前为止,我的代码如下所示:识别非常低级的图片,并在Python中将其涂成纯黑色,python,image-processing,filter,label,gaussian,Python,Image Processing,Filter,Label,Gaussian,我正在研究一种自动“错误计数”算法,我想知道如果我从两张照片中减去两张,我怎么能识别出非常低的对比度(垫板上没有额外的错误-假设相机处于相同的位置,光线条件非常相似),我不会得到一个干净的黑色图像,因为事实上,光线条件将是最小的不同。现在我应用一个高斯滤波器和mahotas.thresholding.otsu()来找出哪里有bug(在上面放一个白色斑点),然后我使用ndimage.label()对它们进行计数 然而,如果我的输入图像“cropbugs.jpg”是深灰色的,我会在应用otsu()后
bug_img = mahotas.imread('cropbugs.jpg')
pylab.gray()
bug_img = ndimage.gaussian_filter(bug_img, 6)#8
T = mahotas.thresholding.otsu(bug_img)
pylab.imshow(bug_img > T)
labeled,nr_objects = ndimage.label(bug_img > T)
print "Bug Count: "+str(nr_objects)
pylab.imshow(labeled)
pylab.jet()
pylab.show()
我可以看到解决这个问题的多种方法
bug_img.mean() + 2*bug_img.std() < THRESHOLD
bug_img.std() < THRESHOLD
bug_img.max() < THRESHOLD
sorted(bug_img.ravel())[-10] < THRESHOLD
如果你把图像放在灰度中,并得到颜色的标准差,我想这会让你接近你想要的位置。实际上,将
bug\u img.mean()
与bug\u img.std()
结合起来,以决定图像是否太暗(或对比度低)。问题解决了。顺便说一句,您可以使用(最新版本的)mahotas进行guassian_过滤和标记。所以你不需要ndimage。
labeled,nr_objects = mahotas.label(bug_img > T)
sizes = mahotas.labeled.labeled_size(labeled)
good_objects = (MIN_BUG_SIZE <= sizes) & (sizes <= MAX_BUG_SIZE)
print np.sum(good_objects)