为了更好地理解regionprops的'PixelValues'

时间:2014-02-15 22:28:03

标签: matlab image-processing image-segmentation

我正在阅读regionprops的文档,并发现如果标记的图片是灰度图像,regionprops也会找到PixelValues,其定义为:

  

'PixelValues' - p-by-1向量,其中p是中的像素数   区域。向量中的每个元素都包含一个像素的值   该地区。

像素值是像素的灰度值吗?喜欢0到255之间?也可以安全地假设这里提到的区域是使用bwlabel获得的标记连通分量。

所以我想看到每个像素的像素值(我知道它将是一个网格并且不清楚但是在缩放的帮助下我将能够读取值)但是我使用的代码产生了一个奇怪的结果。如结果所示,在每个区域周围没有显示清晰的框,显示像素值(就像它使用stats.Area一样)。这就是我得到的:

enter image description here

为什么文本框这么长?为什么它包含小数?当我输入stats(1).PixelValues时,我得到了一个[2159x1]向量

ans =

  125
  128
  130
  126
  137
  101
  131
   28

这是我的代码

img = rgb2gray(imread('W1\Writer1_01_02.jpg'));
bw_normal = im2bw(img, graythresh(img));
bw = imcomplement(bw_normal);
[label,n] = bwlabel(bw);
stats = regionprops(label, img, {'Area', 'Centroid', 'BoundingBox', 'PixelValues'});

imshow(img);

%To display text box on CC

for j = 1:numel(stats)
         text(stats(j).Centroid(1),stats(j).Centroid(2), ...
        sprintf('%2.1f', stats(j).PixelValues), ...
        'EdgeColor','b','Color','r');
     end

1 个答案:

答案 0 :(得分:1)

你在这里问几个问题。我会尽力回答。

  1. 当您要求'PixelValues'时,您会得到一个矢量,其中输入img中的像素的灰度值对应于label中的标记区域。也就是说,stats(ii).PixelValues向量,其元素数量等于ii - 区域中的像素数量。此向量的值是从img中的相应像素获取的灰度值。

  2. 'PixelValues'中的值范围取决于输入img。如果img的值介于0..255之间,则值为。如果您将img转换为加倍(例如,使用im2double),则值将会变为0 .. 1

  3. 您的文本框很长,因为它们会显示每个区域的所有像素值(多个像素的值)。它们包含十进制,因为这是使用'%2.1f'打印它们的方式。使用'%d'打印整数值。您可能还想在那里添加空格。

  4. 如果您只想检查像素值,则您希望尝试使用impixelinfo之类的工具。