week9-基于Homography的图像变换

Homography 单应性

单应性矩阵是投影几何中一个术语,本质上它是一个数学概念,但是在OpenCV中却是有几个函数与透视变换相关的函数,都用到了单应性矩阵的概念与知识。

要计算两个图像之间的单应性,我们需要知道两个图像之间的至少4个点对应关系。如果我们有4个以上的对应点,那就更好了。OpenCV将可靠地估计最适合所有对应点的单应性。通常,这些点的对应关系是通过在图像之间匹配SIFT或SURF之类的功能自动找到的,但是在本文中,我们只是要手动选择这些点。(opencv有sift算法的封装,没用主要是因为环境我一直没配好……)

import cv2
import numpy as np

if __name__ == '__main__' :

    # Read source image.
    im_src = cv2.imread('book2.jpg')
    # Four corners of the book in source image
    pts_src = np.array([[141, 131], [480, 159], [493, 630],[64, 601]], dtype=float)


    # Read destination image.
    im_dst = cv2.imread('book1.jpg')
    # Four corners of the book in destination image.确定目的图像上的四个点。
    pts_dst = np.array([[318, 256],[534, 372],[316, 670],[73, 473]], dtype=float)

cv2.findHomography

计算多个二维点对之间的最优单映射变换矩阵,找到并返回源平面和目标平面之间的转换矩阵H,以便于反向投影错误率达到最小。
这个函数里面集成了四个算法

  1. 0 - 利用所有点的常规方法
  2. RANSAC - RANSAC-基于RANSAC的鲁棒算法
  3. LMEDS - 最小中值鲁棒算法
  4. RHO - PROSAC-基于PROSAC的鲁棒算法
    其实四个算法差别在低运算的差别不大。
    # Calculate Homography 找到两个平面之间的转换矩阵。
    h, status = cv2.findHomography(pts_src, pts_dst)

cv2.warpPerspective

在这里插入图片描述

透视投影是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者彩现的一种方法,它也称为透视图。透视投影的绘制必须根据已有的几何规则进行。
透视变换详细解释

    # Warp source image to destination based on homography
    im_out = cv2.warpPerspective(im_src, h, (im_dst.shape[1],im_dst.shape[0]))
    
    # Display images
    cv2.imshow("Source Image", im_src)
    cv2.imshow("Destination Image", im_dst)
    cv2.imshow("Warped Source Image", im_out)

    cv2.waitKey(0)

左:Destination Image 右:Source Image在这里插入图片描述
仿射变换后的源图像 Warped Source Image
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值