文章目录
一 APAP
在图像拼接过程中,由于图片中的景物处于不同平面,景深变化大,会出现鬼影现象,如下图所示:
解决这种鬼影现象可以采用APAP方法。
算法流程如下:
1.提取两张图片的sift特征点
2.对两张图片的特征点进行匹配
3.匹配后,使用RANSAC算法进行特征点对的筛选,排除错误点。筛选后的特征点基本能够一一对应。
4.使用DLT算法,将剩下的特征点对进行透视变换矩阵的估计。
5.因为得到的透视变换矩阵是基于全局特征点对进行的,即一个刚性的单应性矩阵完成配准。为提高配准的精度,Apap将图像切割成无数多个小方块,对每个小方块进行单应性矩阵变换。
二 最小割(最大流 )
图像拼接完成后可能会出现图像与图像之间过度不连续,即存在明显的拼接缝隙,拼接缝隙两侧的灰度变化很明显。这个问题可以用最小割最大流来解决。
(1)最小割
一个有向图,并有一个源顶点(source vertex)和目标顶点(target vertex).边的权值为正,又称之为容量(capacity).如下图
一个st-cut(简称割cut)会把有向图的顶点分成两个不相交的集合,其中s在一个集合中,t在另外一个集合中。
这个割的容量(capacity of the cut)就是A到B所有边的容量和。注意这里不包含B到A的。参见下面几幅图。最小割问题就是要找到割容量最小的情况。
(2)最大流
给定指定的一个有向图,其中有两个特殊的点源S和汇源T,每条边有权值,为正,也叫容量,求满足条件的从S到T的最大流(MaxFlow)。如下图
一个st-flow(简称flow)是为每条边附一个值,这个值需要满足两个条件1 0<=边的flow <<边的capacity2 除了s和t外,每个顶点的inflow要等于outflow。
一个flow的值(value of the flow)就是t的inflow.Maxflow就是找到这个最大值。
一般情况下割大于流,但是最小割和最大流是对等的,解出了maxflow也就知道了mincut的解。
三 multi-band blending
在图像拼接过程中,尽管是同一天气同一时刻下拍摄的照片进行拼接,由于曝光参数不同等原因,会导致图像重叠区域的拼接处出现比较明显的边痕迹。这些边痕迹需要使用图像融合算法来消除,如multi-band blending,将两张图片进行融合,最终达到整体的亮度和颜色的一致性。
思想:对带拼接的两个图片进行拉普拉斯金字塔分解,后一半对前一半进行融合。
四 图像拼接
1 整体流程
(1)根据给定图像/集,实现特征匹配
(2)通过匹配特征计算图像之间的变换结构
(3)利用图像变换结构,实现图像映射
(4)针对叠加后的图像,采用APAP之类的算法,对齐特征点
(5)通过图割方法,自动选取拼接缝
(6)根据multi-band bleing策略实现融合
2 实验代码
# ch3_panorama_test.py
from pylab import *
from numpy import *
from PIL import Image
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift
import os
# set paths to data folder
featname = ['D:\pingjiedata\s' + str(i + 1) + '.sift' for i in range(5)]
imname = ['D:\pingjiedata\s'