适用于基于最小化度量的区域生长图像分割的算法
Algorithm suitable for a region-growing image segmentation based on the minimization of a metric
是否有基于像素的 region growing
算法可用于提取图像上的特征 (segmentation
),方法是将像素添加到 seed
基于某个 metric
的最小化。潜在地,如果添加该像素时 metric
未优化,则可能会删除该像素(即可能回溯并返回到先前迭代中获得的 seed
)。
我会尝试进一步解释我的 objectives:
- 此算法从
central pixel
开始,在图像上选择为 initial seed
。
- 之后,分别探索每个
4 neighbors
(right
、left
、bottom
和 top
邻居),看看 metric
通过在选定方向上种植种子进行优化。
- A
neighboring pixel
可能不会立即优化 metric
,即使通过添加此像素创建的 seed
在未来的迭代中将是最优的。
- 如果获得的
seed
不是最优的,则有可能将 neighboring pixel
添加到种子但稍后将其删除。
任何人都可以向我推荐足以解决此类问题的 Artificial Intelligence
技术(或 greedy approach
)吗?此外,判断添加像素将优化指标的良好标准是什么,即使这可能会在未来的迭代中发生。
P.S: 我开始实施上面在 Python
中解释的内容,但陷入了确定 path
(neighboring pixel
) 是否值得探索。现在,我尝试仅在 seed
相对于指标改进(即最小化)error
时才添加 neighboring pixel
。但是,即使通过添加 right
或 left
邻居,metric
没有得到优化,这两个 paths
之一可能会导致未来的最佳解决方案(如解释在第三objective).
您基本上已经概述了使用这种方法可以获得的最成功的算法。它的成功在很大程度上取决于您对 add/remove 像素使用的指标,但是您可以做一些事情来模拟您想要的行为。
定义
我们将优化的指标称为 M
,其中 M(R)
是区域 R
的指标值,区域 R
是一些集合像素。我将假设优化指标将导致 M
的最大可能值,但如果目标也是最小化 M
,则此方法可以奏效。
方法论
这种方法将稍微倒退到您的原始轮廓,但它应该满足添加位于种子的非最佳路径中的像素和删除对优化没有显着贡献的像素的要求。
我们将从种子 s
开始,但我们将迭代地在图像中添加 所有 像素(或最大特征尺寸),而不是评估路径到我们地区。在每个步骤中,我们将根据它对当前区域的度量的改进程度来确定像素的值,M(p)
。这与包含像素的区域的值 不 相同(M(R)
,其中 p
在 R
中)。相反,它将是包含像素的区域的值与添加像素之前区域的值的差值 (M(p) = M(R) - M(R') where R = R' + p
)。如果您有能力评估单个像素,则可以简单地使用它。
下一个更改是在 M(R)
中包含一个正则化参数,该参数根据包含的像素数对分数进行惩罚:N(R) = M(R) - a * |R|
其中 a
是一些任意的正常数,并且 |R|
代表我们地区的基数(像素数)。 注意:如果目标是最小化 M
那么 a
应该是负数。如果它包含太多像素,这将具有惩罚该区域分数的效果。
最后,在将所有像素添加到该区域并为每个像素评估 N(p)
之后,我们再次遍历该区域。这次我们从添加的最后一个像素开始并向后遍历我们的像素集,以种子 s
结束。在每次迭代中确定区域的分数 N(R)
。如果自上次迭代以来得分 N(R)
减少了 ,那么我们将移除得分最低的像素 p
N(p)
。这应该具有区域中对分数贡献最大的像素数量最少的效果。
其他注意事项
如果剩余像素在 p运行ing 后位于非连续路径上,您可以 运行 辅助算法添加相邻像素。您需要进行测试以确定 a
的最佳值,以便保留足够的像素来重建建筑物,但它不包括图像中的每个像素。
我的意见(你没有询问)
总的来说,我认为使用更强大的算法(例如用于特征分类的 Convolutional Neural Networks)您会更幸运。它们可能比上述算法更快、更准确。
是否有基于像素的 region growing
算法可用于提取图像上的特征 (segmentation
),方法是将像素添加到 seed
基于某个 metric
的最小化。潜在地,如果添加该像素时 metric
未优化,则可能会删除该像素(即可能回溯并返回到先前迭代中获得的 seed
)。
我会尝试进一步解释我的 objectives:
- 此算法从
central pixel
开始,在图像上选择为initial seed
。 - 之后,分别探索每个
4 neighbors
(right
、left
、bottom
和top
邻居),看看metric
通过在选定方向上种植种子进行优化。 - A
neighboring pixel
可能不会立即优化metric
,即使通过添加此像素创建的seed
在未来的迭代中将是最优的。 - 如果获得的
seed
不是最优的,则有可能将neighboring pixel
添加到种子但稍后将其删除。
任何人都可以向我推荐足以解决此类问题的 Artificial Intelligence
技术(或 greedy approach
)吗?此外,判断添加像素将优化指标的良好标准是什么,即使这可能会在未来的迭代中发生。
P.S: 我开始实施上面在 Python
中解释的内容,但陷入了确定 path
(neighboring pixel
) 是否值得探索。现在,我尝试仅在 seed
相对于指标改进(即最小化)error
时才添加 neighboring pixel
。但是,即使通过添加 right
或 left
邻居,metric
没有得到优化,这两个 paths
之一可能会导致未来的最佳解决方案(如解释在第三objective).
您基本上已经概述了使用这种方法可以获得的最成功的算法。它的成功在很大程度上取决于您对 add/remove 像素使用的指标,但是您可以做一些事情来模拟您想要的行为。
定义
我们将优化的指标称为 M
,其中 M(R)
是区域 R
的指标值,区域 R
是一些集合像素。我将假设优化指标将导致 M
的最大可能值,但如果目标也是最小化 M
,则此方法可以奏效。
方法论
这种方法将稍微倒退到您的原始轮廓,但它应该满足添加位于种子的非最佳路径中的像素和删除对优化没有显着贡献的像素的要求。
我们将从种子 s
开始,但我们将迭代地在图像中添加 所有 像素(或最大特征尺寸),而不是评估路径到我们地区。在每个步骤中,我们将根据它对当前区域的度量的改进程度来确定像素的值,M(p)
。这与包含像素的区域的值 不 相同(M(R)
,其中 p
在 R
中)。相反,它将是包含像素的区域的值与添加像素之前区域的值的差值 (M(p) = M(R) - M(R') where R = R' + p
)。如果您有能力评估单个像素,则可以简单地使用它。
下一个更改是在 M(R)
中包含一个正则化参数,该参数根据包含的像素数对分数进行惩罚:N(R) = M(R) - a * |R|
其中 a
是一些任意的正常数,并且 |R|
代表我们地区的基数(像素数)。 注意:如果目标是最小化 M
那么 a
应该是负数。如果它包含太多像素,这将具有惩罚该区域分数的效果。
最后,在将所有像素添加到该区域并为每个像素评估 N(p)
之后,我们再次遍历该区域。这次我们从添加的最后一个像素开始并向后遍历我们的像素集,以种子 s
结束。在每次迭代中确定区域的分数 N(R)
。如果自上次迭代以来得分 N(R)
减少了 ,那么我们将移除得分最低的像素 p
N(p)
。这应该具有区域中对分数贡献最大的像素数量最少的效果。
其他注意事项
如果剩余像素在 p运行ing 后位于非连续路径上,您可以 运行 辅助算法添加相邻像素。您需要进行测试以确定 a
的最佳值,以便保留足够的像素来重建建筑物,但它不包括图像中的每个像素。
我的意见(你没有询问)
总的来说,我认为使用更强大的算法(例如用于特征分类的 Convolutional Neural Networks)您会更幸运。它们可能比上述算法更快、更准确。