Image Fusion工具是基于CxImage 6.0 的Demo开发的影像拼接工具,它针对的是网上的WEBGIS中的连续的一帧帧连续的图像。这些图像的特点是连续的图像之间有重叠的部分(通过拷屏获得),只要给定区域匹配,则可认为其余的都匹配(这个是该工具的应用场合)。
影像处理平台的选择:
(1) GDAL :
能够处理几百兆几个G的影像,这个可以作为后续版本的开发平台。
(2) GDI+ :
代码闭源,不做考虑。
(3) OpenCV:
不熟悉,故也不考虑。
(4) CxImage(我用的6.0的版本):
优秀的开源类库,可以处理的图像类型包括bmp、gif、jpg、 jpeg、png、ico、tif、tiff、tga、pcx、wbmp、wmf、
emf、j2k、jp2、jbg、j2c、jpc、pgx、pnm、pgm、ppm、ras、mng、jng、ska、nef、crw、cr2、mrw、raf、
erf、3fr、dcr、raw、dng、pef、x3f、arw、sr2、mef、orf 。 并且它提供的DEMO功能强大(支持大图像需调整
某些参数),所以我选择了基于CxImage 6.0 的Demo来开发这一工具。 对于网上提到的CxImage内存泄露和不能批
处理,我已经解决了这些问题。
拼接的原理:
进行拼接的两张图,假定图A去匹配图B,则称图A是叠加图,图B是底图。即先贴上底图,然后在底图的某个位置贴上叠加图。
这里的位置包括在底图的某个位置 Point(m_dxoffset,m_dyoffset) ,以及叠加图开始的位置Point(m_xoffset,m_yoffset)。
匹配的原则是给定区域的颜色特征(RGB,A通道忽略不计)相同。通过匹配搜索,确定拼接的位置信息。
匹配矩阵是(起始行,行高,起始列,列宽),这四个参数可以调整,用来规避黑色区域。
(一) 水平拼接查找:
(1)先保证参与运算的底图的最后两列色值矩阵不重复。然后找到第一组匹配点。 从底图的最后一列从上到下采集数据存
入矩阵,对于固定的底图颜色矩阵,从叠加图的第一列从上到下,然后第二列从上到下,依次找到匹配的颜色矩阵,并
记录叠加图中的起始列和起始行以及底图的起始行。
(2) 再找(列宽 - 1)组其他的匹配点。 从(1)中的匹配参数开始查找,直到查找完。
(二) 垂直拼接 查找:
(1)先保证参与运算的叠加图的最前两行色值矩阵不重复。然后找到第一组匹配点。 从叠加图的第一行从左到右采集数据存
入矩阵,对于固定的底图颜色矩阵,从底图的最后一行从左到右,然后倒数第二行从左到右,依次找到匹配的颜色矩阵
,并记录底图中的起始列和起始行以及叠加图的起始行。
(2) 再找(行高 - 1)组其他的匹配点。 从(1)中的匹配参数开始查找,直到查找完。
(三) 水平和垂直方向上的合并:
这里要尽量增加图像有效部分,对于被遮盖的部分,要用贴的方式给补回去。算法就不给出了,主要就是通过拼接查找得到的
四个位置参数,得到底图和叠加图合并后的图像矩形区域,往这个区域分别贴上两张图即可。
Image Fusion主界面
水平拼接的例子
水平拼接的效果图
垂直拼接的例子
垂直拼接的效果图
欢迎读者批评指正,我的EMAIL: [email protected].