六、图像的几何变换

文章目录

  • 前言
  • 一、镜像变换
  • 二、缩放变换


前言

在计算机视觉中,图像几何变换是指对图像进行平移、旋转、缩放、仿射变换和镜像变换等操作,以改变图像的位置、尺寸、形状或视角,而不改变图像的内容。这些变换在图像处理、模式识别、机器人视觉、医学影像处理等领域具有广泛的应用。通过图像几何变换,可以实现图像的校正、配准、增强和重建等功能,为后续的图像分析和理解提供了重要的基础。

一、镜像变换

水平镜像(水平翻转)
其原理是将图像沿着垂直中轴线(即图像的中心垂直线)进行翻转,从而实现图像内容在水平方向的镜像对称。
具体而言,水平镜像转换的原理可以描述如下:
1.中轴线确定:首先确定图像的中心垂直线,即图像的中轴线。对于宽度为 w,高度为 h 的图像,其中轴线位于 w/2 的位置处。
2.像素交换:对于图像中的每一个像素点 (x, y),将其水平位置进行镜像对称,即将其水平坐标从 x 调整为 w - x - 1。
3.生成新图像:将经过镜像对称处理的像素重新组合成新的图像。
4.水平镜像转换完成:生成的新图像即为原图像在水平方向上的镜像。
水平镜像转换是一种基本的图像处理操作,在许多图像处理任务中都有应用,如数据增强、图像增强、图像配准等。
我们看下图:
在这里插入图片描述
比如这是一张图片,每一格为1像素,图片宽度为W=10.,最底部我标记的0-9为图片的X坐标,那水平反转就是 w - x - 1。比如最后一列像素就是10-9-1 就是放到第0列中,依次类推 就实现了水平翻转。
垂直翻转同样的道理。
使用opencv实现图片的翻转:

# 水平翻转
flipped_image_horizontal = cv2.flip(image, 1)# 垂直翻转
flipped_image_vertical = cv2.flip(image, 0)# 同时在水平和垂直方向上翻转
flipped_image_both = cv2.flip(image, -1)

二、缩放变换

对图片进行缩放肯定要改变图像原有的尺寸,可能是变大或变小。也就是图片的像素增加或者是减少。比如我们把1000x800的图像,缩放为500x400的尺寸,可以算出我们会丢失很多的像素。那丢失哪些像素 计算机是怎么知道的,或者他如何决定要丢掉哪些像素呢?
在这里插入图片描述
比如上面第一张图 我们想缩小为第二张的尺寸。第一张图的A位置的像素是已知的。我们根据目标图像的尺寸和原始图像的尺寸,计算出目标图像中每个像素对应的原始图像中的位置。那A2的值是多少呢 这涉及到差值算法,差值算法
1.最近邻插值(Nearest Neighbor Interpolation):
最近邻插值算法是一种简单的插值算法,它将目标图像中每个像素的颜色值设置为原始图像中距离最近的像素的颜色值。这种方法计算简单,但可能会导致图像出现锯齿状的边缘。
2.双线性插值(Bilinear Interpolation):
双线性插值算法是一种常用的插值算法,它使用原始图像中最近的四个像素的颜色值进行加权平均,以估计目标图像中像素的颜色值。这种方法相对于最近邻插值具有更好的平滑效果。
3.双三次插值(Bicubic Interpolation):
双三次插值算法是一种更复杂的插值算法,它使用原始图像中最近的16个像素的颜色值进行加权平均,以估计目标图像中像素的颜色值。这种方法通常产生更加平滑的图像,但计算复杂度较高。
opencv默认使用双线差值的方式取处理的
就是通过双线性差值计算出新像素的值,通过像素最近的4个值通过下面公式计算而出
在这里插入图片描述
这里不做探讨,感兴趣的可以自己去找下资料研究。这样就可以确定像素点的新值,
opencv中图片缩放操作

# 读取图像
image = cv2.imread('input_image.jpg')# 指定缩放后的尺寸
width = 300  # 新图像宽度
height = 200  # 新图像高度# 使用cv2.resize()函数进行缩放操作
resized_image = cv2.resize(image, (width, height))# 显示原始图像和缩放后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更改WordPress作者存档链接author和用户名插件Change Author Link Structure

WordPress作者存档链接默认情况为/author/Administrator(用户名),为了防止用户名泄露,我们可以将其改为/author/1(用户ID),具体操作可参考『如何将WordPress作者存档链接中的用户名改为昵称或ID…

猪圈Pigsty-PG私有RDS集群搭建教程

博客 https://songxwn.com/Pigsty-PG-RDS/ 简介 Pigsty 是一个更好的本地自建且开源 RDS for PostgreSQL 替代,具有以下特点: 开箱即用的 PostgreSQL 发行版,深度整合地理、时序、分布式、图、向量、分词、AI等 150 余个扩展插件&#xff…

文件IO的lseek以及目录IO

文件IO之 lseek: 1. lseek off_t lseek(int fd, off_t offset, int whence); 功能: 重新设定文件描述符的偏移量 参数: fd:文件描述符 offset:偏移量 whence: SEEK_SET 文件开头 …

