2013-02-20 22 views
1

我想从图像中提取一些特征,但每个提取的特征都很小。提取较大特征的最简单方法似乎是使用较大的结构元素,但当ITER > 1时,以下代码失败。图像特征检测与大结构元素

from scipy import ndimage,misc 
lena=misc.lena().astype(float64) 
lena/=ndimage.maximum(lena) 
lena=lena>0.54# convert to binary image 
     # ===================== 
ITER=1 # || FAILS WHEN ITER > 1 || 
     # ===================== 
struct=ndimage.generate_binary_structure(2,1) 
struct=ndimage.iterate_structure(struct,ITER) 
lena_label,n =ndimage.label(lena,struct) 
slices=ndimage.find_objects(lena_label) 
images=[lena[sl] for sl in slices] 
imshow(images[0]) 

RuntimeError: structure dimensions must be equal to 3 

回答

2

用于ndimage.label功能参数structure被用于确定输入的连通性。当您将输入表示为矩形矩阵时,此连接通常关注点p附近的4个或8个邻居。 Scipy遵循这个约定,并将接受的结构限制为这种情况,因此当向该函数传递大于3x3的任何内容时会引发错误。

如果你真的想做这样的事情,首先你需要非常清楚地定义你想要描述的连通性。那么你需要实现它。一个更简单的方法是首先扩大输入,然后标注它。这将有效地提供更大的功能,这些功能将用更大的structure参数进行标记。

+0

我想使用类似于由'ndimage.iterate_structure(struct,2)'生成的结构的连接。那样,如果两个特征被一个像素分开,则它们被认为是相同的特征。膨胀与使用更大的结构具有完全相同的效果吗? – Navin 2013-02-21 00:50:36

+1

如果用一个基本正方形扩张,这两个由一个像素分隔的特征将被连接起来。因此,它们将被标记为单个功能。 – mmgp 2013-02-21 00:51:53

+0

好的,这似乎工作。 – Navin 2013-02-21 02:14:59