0

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

`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 像素

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

4

1 回答 1

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()
于 2016-06-03T18:49:43.453 回答