我有一个使用bwlabel标记的blob图像,我想找到一个具有像素位置[x,y]的blob,并通过删除其余的blob来显示它。 这是我写的代码,但它没有给出正确答案,请解决此问题
[y, x] = ginput(1);
x = round(x);
y = round(y); % here x and y is a location of blob i want to keep
BW = bwlabel(newImgg,4) ; % labelled image contains several blobs
% figure, imshow(BW, [])
props = regionprops(logical(BW),'all');
while(1)
for k = 2:length(props)
if ismember([x,y],props(k,1).PixelList) == [1, 1];
keeperIndex = k;
break
end
end
break
end
keeperBlobsImage = ismember(BW, keeperIndex);
keeperBlobsImage = imfill(keeperBlobsImage,'holes');
figure, imshow(keeperBlobsImage,[])
谢谢,
戈皮
答案 0 :(得分:0)
我目前没有MATLAB许可证,因此我无法在我的机器上进行测试,我也暂时不使用MATLAB语法。这是一个想法:
From MATLAB's documentation,PixelList
是一个数组,其中每行的格式为[x,y,...]
,具体取决于您的维度。
使用您的图片我假设PixelList
的格式为[x,y]
循环PixelList
,跟踪您要丢弃的索引。如果您测量n
像素:
discardList = []
for i = 1:n
if (PixelList(i) != [target_x,target_y]
discardList=[discardList,i]
end
end
newPixelList = PixelList
newPixelList(discardList) = []
同样,我现在还没有使用MATLAB相当长的时间,所以我为语法中的任何问题(括号,循环和条件)道歉
修改/更新:强>
根据MATLAB的文档,它显示bwlabel
仅用于BW图像。所以请确保你这样做,我想。
此外,在regionprops
的输出中,您应该WeightedCentroid
。
从ginput
,找到质心最接近的区域。
我的建议是使用vision.BlobAnalysis System Object
[y,x] = ginput(1)
bA = vision.BlobAnalysis;
centroids = step(bA,BWImage);
使用文档确保关闭所有"输出端口"系统对象,并保持质心输出端口。
d = 1e10;
d2 = 0;
dArr = [x,y;0,0]
cIndex=0;
for i = 1:length(centroids)
dArr(2,:) = centroids(i,:);
d2 = pdist(dArr);
if (d2<d)
d = d2;
cIndex = i;
end
end
变量cIndex
将包含您需要的blob的索引。您可以运行blob分析并将其与其余分析