请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

透视变换原理实例代码详解

导读

在上篇文章中,我们引见了仿射变换,我们只需求经过一个两行三列的变换矩阵M就可以对图像完成平移缩放翻转旋转操作。这些变换其实都属于平面变换,假如我们想要停止空间变换呢?
原始图像



将上图的扑克牌单独提取出来,如下图所示
目的图像



这时分我们应该如何来完成这个功能呢?这个其实就触及到了图像的一个空间变换,就需求用到我们所说的透视变换了。
透视变换

透视变换(Perspective Transformation)是指应用透视中心像点目的点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,毁坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。简而言之,就是将一个平面经过一个投影矩阵投影到指定平面上

    原了解析

透视变换通用的变换公式:




u和v是原始图片,参数ω等于1,经过透视变换后得到的图片坐标x,y,其中




上式中的变换矩阵,可以将其拆成四个部分,第一部分表示线性变换

这部分矩阵次要用于图像的缩放旋转操作,在仿射变换中我们也引见过。第二部分用来停止平移操作[a31a32],第三部分用来产生透视变换[a13a23],第四部分参数a33​等于1
在上篇文章中我们引见的仿射变换矩阵一共有6个参数,所以我们只需求3个坐标对(6个方程)就能求解,而透视变换矩阵一共有8个参数,所以需求4个坐标对(8个方程)才能求解,其实仿射变换也是透视变换的一种特殊方式
所以变换后x和y的表达式为

接上去我们看一个例子,原始图像的四个点的坐标分别为(0,0)、(1,0)、(1,1)、(0,1)与之对应变换后的四个点坐标分别为(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4),根据下面的公式和对应的四个点坐标可得下面的方程式

经过下面的8个方程,我们可以解出8个参数求出透视变换矩阵,最后我们经过opencv的warpPerspective方法应用透视变换矩阵来完成透视变换,接上去我们经过结合一个实例来详细运用一下。
透视变换实例讲解

这里我们次要经过opencv来完成下面引见的那个功能
    读取图像

    Canny边缘检测

Canny函数参数解析
    image:输入图像数组threshold1:最低的阈值threshold2:最高的阈值edges:输入的边缘图像,单通道8位图像apertureSize:Sobel算子的大小L2gradient:表示一个布尔值,假如为真,则运用更准确的L2范数停止计算,否则运用L1范数





    霍夫直线检测

HoughLinesP函数参数解析
    image:经过Canny边缘检测后的输入图像rho:极坐标的半径r以像素值为单位的分辨率,普通运用1像素theta:极坐标的极角θ\\thetaθ以弧度为单位的分辨率,普通运用1度threshold:检测一条直线所需最少的曲线交点lines:存储检测到的直线,包含直线的终点和终点坐标minLineLength:组成一条直线的最少点的数量,点数量不足的直线将被丢弃maxLineGap:在一条直线上的点的最大间隔





    计算顶点坐标

经过直线两个端点的坐标来计算直线的交点坐标,找出扑克牌的四个顶点地位


    对顶点坐标停止排序

在计算透视变换矩阵之前我们需求对元素图像的坐标与变换后图像的坐标逐一对应,按照左->上->右->下的顺序




    计算变换矩阵停止透视变换



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评16

屠豚手 2020-2-23 14:14:56 显示全部楼层
这篇文章怎样放到文娱板块了?这应该是科技板块哇。
回复

使用道具 举报

梦恋米兰 2020-2-23 14:21:12 显示全部楼层
这个凸四边形拉直的好像cpp写过一个微分差值的,但是四个定点要手动指定
回复

使用道具 举报

霍夫直线检测这个之前不知道,绕了很多弯路。
回复

使用道具 举报

wocaoni928 2020-2-23 14:29:29 显示全部楼层
不明觉厉
回复

使用道具 举报

wangxiaoxi 2020-2-23 14:31:56 显示全部楼层
分享了
回复

使用道具 举报

分享了
回复

使用道具 举报

happy幸福 2020-2-23 14:42:22 显示全部楼层
分享了
回复

使用道具 举报

分享了
回复

使用道具 举报

A区123 2020-2-23 14:56:11 显示全部楼层
分享了
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies