在图像中自动提取山脊

信息处理 图像处理 噪音 Python 边缘检测
2022-02-09 12:51:19

我正在尝试从图像中提取脊,使用 Hessian 矩阵的特征值计算(请参阅分割叶子中静脉的最佳方法中的答案?)。在这张图片中,我已将负特征值归零。

在此处输入图像描述

视觉上我可以看到我想要的区域,但是我如何能够明智地自动提取它们?如果我LogNorm()的颜色条不是那么清楚

在此处输入图像描述

最初我认为如果可以估计图像中的噪声,我可以相应地屏蔽图像,但我能找到的噪声的唯一估计是它的标准偏差(假设高斯噪声)skimage.restoration.estimate_sigma而不是它的平均值。

通过阈值屏蔽也是可能的,但是特征值的大小是否具有物理意义?

我是图像处理的新手,因此将不胜感激。我还附上了我的图片的数据(https://drive.google.com/file/d/1Wdvqtv4rUmLtSNiq-p0M5BwSKxUoW76T/view?usp=sharing)。

谢谢!

1个回答

这应该可以通过 ssqueezepy 的extract_ridges实现;尝试改变penaltybw(参见他们的文档字符串)。作为最后的手段,提供一个不包括没有脊的区域的裁剪图像可能会更好,因为该算法假设脊跨越整个帧。您可以通过查找列能量低于设定阈值的索引来自动执行此操作,例如np.where(np.sum(np.abs(stft_transform)**2, axis=0) < 0.1)

“裁剪”示例:

在此处输入图像描述