识别非常低级的图片并用Python将其涂成纯黑色

2024-04-19 21:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个自动的“bug count”算法,我想知道如何识别一个非常低的对比度(pad上没有额外的bug-假设相机在同一位置,光线条件非常相似)如果我互相减去两张照片,我就不会得到一个干净的黑色图像,因为光照条件将是最低限度的与众不同。现在我应用高斯滤波器mahotas.thresholding.otsu公司()画出有错误的地方(在上面放一个白色的斑点),然后我用nImage.label()数数他们。在

但是,如果我的输入图像“克罗布格斯.jpg“是非常深灰色的,在应用otsu()之后,我得到一些随机输出,我的label()函数返回一个随机的bug计数。我如何识别我的图像是非常深灰色或低对比度,只是设置错误计数为0? 谢谢

到目前为止,我的代码如下:

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()

Tags: 图像img错误条件buglabeljpg计数
1条回答
网友
1楼 · 发布于 2024-04-19 21:06:04

我能找到解决这个问题的多种方法

  1. (这是评论中的建议)。 根据平均值、标准差、最大值或某种组合定义某种类型的固定规则。您将得到一个类似于以下其中一个的测试:

    bug_img.mean() + 2*bug_img.std() < THRESHOLD
    bug_img.std() < THRESHOLD
    bug_img.max() < THRESHOLD
    sorted(bug_img.ravel())[-10] < THRESHOLD
    
  2. 使用基于纹理特征的分类系统(参见前面的my answer to a related question)。

  3. 继续使用label,好像一切都很好,然后对结果进行后期过滤。例如:

    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)
    

相关问题 更多 >