检测图像中的蜿蜒河流

信息处理 图像处理 计算机视觉
2022-01-05 04:25:45

我有表面:在每个表面上都有一个测量属性(变量):大多数表面的属性在表面上会随机分布,但一些表面(有趣的表面)会显示出蜿蜒的河流模式:nzi(x,y)ai(x,y)

在此处输入图像描述

我需要你的帮助来提出一个测量方法,它可以告诉我们表面中的哪个表面最有可能具有这种模式。n

有许多可能的地图具有相同的直方图,如下所示;因此该措施需要“奖励”空间连续性。为了说明这一点,我创建了一个随机图像,其直方图与河流图像几乎相同: 在此处输入图像描述

所以图像统计 ala 熵可能只是解决方案的一部分。

这是一个没有蜿蜒河流图案的图像示例: 在此处输入图像描述

我的图像是合成的(在 Matlab 中制作)。在现实生活中,没有图案的图像可能以类似值的小斑点的形式具有更多的空间连续性。

以下是灰度图像:

在此处输入图像描述 在此处输入图像描述

2个回答

一个非常简单的方法是将图像中的每一行与其上方的行进行比较,允许一些水平移动。

我在 Mathematica 中拼凑了这个简单的算法:

Mean[MapThread[
  Function[{line1, line2},
   Min[Table[Norm[line1 - RotateLeft[line2, shift]], {shift, -5, 5}]]
   ], {s[[2 ;;]], s[[;; -2]]}]]

它只取每一对相邻的行,将其中一行旋转 -5..5 个像素,并取最小的欧几里得距离。这为每一行对产生一个欧几里得距离。我只是取平均值(但根据您的实际数据,截断的平均值或中位数可能更稳健)。

这些是我从人工生成的样本中得到的结果(公式:Normalize(random noise * (1-factor) + signal * factor))

在此处输入图像描述

如果我根据信号强度绘制结果,该算法似乎可以很好地测量“蜿蜒的河流信号强度”:

在此处输入图像描述

编辑:我忘了标准化输入样本。修复了上传的新结果图像

您似乎在该直方图的正确轨道上。如果这是您的样本中的代表性图像,则该直方图显示存在曲折图案的图像可以通过检查它们是否包含高于某个阈值的值来检测。

除此之外,您可以尝试获取每个图像的这将为每个图像提供一个数字,以表征其随机性。之后,您可以获得图像熵的直方图。如果您确定图像被明确分为“完全随机”和“随机曲折”(即随机性较小),那么熵的直方图将是双峰的。左侧模式将对应于具有较低熵的图像,因此随机性较小(更可能包含蜿蜒的图案),反之亦然。

(顺便说一句,MATLAB 包含一个相关功能

编辑:作为对 OP 评论和随后上传有关该问题的更多信息的回应,这里是该答案的附加点:

熵仍然有效,但不是香农公式描述的简单的无记忆情况(假设时间序列的每个样本都独立于之前的样本)。

作为一种更简单的替代方法,您可以尝试检查图像的自相关特征。