首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中测量这些黑色区域

如何在Matlab中测量这些黑色区域
EN

Stack Overflow用户
提问于 2019-09-17 19:22:36
回答 1查看 107关注 0票数 0

上面的图像已经过处理,去除了它的背景,并用im2bw增加了对比度。现在我想识别和测量图像顶部和底部中心的两个拉长的黑色区域。这就是结果:

如果我使用imfill(I,'holes'),其中一个无法识别。

我还想确定边界,这样我就可以测量这些区域的面积,并找到它们各自的“加权质心”。

我想要实现的是允许我测量不同帧中拉长黑色区域的方向之间的角度,如下图所示(红线表示前一帧中顶部黑色区域的位置)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 12:33:21

在这个答案中,我将使用DIPimage 3,一个用于MATLAB的图像分析工具箱(透露:我是一名作者)。但是,应用的过滤器非常简单,使用其他工具箱来实现应该没有问题。

原始图像的噪声非常大。简单地对该图像进行阈值处理会导致噪声较大的二值图像,这是很难处理的。我建议在阈值和测量之前,先对原始图像进行过滤,以突出显示感兴趣的结构。

因为我们对检测直线感兴趣,所以我们将使用高斯的拉普拉斯滤波器。调整sigma参数以匹配要检测的线的宽度非常重要。应用Laplace滤镜后,深色线条将显示为明亮,而明亮线条将显示为暗色。图像中间的亮点也会增强,但看起来很暗。

代码语言:javascript
复制
img = readim('https://i.stack.imgur.com/0LzF3m.png');
img = img{1}; % all three channels of PNG file are identical, take one
out = laplace(img,10);

此图像直接指向阈值。

代码语言:javascript
复制
out = out > 0.25;

最后,我们将测量这两条线的方向,作为投影最大的角度。

代码语言:javascript
复制
msr = measure(out,[],'feret');
angle = msr.Feret(:,4)

输出(角度以弧度表示,0表示向右,pi/2表示向下):

代码语言:javascript
复制
angle =
   -1.7575
   -1.7714
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57973200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档