适用于基于度量最小化的区域生长图像分割的算法

是否存在一种基于像素的区域生长算法,可以通过根据某个度量的最小化将像素添加到种子来提取图像上的特征(分割)。如果添加某个像素后度量未得到优化,则可能需要移除该像素(即有可能回溯并返回到前几次迭代中获得的种子)。

我将进一步解释我的目标:

  1. 该算法从图像上选定的中心像素作为初始种子开始。
  2. 之后,分别探索每个4个邻居邻居),以查看在所选方向上生长种子是否能优化度量
  3. 一个邻居像素可能不会立即优化度量,即使添加该像素所创建的种子在未来的迭代中会是最优的。
  4. 有可能邻居像素被添加到种子中但后来被移除,如果所获得的种子不是最优的。

谁能向我建议一种人工智能技术(或贪婪方法),适合解决这类问题?此外,判断添加一个像素是否会优化度量的好标准是什么,即使这可能在未来的迭代中发生?

附注:我已经开始在Python中实现上述内容,但在确定是否值得探索路径邻居像素)的问题上遇到了困难。目前,我只在种子产生的误差相对于度量有所改善(即最小化)时,才尝试添加邻居像素。然而,即使添加邻居时度量未得到优化,这两个路径中的一个在未来可能导致最优解(如第三个目标中所解释的)。


回答:

你基本上已经概述了使用这种方法可以得到的最成功的算法。它的成功将在很大程度上取决于你用来添加/移除像素的度量,但有一些方法可以模拟你想要的行为。

定义

我们将要优化的度量称为M,其中M(R)是区域R的度量值,区域R是一些像素的集合。我假设优化度量将导致M的最大可能值,但如果目标是最小化M,这种方法也可以工作。

方法论

这种方法与你最初的概述略有不同,但它应该能满足添加位于从种子出发的非最优路径上的像素和移除对优化没有显著贡献的像素的要求。

我们将从一个种子s开始,但不是在前进时评估路径,而是将图像中的所有像素(或最大特征尺寸)迭代地添加到我们的区域中。在每一步,我们将根据像素对当前区域的度量改善程度确定像素的值,M(p)。这与包含该像素的区域的值(M(R),其中pR中)不同。而是包含该像素的区域的值与添加该像素之前的区域的值的差异(M(p) = M(R) - M(R') 其中 R = R' + p)。如果你有能力评估单个像素,你可以简单地使用它来代替。

下一个变化是M(R)中包含一个正则化参数,该参数根据包含的像素数量对分数进行惩罚:N(R) = M(R) - a * |R|,其中a是某个任意正常数,|R|代表我们区域中的像素数量(基数)。注意:如果目标是最小化M,则a应为负数。这将对区域的分数产生影响,如果它包含太多像素,则会降低分数。

最后,在所有像素都被添加到区域中并且N(p)已为每个像素评估后,我们再次迭代区域。这次我们从最后添加的像素开始,逆向迭代我们的像素集,结束于种子s。在每次迭代中确定区域的分数N(R)。如果自上次迭代以来分数N(R)降低,则我们移除分数N(p)最低的像素p。这应该会使区域中最少数量的像素对分数贡献最大。

其他考虑

如果修剪后剩余的像素位于非连续路径上,你可以运行一个辅助算法来添加相邻的像素。你需要进行测试以确定a的最佳值,使得保留足够的像素来重建建筑物,但不包括图像中的每个像素。

我的意见(你没问的)

总的来说,我认为你使用更robust的算法如卷积神经网络进行特征分类会更幸运。它们可能会更快,并且肯定比上述算法更准确。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注