美文网首页ocr
使用sift特征对图片进行矫正

使用sift特征对图片进行矫正

作者: 夕一啊 | 来源:发表于2020-04-08 20:54 被阅读0次

在对有模板的图片进行ocr之前,比如发票,可以使用sift找到图片的特征,与模板图片关键点进行匹配矫正,可以处理旋转90°180°270°图片。

1. 使用sift找到关键点

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。sift专利2020年3月刚过期,现在可以免费使用了。

img = cv2.imread('data/00.jpg')
gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img,None)
img = cv2.drawKeypoints(img,keypoints_1,img)

图上彩色的小圆圈就是关键特征点。

模板图片特征点

2. 两张图的关键点进行匹配

FlannBasedMatcher ( 快速最近邻逼近搜索函数库(Fast Approximate Nearest Neighbor Search Library) )速度快,也可以使用暴力的BFMatcher,速度较慢。

# FLANN 参数设计
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params,search_params)

matches = flann.knnMatch(des1,des2,k=2)
matchesMask = [[0,0] for i in range(len(matches))]

# 挑选出匹配较好的一些点
good = []
for m,n in matches:
    if m.distance < 0.75 * n.distance:
        good.append([m])

img5 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
拍摄图片与模板图片匹配上的特征点

3. 使用关键点矫正

findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法

kp_matched_kpts = np.float32([kp1[m[0].queryIdx].pt for m in good]).reshape(-1,1,2)
sensed_matched_kpts = np.float32([kp2[m[0].trainIdx].pt for m in good]).reshape(-1,1,2)

#使用两张图对应上的关键点,得到变换矩阵
H, status = cv2.findHomography(sensed_matched_kpts, kp_matched_kpts, cv2.RANSAC,5.0)
warped_image = cv2.warpPerspective(img2, H, (img1.shape[1], img1.shape[0])) 
矫正之后的图片

之后再做ocr任务就会简单很多了。还能找出特定要抽的信息区域。


原始图片

参考:
https://blog.csdn.net/zhangziju/article/details/79754652
https://www.jiqizhixin.com/articles/2019-08-06-9

相关文章

  • 使用sift特征对图片进行矫正

    在对有模板的图片进行ocr之前,比如发票,可以使用sift找到图片的特征,与模板图片关键点进行匹配矫正,可以处理旋...

  • Python进行SIFT图像对准

    基础方法 SIFT特征点和特征描述提取 SIFT算法广泛使用在计算机视觉领域,在OpenCV中也对其进行了实现。 ...

  • 3. opencv提取SIFT特征

    opencv中sift特征提取的步骤 使用SiftFeatureDetector 的detect方法检测特征存入一...

  • SIFT特征提取

    SIFT特征 SIFT(Scale-invariant feature transform)是一种检测局部特征算法...

  • BoW实现图像分类报告

    在一般图像处理中常用的几种特征有:SIFT、SURF、ORB、OpponentColor对一张图片,其存在以上几类...

  • SIFT特征

    SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过...

  • SIFT特征

    简介 参考了几位大佬的博文: 参考1 参考2 SIFT特征也叫做尺度不变特征,SIFT特征最后是把输入的图像表现成...

  • 图像特征

    一、SIFT 尺度不变特征转换即SIFT (Scale-invariant feature transform)它...

  • OpenCV提取图片的SIFT特征

    SIFT理论介绍 参考前面做的笔记:SIFT原理 用OpenCV实现SIFT特征提取 1.实现代码:

  • Surf特征

    在对未配准图像进行融合处理时,现在尝试着先对所有图像进行配准操作,在这儿用到的特征是SURF,SURF是SIFT的...

网友评论

    本文标题:使用sift特征对图片进行矫正

    本文链接:https://www.haomeiwen.com/subject/vhpxmhtx.html