【问题标题】:Find out which blob has the pixel location [x,y]?找出哪个 blob 具有像素位置 [x,y]?
【发布时间】:2017-02-16 00:06:50
【问题描述】:

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

谢谢,

戈皮

【问题讨论】:

  • 不是答案,只是评论,因为我不知道 Matlab。也许您可以在图像副本中为每个检测到的 blob 着色,然后查看该像素的颜色以确定它属于哪个 blob。
  • 我正在使用基本上是灰度的医学 dicom 图像,我不想更改像素值,我认为这不是我想要做的,谢谢你的建议

标签: image matlab image-processing


【解决方案1】:

我目前没有 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,因此对于语法(括号、循环和条件)中的任何问题,我深表歉意

编辑/更新:

根据 MA​​TLAB 的文档,它显示 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 分析并将其与其他部分隔离

【讨论】:

  • 我不是在寻找 pixelList,我想确定哪个 blob 具有最初描述的 [x,y] 坐标,并且我想检索那个单个 blob。检查我上面的代码,我使用了 PixelList,但我认为我在某处犯了错误
  • @Gopi 我发布的解决方案检查了每个像素的位置。如果您查看循环中的 if 条件。最后,它会删除所有没有您要查找的位置的像素
  • 是的,理解您的代码,因此您的代码的输出是与 [target x, target y] 匹配的单个像素值。我已经有了,不管怎样,我能找到这个匹配属于哪个 blob,如果你可以编写一个完整的代码来检查所有 blob 并给出包含 [targetx,target y] 的单个 blob 的输出索引,那就太好了。谢谢,戈皮
  • 让我看一下 MATLAB 文档。我没有办法运行 MATLAB,所以无论我写什么都不会被验证
猜你喜欢
  • 1970-01-01
  • 2018-04-08
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2019-04-10
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多