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

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

我还想确定边界,这样我就可以测量这些区域的面积,并找到它们各自的“加权质心”。
我想要实现的是允许我测量不同帧中拉长黑色区域的方向之间的角度,如下图所示(红线表示前一帧中顶部黑色区域的位置)。

发布于 2019-09-20 12:33:21
在这个答案中,我将使用DIPimage 3,一个用于MATLAB的图像分析工具箱(透露:我是一名作者)。但是,应用的过滤器非常简单,使用其他工具箱来实现应该没有问题。
原始图像的噪声非常大。简单地对该图像进行阈值处理会导致噪声较大的二值图像,这是很难处理的。我建议在阈值和测量之前,先对原始图像进行过滤,以突出显示感兴趣的结构。
因为我们对检测直线感兴趣,所以我们将使用高斯的拉普拉斯滤波器。调整sigma参数以匹配要检测的线的宽度非常重要。应用Laplace滤镜后,深色线条将显示为明亮,而明亮线条将显示为暗色。图像中间的亮点也会增强,但看起来很暗。
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);

此图像直接指向阈值。
out = out > 0.25;

最后,我们将测量这两条线的方向,作为投影最大的角度。
msr = measure(out,[],'feret');
angle = msr.Feret(:,4)输出(角度以弧度表示,0表示向右,pi/2表示向下):
angle =
-1.7575
-1.7714https://stackoverflow.com/questions/57973200
复制相似问题