计算机是如何旋转一张图像的?

作者: ck2016 | 来源:发表于2016-10-26 14:16 被阅读0次

例子

旋转.png

在 iOS 旋转一张图片只需一句代码

imageView.transform = CGAffineTransformMakeRotation(β)

这句代码背后的原理是什么?

原理

我们知道图像是由很多个像素组成的(假设是1万个),那么旋转一张图像就可以理解为旋转这1万个像素,对每个像素都旋转同样的角度,那么整张图像就发生旋转了。

对1万个像素旋转同样的角度,那么只要明白对1个像素是怎么旋转的,那么来个for循环,对剩下的像素都做同样的操作就可以了。

怎么旋转一个像素

一个像素在图像中有(x, y)坐标值,看下图,像素从B点转到A点。A点到原点的距离是R,然后两个角度分别是α,β


图1.png

还记得三角函数吧,旋转要用到,站在A点 (xa, ya) 的角度,可以写出下面两个三角函数式,叫式子1

xa = R * cos(α + β)
ya = R * sin(α + β)

接着用和差公式展开,得到下面的式子2,先暂时放着。

xa = R * cosα * cosβ - R * sinα * sinβ
ya = R * sinα * cosβ + R * cosα * sinβ

然后站在B点 (xb, yb) 的角度,也可以写出两个式子,叫式子3

xb = R * cosα
yb = R * sinα

上面没问题吧,接下来要发生高能反应了,观察式子2和式子3,把式子3代入到式子2中,把式子2中的 (R cosα) 替换为 xb,(R sinα) 替换为 yb,然后就得到了下面的式子4

xa = xb * cosβ - yb * sinβ
ya = yb * cosβ + xb * sinβ

大功告成,观察上式就得到了 (xb, yb) 旋转 β 角度到达 (xa, ya) 的公式了。
那么对1万个像素点都代入这公式,图像就发生旋转了,旋转动画就是 β 随着时间改变,比如把 β 从 0 增加 360 度,就旋转了一圈。

实际

上面只是原理,在实际应用中,还有一定差距,B 图像旋转到 A 图像并不是从 B 图坐标计算到 A 图坐标的,而是从 A 图向 B 图计算,逆过来的,因为按照上面的原理计算到 A 图会产生很多图像空洞,就是有像素点算不到的地方,逆过来计算,然后加上灰度插值算法(最近邻插值,双线性插值等等)最终完成旋转。

我用C++写了个图像旋转实验程序(查看

上面复杂的计算过程iOS都帮你封装好了,最终浓缩为一句代码

imageView.transform = CGAffineTransformMakeRotation(β)

相关文章

  • 计算机是如何旋转一张图像的?

    例子 在 iOS 旋转一张图片只需一句代码 这句代码背后的原理是什么? 原理 我们知道图像是由很多个像素组成的(假...

  • 零基础学PS穿插技能,穿插效果图文教程

    一、首先选择一张建筑素材放进PS里。 二、将顺时针选择90°图像旋转,【图像】-【图像旋转】,然后将建筑素材图层双...

  • 二进制数是如何进行运算的?

    二进制数是如何进行运算的? 最小的计算机系统由那些部分构成? 计算机是如何存储图像的? 存储在计算机中的图像使用两...

  • Coffe time

    特征提取对于图像处理而言是很重要的图像操作,一张图片是光的信息在平面上的成像,如何让计算机从一连串的0和1中得到图...

  • CV 1st Opening && NN structure

    计算机视觉 物理:光学 生物学: 生物是如何分析图像的 数学 计算机 算法和程序 图像识别最近很火 (识别猫狗等)...

  • NLP中数据增强的综述大全

    与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的。这是因为图像的一些简单操作,如将图像旋转...

  • 图像撕裂问题及处理方法

    什么是图像撕裂? 即一张图出现了错位的现象,如下图: 那图像撕裂是如何形成的? 1. 图像的显示过程 图像 -> ...

  • 数字图像处理中的基础概念

    上图就是一张数字图像。一张图像在计算机中有以下一些概念。 1.采样,量化,灰度 我们眼睛所能看到的物理世界中的图像...

  • 2.Flutter绘制原理图

    2.图像在计算机上是如何显示出来的? 首先,你需要知道,我们在屏幕上可以看到的所有内容都是计算机绘制出来的图像。 ...

  • leetcode 48.图像旋转 及LCP 2. 黑白方格画

    48.图像旋转给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像...

网友评论

    本文标题:计算机是如何旋转一张图像的?

    本文链接:https://www.haomeiwen.com/subject/loiyyttx.html