【问题标题】:Count pixels of a region detected correctly with Mahotas计算使用 Mahotas 正确检测到的区域的像素
【发布时间】:2016-04-08 21:13:05
【问题描述】:

我正在使用附带的算法,目的是测量代码识别的区域的像素数量:

`mahotas.label(image)`

问题是背景面积越大,检测到的像素数越多,考虑到所有点在不同图像中的像素数相同。这是由于以下行:

`mh.gaussian_filter(imagen,4)`

但这不应该发生,因为我需要的是这些区域是具有背景的区域的完全独立测量值。

附上不同大小但相同方点为200x200像素的脚本和图片作为示例。

import mahotas as mh
import mahotas.demos
import numpy as np
from pylab import imshow, show
imagen = mahotas.imread('76x66.png')
#imagen = mahotas.imread('100x100.png')
#imagen = mahotas.imread('200x200.png')
imagen = imagen[:,:,0]
imagen = mh.gaussian_filter(imagen, 4)
imagen = (imagen> imagen.mean())
etiquetas, unidades = mahotas.label(imagen)
sizes = mahotas.labeled.labeled_size(etiquetas)
print sizes[0]
imshow(imagen)
show()

结果:

  • 图像 100x100.png 打印尺寸 = 1012 像素
  • 图像 200x 200.png 打印尺寸 = 1292 像素
  • 图片 76x66.png 打印尺寸 = 848 像素

但是,每个人都应该是平等或相似的

【问题讨论】:

    标签: python image-processing mahotas


    【解决方案1】:

    由于区域的大小不同,因此在您的回答中显示的 3 种情况下,背景(未占用的空间)也会有所不同。您的代码输出的值 - 1012、1292 和 848 - 分别是这三种情况的背景大小。 但是您还提到“......目的是测量代码识别的区域的像素数量......” 您可以通过以下方式获得: print sizes[1].
    这三种情况显然不相等——你应该得到 8988,38708 和 4168——按照上面结果的顺序。这是根据您提供的参考链接。编辑后的代码如下:

    import mahotas as mh
    import mahotas.demos
    import numpy as np
    from pylab import imshow, show
    
    imagen = np.zeros((400,400),bool)
    imagen = mh.gaussian_filter(imagen, 4)
    imagen = (imagen> imagen.mean())
    
    imagen[3:79,1:77]=1
    imagen[80:180,78:178]=1
    imagen[185:385,194:394]=1
    
    etiquetas, nr_objects = mh.label(imagen)
    
    sizes = mahotas.labeled.labeled_size(etiquetas)
    print sizes[0]
    
    imshow(etiquetas, interpolation='nearest')
    show()
    

    【讨论】:

    • @Eduardo Munizaga 代码将三个正方形区域放在一张图像上。这样,您就拥有相同的背景,因此“...应该相等或相似...”。
    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2012-11-02
    • 2021-11-19
    相关资源
    最近更新 更多