史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

定制REGIONPROPS用你自己的测量

上个月我看到一个演讲,提到了一个用户请求定制的能力regionprops。也就是说,用户希望能够添加自己的测量regionprops

今天,我将向您展示如何做你自己。

首先,这是一个简单的回顾regionprops所做的事。函数计算测量的图像区域。这些测量是纯粹基于区域的形状,而其他人将区域内的像素值。这里有一个例子使用硬币。png样本图像。

我= imread (“coins.png”);imshow(我)

这幅图像转换为二进制,使用自适应阈值,填补漏洞,消除小的“噪音”像素。

bw = imbinarize(我“自适应”);bw = imfill (bw,“黑洞”);bw = bwareafilt (bw,[100正]);imshow (bw)

你可以计算“blob”(对象)自己;有10人。

最简单的regionprops电话,regionprops (bw)计算区域,重心,BoundingBox为每个对象。

s = regionprops (bw)
s = 10×1结构体数组字段:区域。边界框(质心大小

但我不认为这是最好的办法regionprops了。你现在可以告诉regionprops返回结果的表。

t = regionprops (“表”bw)
____边界框(t = 10×3表区域质心大小)___________ _______ 2635 37.133 106.85 [1 x4双]1846 56.131 - 49.693 [1 x4双]2672年96.199 - 146.05 [1 x4双]1839年109.97 - 84.848 [1 x4双]2744年120.37 - 208.73 [1 x4双]2520年148.57 - 34.404 [1 x4双]2589年174.83 - 120.01 [1 x4双]2518年216.81 - 70.649 [1 x4双]1857年236.03 - 173.36 [1 x4双]1829年265.96 - 102.64 [1 x4双]

表的形式更方便许多任务。对于今天的话题,其中特别好处的事表是多么容易添加自己的变量。

为了说明这一点,让我们添加一个测量,我见过圆度。圆的一个定义是:

$ R = \压裂{4}{\πL ^ 2} $

一美元是对象区域和L是美元的最佳椭圆的长轴长度对象。这是如何计算圆度测量,并将其直接添加到返回的regionprops

首先,注意两种区域MajorAxisLength支持金宝appregionprops让我们从这开始。

t = regionprops (“表”bw,“区域”,“MajorAxisLength”)
t = 10×2表面积__售予MajorAxisLength 2635 60.08 1846 50.178 2672 59.792 1839 49.674 2744 60.374 2520 58.08 2589 58.676 2518 58.162 1857 49.77 1829 49.564

你访问表变量使用点符号,比如t.Area。类似地,您可以创建一个新表变量使用点符号和任务,t。MyVariable =…。所以增加圆度返回的表regionprops这是简单的。

t。圆度= 4 * t。区域。/ (pi * t.MajorAxisLength.^2)
t = 10×3表面积MajorAxisLength圆度___售予___________ 2635 60.08 2672 0.92945 1846 50.178 - 0.93352 59.792 - 0.9516 1839 49.674 2520 0.94893 2744 60.374 - 0.9585 58.08 - 0.95118 2589 58.676 1857 0.95745 2518 58.162 - 0.94772 49.77 - 0.95453 49.564 - 0.94798 1829人

让我们试试这个计算一幅图像包含的对象不是那么圆。

I2 = imread (“rice.png”);imshow (I2)
bw2 = imbinarize (I2,“自适应”);bw2 = imfill (bw2,“黑洞”);bw2 = bwareafilt (bw2[100正]);imshow (bw2)
t2 = regionprops (“表”bw2,“区域”,“MajorAxisLength”);t2。圆度= 4 * t2。区域。/ (pi * t2.MajorAxisLength.^2); head(t2)
ans = 8×3表面积MajorAxisLength圆度___售予___________ 138 23.594 157 0.31562 120 18.152 0.4637 169 28.123 0.27207 23.793 0.3531 284 43.757 141 0.18885 200 26.259 0.36929 21.647 0.26636 0.38311 177 29.087

我非常喜欢的(相对)柱状图在MATLAB函数,所以让我们用它来比较圆的数字。我将遵循中给出的建议柱状图参考页面正常化多个直方图,这样他们可以更容易地比较。我将设置轴[0 1]的极限,这是适合概率归一化,我会设置轴限制[0,1],即范围圆度

h1 =直方图(t.Roundness);持有h2 =直方图(t2.Roundness);持有h1。归一化=“概率”;h2。归一化=“概率”;h1。BinWidth = 0.02;h2。BinWidth = 0.02;xlim ([0 1]);ylim ([0 1]);标题(圆度的直方图(概率归一化))传说(“硬币”,“大米”)

你拥有它。您可以添加您自己的对象测量的输出regionprops。如果你告诉尤其容易regionprops返回一个表。

我把这个问题留给你,亲爱的读者:有测量你希望我们增加regionprops吗?我知道的一个增强请求Feret直径。你想看什么?




发表与MATLAB®R2017a

|
  • 打印

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。