基于scrapy框架的单机爬虫与分布式爬虫

我们知道,对于scrapy框架来说,不仅可以单机构建复杂的爬虫项目,还可以通过简单的修改,将单机版爬虫改为分布式的,大大提高爬取效率。下面我就以一个简单的爬虫案例,介绍一下如何构建一个单机版的爬虫&#…

更快找到远程/自由工作的网站

不要使用Fiver或Upwork。 它们已经饱和了。 下面是10个更快找到远程/自由工作的网站: 1. Toptal 这个网站专门为熟练的自由职业者提供远程工作机会,如Shopify和Priceline等一流公司。 他们只接受软件开发、设计和金融等领域的顶级3%自由职业者。 htt…

2024-02-19(Flume)

1.flume中拦截器的作用:个人认为就是修改或者删除事件中的信息(处理一下事件)。 2.一些拦截器 Host Interceptor,Timestamp Interceptor,Static Interceptor,UUID Interceptor,Search and Rep…

C++集群聊天服务器 nginx+redis安装 笔记 (中)

一、nginx安装 nginx: download 下载nginx安装包 hehedalinux:~/package$ tar -zvxf nginx-1.24.0.tar.gz nginx-1.24.0/ nginx-1.24.0/auto/ nginx-1.24.0/conf/ nginx-1.24.0/contrib/ nginx-1.24.0/src/ nginx-1.24.0/configure nginx-1.24.0/LICENSE nginx-1.24.0/README…

PLC远程监控在制药行业的应用

PLC远程监控在制药行业的应用 制药行业是一个需要高度控制和精确性的行业,而PLC远程监控技术正是这种需求的完美解决方案。PLC远程监控技术是指将传感器、执行器和其他设备连接到PLC系统中,并使用网络和远程访问技术实现对设备的远程监控和控制。下面我…

HarmonyOS4.0系统性深入开发34栅格布局(GridRow/GridCol)

栅格布局(GridRow/GridCol) 概述 栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。主要优势包括: 提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态…

NAS系统折腾记 | TinyMediaManager刮削电影海报

搭建好了NAS系统和Emby Media Server,接下来就是怎样对下载好的电影/电视剧集等内容进行刮削来展示电影海报墙获得更好的效果了。实际上,Emby Server本身就内置了强大的元数据抓取功能,能够自动从互联网上抓取电影、电视剧的元数据和海报等信…

论UI的糟糕设计:以百度网盘为例

上面这一排鼠标一经过就会弹出来(不是点才弹出来),然后挡住你的各种操作, 弹出来时你就必须等它消失,卡一下才能操作。 在用户顺畅地操作内容时,经常就卡一下、卡一下、卡一下…… 1、比如鼠标从下到上&am…

基于YOLOv7算法和Widerface数据集的高精度实时人脸检测系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法和Widerface数据集的高精度实时人脸检测系统可用于日常生活中检测与定位人脸目标,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测…

【springboot+vue项目(十五)】基于Oauth2的SSO单点登录(二)vue-element-admin框架改造整合Oauth2.0

Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统框架,提供了丰富的组件和功能,可以帮助开发者快速搭建现代化的后台管理系统。 一、基本知识 (一)Vue-element-admin 的主要文件和目录 vue-element-admin/ |…

如何确定分库还是 分表?

分库分表 分库分表使用的场景不一样: 分表因为数据量比较大,导致事务执行缓慢;分库是因为单库的性能无法满足要求。 分片策略 1、垂直拆分 水平拆分 3 范围分片(range) 垂直水平拆分 4 如何解决数据查询问题&a…

【Jvm】性能调优(拓展)Jprofiler如何监控和解决死锁、内存泄露问题

文章目录 Jprofiler简介1.安装及IDEA集成Jprofiler2.如何监控并解决死锁3.如何监控及解决内存泄露(重点)4.总结5.后话 Jprofiler简介 Jprofilers是针对Java开发的性能分析工具(免费试用10天), 可以对Java程序的内存,CPU,线程,GC,锁等进行监控和分析, 1.安装及IDEA集成Jprofil…

车载软件架构 —— Adaptive AUTOSAR软件架构中时间同步、网络管理和软件更新策略

车载软件架构 —— Adaptive AUTOSAR软件架构中时间同步、网络管理和软件更新策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成…

解决用IPV6+DDNS访问UNRAID webui周期性失效的问题,smb不能访问的问题

我使用的unraid系统使用ddns(DDNSGO)绑定域名(阿里域名)与主机的ipv6地址进行远程访问,unraid是6.12.8。 遇到的问题是,配置当时是没问题的,但是过几天就会失效,无法通过域名访问we…

Maven高级(一)

文章目录 Maven高级(一)1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

扫码即可快速协作:草料二维码底部协作面板功能详解

功能介绍 在二维码上添加 底部协作面板 功能后 ,扫码后不仅可以阅读设备信息、产品资料等基本信息,还可以在二维码底部输入内容评论并他人快速协作,支持添加图文、语言、手写签名等操作。 底部协作面板是提供给组织内部成员快速协作的功能&…