【发布时间】:2017-08-06 12:52:27
【问题描述】:
我正在尝试编写 livewire 算法,但我有点卡住了,因为文章“用于图像合成的智能剪刀”中解释的算法有点混乱,我不完全理解如何应用某些东西示例:如何计算本地成本地图和其他东西。
那么请任何人帮忙并用简单的语言一步一步地解释它吗?
我会感谢任何帮助
谢谢。
【问题讨论】:
标签: image algorithm image-processing
我正在尝试编写 livewire 算法,但我有点卡住了,因为文章“用于图像合成的智能剪刀”中解释的算法有点混乱,我不完全理解如何应用某些东西示例:如何计算本地成本地图和其他东西。
那么请任何人帮忙并用简单的语言一步一步地解释它吗?
我会感谢任何帮助
谢谢。
【问题讨论】:
标签: image algorithm image-processing
您应该阅读Mortensen, Eric N., and William A. Barrett. "Interactive segmentation with intelligent scissors." Graphical models and image processing 60.5 (1998): 349-384.,其中包含比较短的论文“用于图像合成的智能剪刀”更多的算法细节。
这是一个高级概述:
智能剪刀算法使用 Dijkstra 图形搜索算法的变体来找到从种子像素到目标像素(交互式分割期间鼠标光标的位置)的最小成本路径。
1) 当地费用
从像素p 到像素q 的每条边都有一个局部成本,它是局部成本的线性组合(通过p 和q 之间的距离进行调整以考虑对角像素) :
f_Z(q)
f_G(q)
f_D(p,q)
f_P(q)
f_I(q)
f_O(q)
其中一些本地成本是静态的,可以离线计算。 f_Z 和 f_G 以不同的比例计算(意味着使用不同大小的内核)以更好地表示像素 q 的边缘。 f_G、f_P、f_I、f_O 是为动态训练动态计算的(或者像 f_G 那样具有动态组件)。
2) 即时培训
为防止捕捉到成本低于当前跟踪的另一条边缘,该算法使用动态训练为沿当前边缘“看起来”过去的像素的相邻像素分配较低的成本。
这是通过沿最后 64 或 128 个边缘像素构建图像值特征的直方图来完成的。通过缩放和舍入f'_G(其中f_G = 1 - f'_G)、f_P、f_I 和f_O 来计算图像值特征,以便在[0 255] 或[0 1023] 中具有整数值,可用于索引直方图。
直方图被倒置和缩放以计算动态成本图m_G、m_P、m_I 和 m_O。这个想法是低成本邻居q 应该适合之前看到的 64 或 128 像素的直方图。
本文给出的伪代码展示了如何在给定路径上先前选择的像素列表的情况下计算这些动态成本。
3) 图表搜索
静态成本和动态成本合并为一个单一成本,以从像素 p 移动到其 8 个相邻像素之一 q。找到从种子像素到目标像素的最低成本路径基本上是通过使用具有最小优先级队列的 Dijkstra 算法来完成的。论文给出了伪代码。
【讨论】: