我试图对livewire算法进行编码,但由于该文章"图像合成的智能剪刀"有点凌乱,我不理解如何应用某些东西,例如:如何计算当地的成本地图和其他东西。
所以,任何人都可以用简单的语言一步一步地解释它吗?
我会提供任何帮助
感谢。
答案 0 :(得分:0)
你应该阅读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
和{{1之间的距离调整考虑对角线像素):
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
的情况)为即时培训计算
2)即时培训
为了防止以比当前跟随的当前成本更低的成本捕捉到不同边缘,该算法使用即时训练为相邻像素分配较低的成本,这些像素沿着当前边缘“看起来像”过去的像素。
这是通过沿最后64或128个边缘像素构建图像值特征的直方图来完成的。通过缩放和舍入f_G
(其中f'_G
),f_G = 1 - f'_G
,f_P
和f_I
来计算图像值要素,以便在{{中具有整数值1}}或f_O
可用于索引直方图。
直方图被反转并缩放以计算动态成本地图[0 255]
,[0 1023]
,m_G
和m_P
。我们的想法是,低成本邻居m_I
应该适合之前看到的64或128像素的直方图。
本文给出了伪代码,展示了如何计算这些动态成本,给出了路径上先前选择的像素列表。
3)图表搜索
静态和动态成本合并为一个成本,从像素m_O
移动到其8个邻居之一q
。通过基本上使用具有最小优先级队列的Dijkstra算法来完成从种子像素到目标像素的最低成本路径。该论文给出了伪代码。