目录
一,问题背景
在扫描一个区域图像时,由于各种原因,需要把一个区域划分成若干个小区域,各自单独扫描成图像。
由于扫描设备对小区域的定位存在误差,不能直接把小图拼成大图,需要配准拼接算法进行处理。
上游的把区域划分成小区域的算法,叫扫描规划算法。
配准拼接算法和扫描规划算法是息息相关,互相配合。
扫描规划算法会给出所有小图的理论位置(即所有小区域的位置),配准拼接算法会基于图像算出所有图片的实际位置,理论位置和实际位置的差值就是扫描设备的定位误差。
配准拼接算法的原理就是计算所有相邻两张小图的相对位置关系(即配准算法),再基于这个数据计算所有小图的位置。
因为配准算法的需要,扫描规划算法会让所有相邻两张小图之间都有重合区域。
二,简单场景——绝对配准
如果配准算法是绝对准确可靠的,那么根据配准算法的结果,用搜索算法即可得到完整大图。
1,基本代码
输入所有图片信息,计算所有配准结果,再拼接大图。
struct ImageInfo
{
//图片内容和坐标等数据
};
struct Shift
{
int x, y;//两张图片的配准结果
};
struct Pos
{
int x, y;//小图坐标
};
class RegistrationStitch
{
public:
RegistrationStitch(int row, int col, vector<ImageInfo>images) :row{ row }, col{ col }, images{ images }{}
ImageInfo GetStitchImage()
{
Registration();
vector<Pos> allPos = GetPos(shiftLR, shiftUD);
return GetStitchImage(images, allPos);
}
private:
int GetId(int r, int c) //所有小图编号0到row*col-1
{
return r * col + c;
}
void Registration()//配准算法
{
for (int r = 0; r < row; r++) {
for (int

最低0.47元/天 解锁文章
520

被折叠的 条评论
为什么被折叠?



