找出哪个blob具有像素位置[x,y]?

时间:2017-02-13 18:41:20

标签: image matlab image-processing

我有一个使用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,[])

谢谢,

戈皮

1 个答案:

答案 0 :(得分:0)

我目前没有MATLAB许可证,因此我无法在我的机器上进行测试,我也暂时不使用MATLAB语法。这是一个想法:

From MATLAB's documentationPixelList是一个数组,其中每行的格式为[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分析并将其与其余分析

分离