机器视觉入门之路(十五,图像旋转原理,c++)

整理一下:有关旋转:\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} cos\Theta ,sin\Theta ,0\\ -sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}*\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix}

那么平移是否也可以:\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} ? \end{bmatrix}*\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix},保证x=x0+\Deltax,y=y0+\Deltay呢?有人发现:\begin{bmatrix} x\\ y \end{bmatrix}=\begin{bmatrix} 1, 0 \\ 0,1 \end{bmatrix}\begin{bmatrix} x0\\ y0 \end{bmatrix}

而且\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix}1 ,0 ,0\\ 0 ,1 ,0\\0,0, 1 \end{bmatrix}*\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix},那么自然就会有\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix}1 ,0 ,\Delta x\\ 0 ,1 ,\Delta y\\0,0, 1 \end{bmatrix}*\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix},所以\begin{bmatrix} ? \end{bmatrix}=\begin{bmatrix}1 ,0 ,\Delta x\\ 0 ,1 ,\Delta y\\0,0, 1 \end{bmatrix}

好,再复习一下:

点(x0,y0)围绕任一点(a,b)旋转\Theta=(x,y)公式如下:

\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}x0-a\\ y0-b \end{bmatrix}+\begin{bmatrix}a\\ b \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix}

即平移(\Deltax(-a),\Deltay(-b)),旋转\Theta,再平移(-\Deltax,-\Deltay)

可以改为:\begin{bmatrix} cos\Theta ,sin\Theta ,0\\ -sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}\begin{bmatrix} x0-a\\ y0-b\\ 0 \end{bmatrix}+\begin{bmatrix} a\\ b\\ 1 \end{bmatrix}=\begin{bmatrix} x\\ y\\ 1 \end{bmatrix},或者

\begin{bmatrix} cos\Theta ,sin\Theta ,0\\ -sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}\begin{bmatrix} x0+\Delta x\\ y0+\Delta y\\ 0 \end{bmatrix}+\begin{bmatrix}-\Delta x\\ -\Delta y\\ 1 \end{bmatrix}=\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}

看上去,怪怪的,但不影响结果,有人习惯如下表达:

平移,(x0,y0,1)\begin{bmatrix}1 ,0 ,0\\ 0 ,1 ,0\\\Delta x,\Delta y, 1 \end{bmatrix},旋转

(x0,y0,1)\begin{bmatrix}1 ,0 ,0\\ 0 ,1 ,0\\\Delta x,\Delta y, 1 \end{bmatrix}*\begin{bmatrix} cos\Theta ,-sin\Theta ,0\\ sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix},再平移

(x0,y0,1)\begin{bmatrix}1 ,0 ,0\\ 0 ,1 ,0\\\Delta x,\Delta y, 1 \end{bmatrix}*\begin{bmatrix} cos\Theta ,-sin\Theta ,0\\ sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}\begin{bmatrix}1 ,0 ,0\\ 0 ,1 ,0\\-\Delta x,-\Delta y, 1 \end{bmatrix}=(x,y,1)

也有人喜欢如此:平移,\begin{bmatrix}1 ,0 ,\Delta x\\ 0 ,1 ,\Delta y\\0,0, 1 \end{bmatrix}\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix},旋转

\begin{bmatrix} cos\Theta ,sin\Theta ,0\\ -sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}\begin{bmatrix}1 ,0 ,\Delta x\\ 0 ,1 ,\Delta y\\0,0, 1 \end{bmatrix}\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix},再平移

\begin{bmatrix}1 ,0 ,-\Delta x\\ 0 ,1 ,-\Delta y\\0,0, 1 \end{bmatrix}\begin{bmatrix} cos\Theta ,sin\Theta ,0\\ -sin\Theta ,cos\Theta ,0\\0,0, 1 \end{bmatrix}\begin{bmatrix}1 ,0 ,\Delta x\\ 0 ,1 ,\Delta y\\0,0, 1 \end{bmatrix}\begin{bmatrix} x0\\ y0\\ 1 \end{bmatrix}=\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}

用的多了,习惯就好,关键是能解决问题,可能刚开始会排斥,毕竟现在流行矩阵运算,但你另辟蹊径,别人也不能多嘴舌,就如同这个\Theta,看你怎么定义,逆时针也可以定义为-\Theta,自己心里清楚就好。数学坐标系(笛卡尔坐标系)和屏幕坐标系也不同,这点心里也要清楚,人的脑袋很简单,有时候,很容易不清楚,就是被这个\Theta灌了迷魂汤。

强调一下,以上矩阵行列正负,形式变换花样繁多,但矩阵运算规则从未改变

有了上面理论的保驾护航,我们的图像旋转,已经成功大半了。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值