【每天学点AI】实战仿射变换在人工智能图像处理中的应用

01 引言

想象一下,当你拿起手机拍摄一张风景照时,由于角度或设备本身的限制,照片可能会有点歪斜或者变形。这时候,你是否希望有一种方法可以简单地"拉直"这张照片,让它看起来更加完美?或者,在构建虚拟现实(VR)和增强现实(AR)的世界时,如何让虚拟的东西自然地融入真实环境中?这些都可以靠仿射变换实现。

仿射变换不仅限于修复和美化静态图像,它还广泛应用于计算机视觉、机器人导航、医学影像分析等多个高科技领域。比如:

  • 计算机图形学:在计算机图形学中,仿射变换用于图像和模型的变换,如旋转、缩放和倾斜,以实现更丰富的视觉效果。

  • 机器人技术:在机器人技术中,仿射变换用于路径规划和运动变换,帮助机器人在空间中导航。

  • 医疗成像:在医疗成像领域,仿射变换用于图像配准,将不同时间或不同模态的图像对齐,以便进行比较、分析或融合。

  • 遥感图像处理:在遥感图像处理中,仿射变换用于对齐不同来源或不同时间拍摄的图像,以便进行比较、分析或融合。

  • 增强现实:在增强现实技术中,仿射变换用于将虚拟图像与现实世界对齐,以实现更加自然和无缝的交互体验。

02 概念解答

什么是仿射变换?

简单来说,就像是把图片或者图形旋转、拉伸、缩放和移动,但是有个特点,就是它不会让图形的形状变得奇奇怪怪,比如直线经过仿射变换后还是直线,角度和平行关系也都保持不变。

想象一下,你有一张纸,上面画着一些图案。现在,你想把这些图案换个方向,或者让它们变大变小,或者把整个图案挪到纸的另一个位置。仿射变换就是帮你实现这些变化的数学工具。它就像是一套规则,告诉你怎么通过一些简单的操作,让图案按照你想要的方式变化,但不会扭曲图案的形状。

接下来,我们以仿射变换中的**"旋转"**为例,看一下具体的操作步骤。

03 操作步骤

打开华清远见人工智能虚拟仿真本地服务管理平台,点击启动,服务启动一次即可。

进入到人工智能虚拟仿真系统,单击"图像旋转",进入实验。

步骤一:图片输入

首先,导入一张原始图片,可以用平台默认的预设图片,也可以自定义输入图片。

步骤二:单点旋转

这一步要操作的是

1.将旋转点平移到原点。

2.应用旋转矩阵进行旋转。

3.将旋转后的点移回原来的位置。

这样可以将任意点的旋转问题简化为原点旋转问题,便于计算。(具体的计算过程在人工智能在线实验平台手册中查看)

步骤三:图片旋转

明白了单个点的旋转过程之后,其实图像旋转也很好理解,就是将图像里的每个像素点都带入仿射变换矩阵里,从而得到旋转后的新坐标。在OpenCV中,要得到仿射变换矩阵可以使用cv2.getRotationMatrix2D(),通过这个函数即可直接获取到上面的旋转矩阵,该函数需要接收的参数为:

Center:表示旋转的中心点,是一个二维的坐标点(x,y)

Angle:表示旋转的角度

Scale:表示缩放比例,可以通过该参数调整图像相对于原始图像的大小变化

所以在这一步填入两个参数:即要给图像旋转的角度(angle)和要缩放的比例(scale),根据这两个数据,求出旋转之后的坐标,就可以进行整个图像的旋转。

这里可能会有一个问题,由于三角函数的值是小数,那么其乘积也会是小数,虽然OpenCV中会对其进行取整操作,但是像素点旋转之后的取整结果也有可能重合,这样就会导致可能会在旋转的过程中丢失-部分原始的像素信息。并且如果使用了scale参数进行图像的缩放的话,当图像放大时,比如一个10*10的图像放大成20*20,图像由100个像素点变成400个像素点,那么多余的300个像素点是怎么来的?而当图像缩小时,比如一个20*20的图像缩小为10*10的图像,需要丢掉300个像素点,那到底要怎么丢才能保证图像还能是一个正常的图像?因此我们需要一种方法来帮我们计算旋转后的图像中每一个像素点所对应的像素值,从而保证图像的完整性,这种方法就叫做插值法。

步骤四:插值方法

