1

我有这张图片: 在此处输入图像描述

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

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

非常感谢!

4

2 回答 2

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);来获得您想要的像素。

于 2012-04-07T14:49:54.300 回答
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,[]);
    

L 会给你相同数量的形状,所有像素都属于相同的形状。L 包含 BW 中连接组件的标签。BW 可以有任何维度;L 与 BW 大小相同。L 的元素是大于或等于 0 的整数值。标记为 0 的像素是背景。标记为 1 的像素构成一个对象,标记为 2 的像素构成第二个对象,依此类推。

  1. 假设您有两个形状或区域然后找到原始颜色或灰度值 od 如下。

    %% 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.
    

祝您编码愉快...

于 2012-04-09T12:01:13.310 回答