Image ismember找不到bwlabel生成的数字

Image ismember找不到bwlabel生成的数字,image,matlab,image-processing,image-segmentation,Image,Matlab,Image Processing,Image Segmentation,以下是steve的帖子: 我想把它应用到一个非常简单的案例中。这是我的逻辑图像,它显然有三个对象: 这是我使用的代码: [L_t,n_t] = bwlabel(logical_image); iii = find(L_t == 2); bbb = ismember(L_t,iii); imshow(bbb); 但是我得到的是一个空矩阵。i、 e.与原始图像大小相同但完全由0组成的逻辑图像 n\u t显示找到的3个对象。L\u t的最大值为3。那么为什么ismember找不到2呢?它不起作用,

以下是steve的帖子:

我想把它应用到一个非常简单的案例中。这是我的逻辑图像,它显然有三个对象:

这是我使用的代码:

[L_t,n_t] = bwlabel(logical_image);
iii = find(L_t == 2);
bbb = ismember(L_t,iii);
imshow(bbb);
但是我得到的是一个空矩阵。i、 e.与原始图像大小相同但完全由
0
组成的逻辑图像


n\u t
显示找到的3个对象。
L\u t
的最大值为
3
。那么为什么
ismember
找不到2呢?

它不起作用,因为
iii
是一个索引列表(在
L\u t
中的位置
L\u t==2
),而
L\u t
是一个从1到3的数字。这与原始示例中的操作不同:

idx = find((100 <= area_values) & (area_values <= 1000))
在您的例子中,
iii
是像素索引的列表,而不是它们的值。因此,这些值都不是1、2或3(即使在查找等于2的值时也是如此),因为它们是图像前三个像素的索引。因此,
L\u t
中的任何值都与
iii
中的任何值不匹配

如果您想要的只是一张仅显示第二个对象的图像,那么这就足够了:

bbb = L_t==2;
imshow(bbb)
bbb = L_t==2;
imshow(bbb)