1

我有一组覆盖某个区域的重叠图像,我的目标是构建一个联合图像,而最终图像的每个像素对应于一个源图像的一个适当像素。因此,目标是为每个像素选择合适的源图像。

正式地说,我们有以下内容:

  • 每个源图像的每个像素都有其分数。
  • 如果最终图像的两个相邻像素来自不同的源图像 - 会有一个惩罚,这取决于特定像素和源图像。

目标是最大化总分。

简单地说,目标是构建图像的马赛克,而图像内的图像质量并不统一,而且马赛克切割线应该在它们最不可见的地方。

这是一个现实世界的问题,因此像素分数是一个平滑的缓变函数,“像素”选择不应该从字面上理解,它更多的是选择适当的区域

我目前的算法如下:

  1. 从得分最高的源图像中选择源图像
  2. 将来自同一来源的相邻像素合并到云中。
  3. 云边界的局部优化wrt。
  4. 测试可以完全消失的云(即从其内部获得的分数并不能证明对其边界的惩罚是合理的)

这是(希望)已知解决方案的已知问题吗?近似的解决方案应该没问题。

4

2 回答 2

1

这确实是计算机图形学研究中众所周知的问题。

它通常被视为一个离散优化问题,其中重叠区域中的每个像素都是一个离散变量,每个可能的像素源都有一个状态。要最小化的能量(或误差)函数通常包含在人眼可能检测到它们的区域中惩罚过渡的术语(例如,它惩罚切断强梯度),以及鼓励从同一源中选择相邻像素的术语。

一旦定义了能量函数,通常会使用一种称为 Graphcuts 的算法来解决它。该算法与图中的最大流/最小割问题有关,但可以用来解决相当大的一类离散优化问题。请注意,实现 Graph Cuts 并非易事,您可能应该寻找代码。boost::graph具有 Boykow-Kolmogorov 算法 afaik 的实现,它是通常用于网格(即图像)上的 Graphcut 问题的最大流/最小切割算法变体。

为了帮助您入门,请查看以下论文:

http://www.cc.gatech.edu/cpl/projects/graphcuttextures/gc-final-lowres.pdf

它是关于将图像拼接在一起以创建纹理(以及关于拼接视频),但本质上它所做的事情与您想要实现的目标非常相似。

此外,谷歌搜索“图像拼接”或“图像马赛克”,可能与“SIGGRAPH”结合使用,这是图形领域的主要科学会议。

于 2013-05-27T08:12:49.963 回答
-1

SIFT 和 SURF 方法在文献中是解决这个问题的最先进的方法。

http://en.wikipedia.org/wiki/Scale-invariant_feature_transform https://en.wikipedia.org/wiki/SURF

于 2013-05-27T08:12:15.837 回答