【问题标题】:How to display the connected component through a specific pixel coordinate如何通过特定的像素坐标显示连通分量
【发布时间】:2015-10-30 09:19:34
【问题描述】:

我有一个灰度图像add1,但是其中只有两个像素强度(黑色为 0,白色为 255)。我能够跟踪我考虑的像素的坐标,即add1(i,j)。现在我想显示这个像素所属的连接组件。我已经尝试使用regionprop 使用'PixelIdxList''PixelList' 不成功。
有人可以帮忙吗。在此先感谢。

【问题讨论】:

  • 请用示例图片解释您的问题,如果您不能附上图片,请提供图片的保管箱或谷歌驱动器链接,除非您很难给出任何建议。
  • drive.google.com/file/d/0B7c01qKgITdpU3YyNk53a3JMZjg/… 图像标有部分红线(仅用于表示目的)。我想计算红线和最近连接组件之间的距离。这个
  • drive.google.com/file/d/0B7c01qKgITdpU3YyNk53a3JMZjg/… : 用红线标记的图像(用于表示) 我想计算红线(层)和最近连接组件之间的距离。显示这个组件。我能够得到红色的像素坐标标记的像素。我从这一层逐列反向传播并且能够获得一个像素坐标现在我想显示这个像素是其中一部分的连接组件。结论:我的主要目标是显示那些靠近红线层小于 10 像素的连接组件。

标签: matlab image-processing grayscale connected-components


【解决方案1】:

据我所知,你想要这个:

            clc
            clear all
            close all

            im = imread('labelProb.png');
            im = im2bw(im);

            labelIm = bwlabel(im);
            rg = regionprops(im,'PixelIdxList','Centroid');

            figure,imshow(labelIm,[]),hold on
            for i = 1:length(rg)
                cc = rg(i).Centroid;
                text(cc(1),cc(2),['label: ',num2str(i)],'Color','b','FontSize',9)
            end
            f = getframe();
            lab = frame2im(f);
            hold off

            % suppose you want label number 3 only.

            cc = rg(3).Centroid; % this is your pixel index;
            % Extract label number through this index.
            cc = round(cc);
            labelNumber = labelIm(cc(2),cc(1));

            % create a new blank image.
            blankImage = false(size(im));

            for i = 1:length(rg)
                if i == labelNumber
                    blankImage(rg(i).PixelIdxList) = true;
                end
            end
            figure,imshow(blankImage,[])

上面的执行结果是:

【讨论】:

  • drive.google.com/file/d/0B7c01qKgITdpU3YyNk53a3JMZjg/… : 用红线标记的图像(用于表示)我想计算红线(层)和最近连接组件之间的距离。显示这个组件。我能够得到红色的像素坐标标记的像素。我从这一层逐列反向传播并且能够获得一个像素坐标现在我想显示这个像素是其中一部分的连接组件。结论:我的主要目标是显示那些靠近红线层小于 10 像素的连接组件。
  • 看来我可能无法正确提出我的问题
  • 因为您可以找到离您感兴趣的像素最近(即 10 像素远)的像素,您可以按照上面代码中描述的过程进行操作。从附加图像制作标签图像,现在按照与您相同的程序,当您获得第一个像素索引时,在标签图像中的同一索引上找出标签编号,然后按照代码(如我所写)只保留那些标签;您正在获取的索引。
  • 我无法获取索引。例如说 add=bwlabel(add1); image add1(i,j) 是感兴趣的像素,然后我做了 rg=regionprop(add,'PixelIdxList');。现在我应该如何访问索引并显示相应的完整连接组件。
  • hi ema 请参考我在答案中发布的代码....请给它一些时间来理解。
【解决方案2】:

如果我理解您的问题,您想要的是:给定特定坐标 (i,j) 的标签是什么,以及 (i,j) 所属的连接组件的掩码。

add = bwlabel( add1 ); %// convert to label mask
lij = add(i,j); %// get the label to which i,j belongs to
figure;
imshow( add == lij, [] ); %// select only the relevant label

【讨论】:

  • 出现错误:错误使用图形无法从非图形句柄创建图形。显示错误(第 449 行)图(imshow(添加 == lij,[])); %// 只选择相关标签错误可能在我的循环代码中,我正在寻找它。很快就会返回这里谢谢。它有点工作。感谢您的贡献。谢谢。
  • 再次,它起作用了,但我的循环中仍然存在一些错误。没有得到想要的结果,正在考虑使用其他方法。但是它起作用了。谢谢分配..
  • 我目前无法投票。我会在得到结果后回来。再次感谢您。
  • 你好。我们如何将这个特定的标签保存在一个变量中,以便它可以进一步用作图像并可以执行图像操作。我试过了,虽然无法访问图像像素。然后我想用“imwrite”写图像,然后使用它,但它是最后一个选项。会有一些更好的方法来做到这一点。谢谢。
  • @DrEma 您可以将lij 掩码保存到变量mask_ij= (add==lij); 中,然后您可以将save( filename, 'mask_ij'); 写入mat 文件并随意加载。如果您将蒙版保存到图像,请不要使用 jpeg 格式 - 这是一种有损格式。使用带有索引图像的 png 格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
相关资源
最近更新 更多