图像配准算法
对同一份word文档产生的两幅图像进行图像配准,图像中还有汉字、数组、表格等,其中一幅图像为标准图像类似于原word文档,另一份图像为打印机打印后扫描生成的图像,可能还有噪声、旋转、缩放、亮度等变化也可能是非刚性变化,现对此2幅图像进行配准,有经验的高手们,有什么好的配准方法吗?
[解决办法]
再两幅图像上找到足够的同名点对,然后用多项式模型强行纠正。
大小、旋转、噪声等都不是问题。
[解决办法]
时间效率要求如何,可以看看Sift算法
[解决办法]
选取两幅图的两个应该相同的点(一共4个点),得到4个点的坐标,然后用A图的两点线段与B图的两点线段计算出坊射变换的矩阵,再把矩阵应用于整幅图就行了。。
看看opencv吧 好多现成的API函数
[解决办法]
光流法配准、基于特征点配准、基于小波的角点匹配,等等
配准算法都很复杂,没有简单的,而且针对不同的图像各种算法的适应性不同,要自己多试验一下
[解决办法]
基于灰度的互信息量配准方法可以考虑一下。。
[解决办法]
都看成图像,用基本的图形特征提取和识别方法试试
[解决办法]
必然是六参数配准(仿射变换)啊。
具体求法:
一共是6个参数,坐标轴的变化夹角,旋转夹角,X尺度变化,Y尺度变化,X平移,Y平移。
进行一系列运算过后,可以变成一个线性代数式(具体怎么变换的不用管,比较复杂)
u = Ax + By + C
v = Dx + Ey + F
其中,U,V是目标图的横纵坐标,X,Y是原图横纵坐标
也就是说
u A B C x
v = D E F * y
1 0 0 1 z
具体A-F六个参数的计算可以通过SIFT在两张图中找到足够的尺度不变特征点,然后对这些特征点进行匹配。匹配后就能得到很多特征点对。然后建立
u = Ax + By + C
v = Dx + Ey + F
这样的方程。
一共3对特征点,6个方程,就足够解6个参数了。
但是实际上矩阵空间内三个远远不够。一般要把所有的一起拿来解超定方程组。
u A B C x
v = D E F * y
1 0 0 1 z
你可能还是摸不着头脑,其实是先用SIFT算法找出两张图的尺度不变点,然后再对这些点进行匹配,然后把每一对匹配的点用来计算这个方程
[解决办法]
opencv 和 SIFT 是不错的选择的
[解决办法]
哈哈,你算是问到人了,老夫VC是饭桶,但是却做了3年的配准。
先给你交个底,如果你原来没有学过优化算法,你要短期内熟悉配准过程基本不太可能,因为许多环节都有知识点但是掌握点基本知识,知道配准的过程还是可以的。
要做图像配准你必须得考虑3个问题,分别是配准时所用到的空间变换模型、配准的相似性测度准则以及空间变换矩阵的寻优方式。
下面我一个一个来给你解释:
1)空间变换模型,是指的这两幅要配准的图像之间的映射模型,比如只有旋转、平移这些操作,那就是刚体变换模型,又比如有缩放操作,甚至X方向和Y方向缩放的幅度都还不一样,那就是仿射变换或者非线性变换模型。总之你要做配准,先要确定这两幅图像之间是一种什么样的映射模型。要是对这个变换模型还不清楚,你就到google上或者万方上搜索“仿射变换”、“刚体变换”这些关键词。帖子里不可能讲的太详细。
2)配准的相似性测度准则。在你确定了变换模型后,接下去要做什么?当然是确定模型里的参数了,而要确定这些参数(不同的变换模型参数个数是不一样的,像刚体变换有x平移、y平移和旋转角度sita三个参数,仿射变换有6个参数)你得告诉程序什么参数是最好的,或者说是正确的。那么判断什么参数是正确的一个准则就是我们说的配准的相似性测度准则,也就是告诉程序在某组参数下是配准的程度是多少,显然使得配准程度最好的那组参数就是我们要找的参数。
3)空间变换矩阵的寻优方式。因为大多数情况下,模型中的参数不是靠解出来的,而是要靠“尝试-判断”这种方式去寻找,空间变换矩阵的寻优说白了也就是怎么对这些参数进行寻优,找出使得配准程度最好的那一组参数的过程。这里有很多方法,如遗传算法、粒子群优化算法等等,如果你对这些算法都不了解,没办法,你只有用最笨的遍历式搜索方法了,也就是以某一个步距,搜索所有的参数组合方式,然后找出使得按照相似性测度准则配准程度最高的那一组参数。
理论性的东西都说完了,下面举一个简单的例子来说明这个过程。
比如有一幅图像A,我将A左移了2个像素,再往下移了3个像素,又顺时针旋转了60度,这时的图像我们称作B。如果我们要对A和B进行配准,其实就是确定2、3、60这三个参数的过程,因为这三个参数一旦确定了,我就知道了B和A的对应关系,换句话说对于B中的任何一个像素点我就知道在A中对应的是哪个点。
这里因为我知道这两幅图只有平移和旋转的变换操作,所以我们采用的模型是刚体变换模型(实际情况下,你如果不知道这两幅图像进行了什么变换操作,只有大概根据图像的位置信息揣测了,一般情况下非线性变换模型是最正确的,但是参数也最多)。
配准的相似性测度准则这里我们就用简单点的(只是举个例子说明下过程,事实上的许多情况都要复杂的多),以二值化后两幅图像重合的像素点个数为准,也就是说我们认为使得两幅图像重合的像素最多的那组参数就是正确的变换参数,理论上来讲,如果两幅图像严格配准了,那么显然他们所有的像素点都是重合的,否则就有错开的部分。
寻优方法比较啰嗦,任何一个优化算法都不是几句话说的明白的,这里直接用遍历搜索法吧。
因为有三个参数需要寻优因此,我们对这三个参数的解空间进行遍历,比如对X方向的平移像素个数我们从-100搜索到+100,步距为1像素,对Y方向的平移像素我们也从-100搜索到+100,步距为1像素,对旋转角度我们从0搜索到360度,步距为1度。这样等于说要完成一个200*200*360次的循环,然后在每次循环里面,我们都判断一下,按照当次循环参数进行变换后的A图像与B图像的重合像素个数有多少,找出200*200*360次循环中使得重合像素个数最多的那组循环中所使用的参数,这组参数就是我们所要的结果,如果一切正常,显然我们会在2,3,60这组参数所在循环中得到重合像素个数最多的结果。而所谓优化算法其实就是用一种更为智能的方式得到2,3,60这三个参数的过程。
这样就完成了配准的过程。
给分吧!码了这么多不给都没天理。
------解决方案--------------------
不知道你说的要配准是什么意思. 是要看这两个图匹配不匹配?
如果是的话,就是先做image alignment,找到最优变换参数(楼上把该这点说的基本都说了),然后变换后再求两个image difference,如果小于一定阀值,就是匹配,这个阀值需要你自己实验,自己找。
我再补充下:
1,慎用SIFT,你这种近似于binary image,SIFT算法我感觉不适用,提取的特征点应该会及其不稳定,我个人经验sift适用于普通的gray image,
附:opencv里面没sift的implementation,据说是应为sift已经被申请专利
2.减少亮度对比度差异的影响的方法很简单,用image normalization,就是先求图的mean,std,然后把所有pixel变换,使得最终mean是0,std是1.
2.关于Image Alignment,推荐论文: Lucas-Kanade 20 years On: A Unifying Framework: Part1,整个TR48页太长,我只读前10页,我用了compositional algorithm,它是最慢的,不过根据我的经验来看,z在变换并不是特别大的时候,还蛮好用的(当然我只用于普通gray image,理论上也适用于近似binary image)。它适用于translation,scaling,rotation变换,寻找最优过程类似于用gradient of multi-variable function 寻找 local minimum。 但是假如变换太大,这个方法应该不行
3,关于代码,http://www.codeproject.com/KB/recipes/ImgAlign.aspx
好好读读刚才那论文,那个代码基本你就能看懂了,否则就是看天书。
Remark:如果图像里有太多非刚性变换,忽略我所有的推荐。
[解决办法]
surf算法 opecv2.0
[解决办法]
最方便的是特征点的配准,先粗配准,然后再细配。先把所有的伪特征点都去掉,这个技术应该很成熟了。