数字图像处理成长之路5:仿射变换(旋转)

今天学习affine transformation,这个变换充分体现了数学之美,怪不得有那么一句话,“科学中的皇后是数学”。

这个变换包含旋转,错切,翻转等,这里只通过学习旋转,来了解其中的共性。不同的变换只是核矩阵不同。

我们只来看看旋转,旋转是如何实现的,网上有关于旋转矩阵核的推导,很简单。
如:
http://ask.csdn.net/questions/218260

至于旋转的原理或者公式,网上也是很多,这里暂不多写。

这里写图片描述

这个是逆时针旋转了45度。

for (int i = 0; i < srcMat.cols ; i ++)
  for (int j = 0; j < srcMat.rows ; j ++)
    {//把图像坐标系转换成x, y坐标系
      x = i - x0;
      y = -(j - y0);
     //对x,y 坐标系中的点作旋转变换
      X =  x * cos(w) - y * sin(w);
      Y =  x * sin(w) + y * cos (w);
      //如果变换后的坐标不超出x, y坐标系的四周
      if ( -(srcMat.cols - x0 ) < X and
           X  < srcMat.cols - x0 and 
           -(srcMat.rows - y0) < Y and 
           Y < srcMat.rows - y0)
           {//把x,y坐标系还原成图像坐标系

              X = X + x0;
              //Y = Y-y0,恢复到第四象限
              //前面取负,让Y值变正
              Y = -(Y - y0);
              tmpMat.at<uchar>(Y, X) =
              srcMat.at<uchar>(j, i);
            }
        }

程序并不复杂,实现了绕中心点x0, y0的逆时针旋转。但是由于用的坐标系不同,需要进行变换,而变换这一块倒是容易让人想不明白。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆腐白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值