这一步可以看到平台有五种插值方法:

  • 最近邻插值:目标像素点的像素值与对应的原图像像素值相同。

  • 双线性插 :利用原图中四个真实像素点的值来决定目标图中的一个像素点的值。

  • 像素区域插值:缩小图像时取平均值,放大图像时使用最近邻或双线性插值。

  • 双三次插值:需要原图像中近邻的16个点来加权。

  • Lanczos插值:需要原图像周围的64个像素点,使用不同的权重函数。

通过这几种方式可以解决图像缩放或者旋转等操作时,由于像素之间的间隔不一致而导致的信息丢失和图像质量下降的问题。具体的每种方法计算方法,可在元宇宙实验平台操作手册中查看。

步骤五:边缘填充

为什么要填充边缘呢?我们以下图为例。

可以看到,左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了,同时,右图的四个顶点区域其实是什么都没有的,因此我们需要对空出来的区域进行一个填充。右图就是对空出来的区域进行了像素值为(0,0,0)的填充,也就是黑色像素值的填充。除此之外,后续的一些图像处理方式也会用到边缘填充,平台介绍了五个常用的边缘填充方法。

  • 边界复制:复制边界像素值。

  • 边界反射:根据原图边缘进行反射。

  • 边界反射101:反射边缘像素点,但方式不同。

  • 边界常数:填充指定的常数值,默认为0。

  • 边界包裹:特殊类型的边界处理。

步骤六:图片输出

点击验证,如显示校验成功,即代表逻辑无误,验证按钮与校验成功界面如下图所示。

点击运行,可以实现功能运行,并显示结果输出,如下图所示。点击某张图片可放大查看效果。

以上就是一个完整的图像旋转操作过程,仿射变换中的图像旋转在图像识别应用场景中主要解决图像因拍摄角度不同而导致的方向不一致问题,通过旋转图像使其与标准方向对齐,确保了识别算法能够准确地识别和分析图像内容,不受角度的影响,从而提高了识别系统的准确性和鲁棒性。

仿射变换不只是图像处理中的一个关键技术,它也是计算机视觉领域的重要组成部分。因此,如果你对图像的几何变换感兴趣,想要深入了解其原理和应用,我们的Python+图像处理OpenCV课程就能帮到你。

我们的课程会带你从基础开始,学习如何用Python编程,怎么用OpenCV处理图像,还会手把手带你实战OpenCV车牌识别项目。重要的是,我们的课程还提供元宇宙人工智能在线实 验平台,让你能在一个模拟的环境中,边学边练,高效学习。自由探索,尝试不同的算法,看看它们对图像有什么影响,这对理解图像增强的原理和应用特别有帮助。

后台私信雯雯老师,一起学习人工智能OpenCV~!

✅5年时间打造,元宇宙人工智能在线实验平台

✅30天趣玩趣学,算法原理+代码实现+项目实战

✅200余讲课程,边学边练,在线答疑

相关推荐
救救孩子把1 小时前
Mac上本地部署DeepSeek并使用Ollama提供API与Chatbox交互
人工智能·macos·deepseek
CodeClimb1 小时前
【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
gloomyfish2 小时前
OpenCV4.8 开发实战系列专栏之 30 - OpenCV中的自定义滤波器
图像处理·人工智能·深度学习·opencv·计算机视觉
又在吃鱼2 小时前
DeepseekR1 满血版腾讯云限免
人工智能·算法
Bruce_Liuxiaowei2 小时前
《基于Python与DashScope的智能语音合成工具开发》
开发语言·python·ai·dashscope
帅次2 小时前
高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
人工智能·深度学习·生成对抗网络·语言模型·文心一言·ollama·deepseek
程序猿小柒2 小时前
4.Python字符串和列表:字符串输入、字符串输出、下标和切片、字符串常见函数、列表(list)、列表的循环遍历、列表的增删改查、列表的嵌套、列表的切片
开发语言·python
扫地僧0093 小时前
第18章 不可变对象设计模式(Java高并发编程详解:多线程与系统设计)
java·python·设计模式
倔强的石头1063 小时前
蓝耘智算平台搭载DeepSeek R1模型:高效环境配置全攻略
人工智能·aigc·deepseek
睡不着还睡不醒3 小时前
anaconda中可以import cv2,但是notebook中cv2 module not found
python·opencv·计算机视觉