史蒂夫(Steve)与MATLAB进行图像处理

图像处理概念,算法和MATLAB

标记区域中的灰度像素值

功能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),'*'结尾抓住离开




以MATLAB®7.4出版

|
  • 打印
  • 发送电子邮件

注释

要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。