获取属于形状的像素

时间:2012-04-07 10:25:10

标签: matlab image-processing

我有这个图片: enter image description here

在这张图片中,我有11个形状(看起来像椭圆形)。我想找到每个形状中每个像素的RGB(包括白色边缘/边界,因为它是形状的一部分)。

如果有帮助,我会得到每个形状的中心坐标。

非常感谢!

2 个答案:

答案 0 :(得分:2)

当我回顾这个问题时,这是一个hacky解决方案:

  1. 如您在其他问题Matlab fill shapes by white中所述,将每个形状填充为白色。
  2. 由于您仍然拥有形状中心,现在再次使用图像中不存在的颜色(如粉红色)填充每个形状。
  3. 现在每个感兴趣的像素(属于形状的那些像素:边缘和内部)都是粉红色的,没有其他像素具有这种颜色。
  4. 现在您只需获取粉红色像素列表:

    foundPixels = find(img == pink); % pink holds the value for the pink color I used.

  5. 现在,您可以在原始图像(pixels = original(foundPixels);)上使用这些索引来获取所需的像素。

答案 1 :(得分:2)

以下是使您的工作轻松的命令......

  1. 正如“Superbest”所说用命令填充图像

    %% Example%%
    img = imread('coins.png');
    BW4 = im2bw(img );
    BW5 = imfill(BW4,'holes');
    imshow(BW4), figure, imshow(BW5);
    
  2. 现在使用命令bwlabeln()来查找簇或形状的数量。

    %% Example%%
     L = bwlabel(BW5);
     figure,imshow(L,[]);
    
  3. L将为您提供具有相同编号的形状的数量,以使所有像素属于相同的形状。 L包含BW中连接组件的标签。 BW可以有任何尺寸; L与BW的大小相同。 L的元素是大于或等于0的整数值。标记为0的像素是背景。标记为1的像素构成一个对象,标记为2的像素构成第二个对象,依此类推。

    1. 假设您有两个形状或区域,那么可以按如下方式找到原始颜色或灰度值。

      %% Example%%
      cods = find(L==1);
      Shape1(1:size(img,1),1:size(img,2))=0;
      Shape1(cods) = img(cods);
      %% Now shape1 is same size as img, but will have gray scale values at region1   locations only,you will get RGB valuse in shape1 image.. repeate it for as many shapes as you have in your image.
      
    2. 有一个快乐的编码...