Image Livewire算法(智能剪刀)逐步实现

Image Livewire算法(智能剪刀)逐步实现,image,algorithm,image-processing,Image,Algorithm,Image Processing,我正在尝试编写livewire算法,但我有点被卡住了,因为文章“图像合成的智能剪刀”中解释的算法有点混乱,我不完全理解如何应用某些东西,例如:如何计算去局部成本图和其他东西 所以请大家帮忙,用简单的话一步一步地解释一下 我非常感激任何帮助 谢谢。您应该阅读比较短的“图像合成智能剪刀”更详细的算法 以下是一个高级概述: 智能剪刀算法使用Dijkstra图形搜索算法的一种变体,以找到从种子像素到目标像素(交互式分割期间鼠标光标的位置)的最小成本路径 1)本地成本 从像素p到像素q的每一条边都有一个局

我正在尝试编写livewire算法,但我有点被卡住了,因为文章“图像合成的智能剪刀”中解释的算法有点混乱,我不完全理解如何应用某些东西,例如:如何计算去局部成本图和其他东西

所以请大家帮忙,用简单的话一步一步地解释一下

我非常感激任何帮助

谢谢。

您应该阅读比较短的“图像合成智能剪刀”更详细的算法

以下是一个高级概述:

智能剪刀算法使用Dijkstra图形搜索算法的一种变体,以找到从种子像素到目标像素(交互式分割期间鼠标光标的位置)的最小成本路径

1)本地成本

从像素
p
到像素
q
的每一条边都有一个局部代价,它是局部代价的线性组合(通过
p
q
之间的距离进行调整以考虑对角像素):

  • 拉普拉斯零交叉
    f_Z(q)
  • 梯度幅值
    f_G(q)
  • 梯度方向
    fd(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''u G
(其中
f''u G=1-f''u G
)、
f''u P
f''u I
f'/code>,从而在
[0 255]
[0 1023]
中具有可用于索引直方图的整数值来计算

将直方图倒置并缩放以计算动态成本图
m_G
m_p
m_I
m_O
。这个想法是一个低成本的邻居
q
应该适合之前看到的64或128像素的直方图

本文给出了伪代码,展示了如何在给定路径上先前选择的像素列表的情况下计算这些动态代价

3)图形搜索


静态成本和动态成本合并为单个成本,从像素
p
移动到其8个相邻
q
之一。找到从种子像素到目标像素的最低成本路径基本上是通过使用具有最小优先级队列的Dijkstra算法来完成的。论文给出了伪代码。

谢谢你的回复,我会尝试应用它,有什么疑问我可以再问你一次吗?