如何分析出扫描图与模板图的重合位置、角度?

CodeProject-Jerry 2008-12-03 12:51:06
首先,我有一张空白的单据(就是发票之类的)
扫描后,获得了一张图像,将此图像在PS中处理,剔除多余的空白,校正角度。得到一张模板图,我称之为A.

然后,我有一张打印好的单据(就是用打印机在先前的单据上打上字)
扫描后,获得一张图像B,因为扫描的时候放的位置、角度都很随便,所以我需要根据模板图A校正图B。
也就是说,我需要
1.确定图B在哪个位置上能和图A重合,
2.确定图B需要旋转多少角度才能与图A重合

这是问题1: 使用何种算法?或者何种开发包能够让我获知图B的偏移量和旋转角度?

当确定了图B中发票的位置后,会处理图B,校正后得到图C.
图C应该能够与图A(也就是模板)最大限度的重合。

我需要剔除图C上所有与图A相同的像素,保留不同的部分,(也就是说,将图C中打印机打印的字提出出来)
这样就能得到最终的图D.

这是问题2: 如果剔除2张图片上相同的背景(我想逐像素处理这种方式不是很好,因为扫描出来的图像不可能完全一致),应该使用某种算法来剔除。不知有何算法可以?
...全文
610 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa335418265 2012-04-29
  • 打赏
  • 举报
回复
学习中 有没有C语言的源代码呢
ttfit20111 2011-09-14
  • 打赏
  • 举报
回复
正在学习图像校正
piaoxuecn 2011-09-12
  • 打赏
  • 举报
回复
学习中
CodeProject-Jerry 2008-12-07
  • 打赏
  • 举报
回复
我先试试 没什么问题就结贴了
Tinary3v0 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangjia184 的回复:]
回楼上 我的图像不扭曲,只是 被旋转了, 且,此图像周围有空白区域, 因为扫描出来的图像不等于票据的版面大小。 是否这种算法仍然有效??
[/Quote]
旋转了 也算是扭曲的一种 而且还有你说的面板大小上的出入 用我说的那个函数就可以搞定。

比如你旋转了15度 图像是模板的1.2倍 用我说的那个扭斜校正的函数都可以转过来 而且你不用再分别去处理 旋转和放大的问题了。

我试验了一下:

正常图(模板):

旋转和缩小图(扫描图):

cvWarpPerspective变换后图:

至于颜色为什么从彩色编程黑白了 那是因为我在里面有变换;
变化后的图跟模板有一定的大小差别是因为我没有调整 只是把它正过来 你如果准确的制定变换后跟模板一样大小 那变化后就是一般大小的。
e01620230 2008-12-04
  • 打赏
  • 举报
回复
学习
e01620230 2008-12-04
  • 打赏
  • 举报
回复
学习
Show_Mike 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangjia184 的回复:]
回楼上 我的图像不扭曲,只是 被旋转了, 且,此图像周围有空白区域, 因为扫描出来的图像不等于票据的版面大小。 是否这种算法仍然有效??
[/Quote]
根据你的描述,可以回答你的问题如下:
1.对于票据图像(我们也在做这方面的研究),由于表格特征非常明显,因此,一个决定偏移和旋转参数的简单方法就是利用哈夫变换,即检测其中特定的边框线条,然后通过匹配算法求得A,B两者的对应边框线条,由此确定偏移值与旋转角.
2.这类图像的背景与前景内容识别,可以采用背景差的方法完成,即先通过多次扫描类似票据构建一个通用背景模型,然后通过两幅图像直接相减得到没有背景的前景差值图像.------(我们在票据水印处理时就是用得这个方法).
CodeProject-Jerry 2008-12-04
  • 打赏
  • 举报
回复
回楼上 我的图像不扭曲,只是 被旋转了, 且,此图像周围有空白区域, 因为扫描出来的图像不等于票据的版面大小。 是否这种算法仍然有效??
Tinary3v0 2008-12-03
  • 打赏
  • 举报
回复
http://www.mediachance.com/pbrush/help/perspectc.html
第一问题:看上面的这个连接。
效果图应该是这样的:

算法呢其实就是解一个八元一次方程,你去搜索Perspective Correction就能找到的,或者搜索 扭斜校正
其实这个东西在OpenCV里面有一个函数就可以搞定——cvWarpPerspective
可以去查一些OpenCV的资料。

当然你扫描的图像不会造成图示那么大的扭曲了 不过用这个校正应该能够满足你的要求了,其他什么镜头这类造成的扭曲 恐怕只能使用PhotoShop手动来
处理 用算法找不到合适的度啊。

第二个问题,如果不用图像处理的方法那肯定是不能实现的。 你要从图像中剔除东西 不对图像每个像素都处理是不可能的 计算机毕竟不是人啊。

所以还是要归结到图像处理上去 可以使用模板匹配。
对了上面那个cvWarpPerspective是输入四个原图(扭曲的)上的四个点,输入校正后图像(其实就是你的模板)的四个点,一一对应好了 会算出一个转换矩阵来给这个函数调用,然后一运算就出来校正好的图了。

如果校正好了后 至少可以保证四个顶点是绝对一致的 你把模板的线条增宽一点(设定一个阈值) 然后进行图像运算(姑且叫做减法吧) 就可以从你的原图中得到文字了。
ilovedrv 2008-12-03
  • 打赏
  • 举报
回复
我的意思是不用祛除背景,直接标定那些输出的字符位置,然后在进行后续处理
CodeProject-Jerry 2008-12-03
  • 打赏
  • 举报
回复
打印不是我能控制的, 那是别的公司已经开发好的 而且终端有成千上万,不可能保证所有的打印和扫描都是一致的
ilovedrv 2008-12-03
  • 打赏
  • 举报
回复
是不是弄得有点复杂了

直接定位那个打印机打印输出的字,不就行了

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