首先,我有一张空白的单据(就是发票之类的)
扫描后,获得了一张图像,将此图像在PS中处理,剔除多余的空白,校正角度。得到一张模板图,我称之为A.然后,我有一张打印好的单据(就是用打印机在先前的单据上打上字)
扫描后,获得一张图像B,因为扫描的时候放的位置、角度都很随便,所以我需要根据模板图A校正图B。
也就是说,我需要
1.确定图B在哪个位置上能和图A重合,
2.确定图B需要旋转多少角度才能与图A重合这是问题1: 使用何种算法?或者何种开发包能够让我获知图B的偏移量和旋转角度?当确定了图B中发票的位置后,会处理图B,校正后得到图C.
图C应该能够与图A(也就是模板)最大限度的重合。我需要剔除图C上所有与图A相同的像素,保留不同的部分,(也就是说,将图C中打印机打印的字提出出来)
这样就能得到最终的图D.

这是问题2: 如果剔除2张图片上相同的背景(我想逐像素处理这种方式不是很好,因为扫描出来的图像不可能完全一致),应该使用某种算法来剔除。不知有何算法可以?

解决方案 »

  1.   

    http://www.mediachance.com/pbrush/help/perspectc.html
    第一问题:看上面的这个连接。
    效果图应该是这样的:算法呢其实就是解一个八元一次方程,你去搜索Perspective Correction就能找到的,或者搜索 扭斜校正
    其实这个东西在OpenCV里面有一个函数就可以搞定——cvWarpPerspective
    可以去查一些OpenCV的资料。当然你扫描的图像不会造成图示那么大的扭曲了 不过用这个校正应该能够满足你的要求了,其他什么镜头这类造成的扭曲 恐怕只能使用PhotoShop手动来
    处理 用算法找不到合适的度啊。第二个问题,如果不用图像处理的方法那肯定是不能实现的。 你要从图像中剔除东西 不对图像每个像素都处理是不可能的 计算机毕竟不是人啊。所以还是要归结到图像处理上去 可以使用模板匹配。
    对了上面那个cvWarpPerspective是输入四个原图(扭曲的)上的四个点,输入校正后图像(其实就是你的模板)的四个点,一一对应好了 会算出一个转换矩阵来给这个函数调用,然后一运算就出来校正好的图了。如果校正好了后 至少可以保证四个顶点是绝对一致的 你把模板的线条增宽一点(设定一个阈值) 然后进行图像运算(姑且叫做减法吧) 就可以从你的原图中得到文字了。
      

  2.   

    旋转了 也算是扭曲的一种 而且还有你说的面板大小上的出入 用我说的那个函数就可以搞定。比如你旋转了15度 图像是模板的1.2倍 用我说的那个扭斜校正的函数都可以转过来 而且你不用再分别去处理 旋转和放大的问题了。我试验了一下:正常图(模板):旋转和缩小图(扫描图):cvWarpPerspective变换后图:至于颜色为什么从彩色编程黑白了 那是因为我在里面有变换;
    变化后的图跟模板有一定的大小差别是因为我没有调整 只是把它正过来 你如果准确的制定变换后跟模板一样大小 那变化后就是一般大小的。