大结构元的图像特征检测
我正在尝试从一张图片中提取一些特征,但每个提取出来的特征都很小。看起来,提取更大特征的最简单方法是使用一个更大的结构元素,但当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
1 个回答
3
在ndimage.label
这个函数中,structure
这个参数是用来决定输入数据的连接方式的。当你把输入数据表示成一个矩形矩阵时,这种连接方式通常是指一个点p
周围的4个邻居或者8个邻居。Scipy遵循这个规则,所以它只接受这些情况,如果你传入比3x3
更大的结构,就会报错。
如果你真的想使用更大的结构,首先你需要非常清楚你想描述的连接方式是什么。然后你需要去实现它。一个更简单的方法是先对输入数据进行膨胀处理,然后再进行标记。这样可以有效地标记出那些本来会用更大structure
参数标记的大特征。