智客公社
标题:
透视变换原理实例代码详解
[打印本页]
作者:
lyh1014
时间:
2020-2-23 14:06
标题:
透视变换原理实例代码详解
导读
在上篇文章中,我们引见了仿射变换,我们只需求经过一个
两行三列的变换矩阵M
就可以对图像完成
平移
、
缩放
、
翻转
、
旋转
操作。这些变换其实都属于
平面变换
,假如我们想要停止
空间变换
呢?
[attach]300243[/attach]
原始图像
将上图的扑克牌单独提取出来,如下图所示
[attach]300244[/attach]
目的图像
这时分我们应该如何来完成这个功能呢?这个其实就触及到了图像的一个
空间变换
,就需求用到我们所说的
透视变换
了。
透视变换
透视变换
(Perspective Transformation)是指应用
透视中心
、
像点
、
目的点
三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,毁坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。简而言之,
就是将一个平面经过一个投影矩阵投影到指定平面上
。
[attach]300245[/attach]
原了解析
透视变换通用的变换公式:
[attach]300246[/attach]
u和v是原始图片,参数ω等于1,经过透视变换后得到的图片坐标x,y,其中
[attach]300247[/attach]
上式中的变换矩阵,可以将其拆成四个部分,第一部分表示
线性变换
:
[attach]300248[/attach]
这部分矩阵次要用于
图像的缩放
、
旋转
操作,在仿射变换中我们也引见过。第二部分用来停止
平移操作
[a31a32],第三部分用来产生
透视变换
[a13a23],第四部分参数
a33等于1
。
在上篇文章中我们引见的仿射变换矩阵一共有6个参数,所以我们只需求
3个坐标对
(6个方程)就能求解,而透视变换矩阵一共有8个参数,所以需求
4个坐标对(
8个方程)才能求解,其实
仿射变换也是透视变换的一种特殊方式
。
所以变换后x和y的表达式为
[attach]300249[/attach]
接上去我们看一个例子,
原始图像的四个点的坐标
分别为(0,0)、(1,0)、(1,1)、(0,1)与之对应
变换后的四个点坐标
分别为(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4),根据下面的公式和对应的四个点坐标可得下面的方程式
[attach]300250[/attach]
经过下面的8个方程,我们可以解出8个参数求出
透视变换矩阵
,最后我们经过opencv的
warpPerspective
方法应用透视变换矩阵来完成透视变换,接上去我们经过结合一个实例来详细运用一下。
透视变换实例讲解
这里我们次要经过opencv来完成下面引见的那个功能
读取图像
[attach]300251[/attach]
Canny边缘检测
Canny函数参数解析
:
image:输入图像数组threshold1:最低的阈值threshold2:最高的阈值edges:输入的边缘图像,单通道8位图像apertureSize:Sobel算子的大小L2gradient:表示一个布尔值,假如为真,则运用更准确的L2范数停止计算,否则运用L1范数
[attach]300252[/attach]
[attach]300253[/attach]
霍夫直线检测
HoughLinesP函数参数解析
:
image:经过Canny边缘检测后的输入图像rho:极坐标的半径r以像素值为单位的分辨率,普通运用1像素theta:极坐标的极角θ\\thetaθ以弧度为单位的分辨率,普通运用1度threshold:检测一条直线所需最少的曲线交点lines:存储检测到的直线,包含直线的终点和终点坐标minLineLength:组成一条直线的最少点的数量,点数量不足的直线将被丢弃maxLineGap:在一条直线上的点的最大间隔
[attach]300254[/attach]
[attach]300255[/attach]
计算顶点坐标
经过直线两个端点的坐标来计算直线的交点坐标,找出扑克牌的四个顶点地位
[attach]300256[/attach]
[attach]300257[/attach]
对顶点坐标停止排序
在计算透视变换矩阵之前我们需求对元素图像的坐标与变换后图像的坐标逐一对应,按照
左->上->右->下
的顺序
[attach]300258[/attach]
计算变换矩阵停止透视变换
[attach]300259[/attach]
[attach]300260[/attach]
作者:
屠豚手
时间:
2020-2-23 14:14
这篇文章怎样放到文娱板块了?这应该是科技板块哇。
作者:
梦恋米兰
时间:
2020-2-23 14:21
这个凸四边形拉直的好像cpp写过一个微分差值的,但是四个定点要手动指定
作者:
小宇宙无限爆发
时间:
2020-2-23 14:26
霍夫直线检测这个之前不知道,绕了很多弯路。
作者:
wocaoni928
时间:
2020-2-23 14:29
不明觉厉
作者:
wangxiaoxi
时间:
2020-2-23 14:31
分享了
作者:
简单白勺心情
时间:
2020-2-23 14:38
分享了
作者:
happy幸福
时间:
2020-2-23 14:42
分享了
作者:
境界下面给你吃
时间:
2020-2-23 14:47
分享了
作者:
A区123
时间:
2020-2-23 14:56
分享了
作者:
宋少
时间:
2020-2-23 15:02
分享了
作者:
此奶大胸之兆55
时间:
2020-2-23 15:11
分享了
作者:
zzz861025
时间:
2020-2-23 15:22
分享了
作者:
阿琪love锋
时间:
2020-2-23 15:24
分享了
作者:
weiyizhifu
时间:
2020-2-24 11:23
我了个去,顶了
作者:
林yi
时间:
2020-2-24 22:30
前排支持下了哦~
作者:
你缺了吗
时间:
2020-2-26 07:50
为了三千积分!
欢迎光临 智客公社 (http://bbs.cnaiplus.com/)
Powered by Discuz! X3.4