我正在阅读regionprops
的文档,并发现如果标记的图片是灰度图像,regionprops
也会找到PixelValues
,其定义为:
'PixelValues' - p-by-1向量,其中p是中的像素数 区域。向量中的每个元素都包含一个像素的值 该地区。
像素值是像素的灰度值吗?喜欢0到255之间?也可以安全地假设这里提到的区域是使用bwlabel
获得的标记连通分量。
所以我想看到每个像素的像素值(我知道它将是一个网格并且不清楚但是在缩放的帮助下我将能够读取值)但是我使用的代码产生了一个奇怪的结果。如结果所示,在每个区域周围没有显示清晰的框,显示像素值(就像它使用stats.Area
一样)。这就是我得到的:
为什么文本框这么长?为什么它包含小数?当我输入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
答案 0 :(得分:1)
你在这里问几个问题。我会尽力回答。
当您要求'PixelValues'
时,您会得到一个矢量,其中输入img
中的像素的灰度值对应于label
中的标记区域。也就是说,stats(ii).PixelValues
是向量,其元素数量等于ii
- 区域中的像素数量。此向量的值是从img
中的相应像素获取的灰度值。
'PixelValues'
中的值范围取决于输入img
。如果img
的值介于0..255之间,则值为。如果您将img
转换为加倍(例如,使用im2double
),则值将会变为0 .. 1
您的文本框很长,因为它们会显示每个区域的所有像素值(多个像素的值)。它们包含十进制,因为这是使用'%2.1f'
打印它们的方式。使用'%d'
打印整数值。您可能还想在那里添加空格。
如果您只想检查像素值,则您希望尝试使用impixelinfo
之类的工具。