标记区域中的灰度像素值
功能Bwlabel和地区企业对于测量二进制图像中形状的特性非常有用。有文档示例和产品演示显示了如何执行此操作,并且我在此博客中多次显示了这些功能。
但是有时我会发现有关如何在“原始”灰度图像中处理像素值的问题。换句话说,假设您的过程就是这样:
- 段灰度图像以获取对象的二进制图像
- 使用使用二进制图像对象标记Bwlabel
- 用原始的灰度像素值对应于每个标记的对象
这篇文章是关于如何完成最后一步的。让我们从创建一些简单的示例图像开始。
i = imread('COINS.PNG');imshow(i)
bw = im2bw(i,graythresh(i));bw = imfill(bw,“孔”);imshow(bw)标题(“阈值,孔填满了洞”)
l = bwlabel(bw);imshow(label2rgb(l,@jet,[.7 .7 .7 .7])))title(“标签矩阵”)
使用的关键l处理像素我是使用地区企业得到“ Pixelidxlist”对于每个标记的区域。
s = regionprops(l,“ Pixelidxlist”)
s = 10x1结构阵列,带有字段:Pixelidxlist
s是一个结构数组。s(k).pixelidxlist是K-th区域的线性指数的矢量。您可以使用这些值直接索引我。例如,这是第三硬币的平均像素值:
idx = s(3).pixelidxlist;平均(I(IDX))
ANS = 172.8769
您还可以替换对象像素值我通过在作业声明的左侧索引,这样的索引:
%将第四硬币白色和第五硬币黑色变成黑色:j = i;j(s(4).pixelidxlist)= 255;j(s(5).pixelidxlist)= 0;imshow(j)
这是一个循环,将每个硬币的像素值替换为该硬币的平均像素值:
f = i;为了k = 1:numel(s)idx = s(k).pixelidxlist;f(idx)=平均值(i(idx));结尾imshow(f)
我将结束一个问题垫子在博客评论中问:“如何在每个标记区域中找到最大像素值的位置?”这是找到位置的方法,然后将它们绘制在原始图像的顶部。(此外“ Pixelidxlist”,我也会问地区企业为了“像素者”,这给出了该区域中每个像素的X和Y坐标。
s = regionprops(l,“ Pixelidxlist”,,,,“像素者”);imshow(i)保持上为了k = 1:numel(s)idx = s(k).pixelidxlist;pixels_in_region_k = i(idx);[max_value,max_idx] = max(pixels_in_region_k);max_location = s(k).pixellist(max_idx,:);绘图(max_location(1),max_location(2),'*')结尾抓住离开
注释
要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。