Python图像处理-----几何变换

news2024/11/19 7:43:42

文章目录

  • 一、图像几何变换理论
  • 二、图像平移
    • 2.1 使用数学公式的实现方式为:
    • 2.2 使用矩阵实现的方式为
    • 2.3 使用opencv
  • 三、图像缩放
    • 3.1 用数学式子表示为公式(a为缩放系数):
    • 3.2 用矩阵表示如公式所示:

一、图像几何变换理论

图像几何变换不改变图像的像素值,在图像平面上进行像素变换。适当的几
何变换可以最大程度地消除由于成像角度、透视关系乃至镜头自身原因所造成的
几何失真所产生的负面影响。几何变换常常作为图像处理应用的预处理步骤,是
图像归一化的核心工作之一[1]。
一个几何变换需要两部分运算:

  • 空间变换:包括平移、缩放、旋转和正平行投影等,需要用它来表示输
    出图像与输入图像之间的像素映射关系。
  • 灰度插值算法:按照这种变换关系进行计算,输出图像的像素可能被映
    射到输入图像的非整数坐标上[2]。

图像几何变换在变换过程中会建立一种原图像像素与变换后图像像素之间的映射关系,通过这种关系,能够从一方的像素计算出另一方的像素的坐标位置。通常将图像坐标映射到输出的过程称作向前映射,反之,将输出图像映射到输入的过程称作向后映射。向后映射在实践中使用较多,原因是能够避免使用向前映射中出现映射不完全和映射重叠的问题。

对于数字图像而言,像素的坐标是离散型非负整数,但是在进行变换的过程
中有可能产生浮点坐标值。这在图像处理中是一个无效的坐标。为了解决这个问
题需要用到插值算法。常见算法如下:

  • 最近邻插值
  • 双线性插值
  • 双立方插值

图像变换是建立在矩阵运算基础上,通过矩阵运算可以很快找到对应关系。绍常见的图像几何变换,包括图形平移、图像缩放、图像旋转、图像镜像、图像仿射、图像透视等。

二、图像平移

图像平移是将图像中的所有像素点按照给定的平移量进行水平或垂直方向上的移动。假设原始像素的位置坐标为(x0,y0),经过平移量(△x,△y)后,坐标变为(x1, y1),如图所示:
在这里插入图片描述
用数学式子表示为公式,△x 和△y 称为平移量:

x 1 = x 0 + Δ x \mathrm{x}_{1}=\mathrm{x}_{0}+\Delta \mathrm{x} x1=x0+Δx
y 1 = y 0 + Δ y \mathrm{y}_{1}=\mathrm{y}_{0}+\Delta \mathrm{y} y1=y0+Δy

2.1 使用数学公式的实现方式为:

def translate_img(img, move_y, move_x):
    h, w, c = img.shape
    translated_img = np.zeros((h, w, c), dtype=np.uint8)
    for i in range(h):
        for j in range(w):
            if i >= move_y and j >= move_x:
                translated_img[i, j] = img[i - move_y, j - move_x]
    return translated_img

2.2 使用矩阵实现的方式为

用矩阵表示如公式所示:

[ x 1 y 1 1 ] = [ x 0 y 0 1 ] [ 1 0 0 0 1 0 Δ x Δ y

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

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

相关文章

Docker ---- network中的命令详解

最近一直在使用docker,记录一些遇到的问题。 问题1:在搭建ealsticsearch与kibana时运行成功后第二次想运行出错了或者访问不了? 因为两个启动的容器是被互相隔离的,没有启用网络的互相通信不了。 问题2:怎么查看自己…

Kafka 运维必懂:从原理到调优,看完秒变大佬

1 Kafka 概述 Kafka 起初是 由 LinkedIn 公司采用 Scala 语言开发的一个多分区、多副本且基于 ZooKeeper 协调的分布式消息系统,现已被捐献给 Apache 基金会。 目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流…

左神高阶提升班5(贪心尝试、范围上的尝试模型

目录 【案例1 贪心尝试】 【题目描述】 【思路解析】 【代码实现】 【案例2 范围上的尝试模型】 【题目描述】 【思路解析】 【代码实现】 【案例3 范围上的尝试模型】 【题目描述】 【思路解析】 【代码实现】 【案例4 从左至右上尝试的模型 范围上的尝试模型…

ATTCK红队评估实战靶场二

描述 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。本次红队环境主要Access Token利用、WMI利用、域漏洞利用SMB relay,EWS relay,PTT(PTC),MS14-068,GPP…

Spring学习笔记10 JdbcTemplate

Spring学习笔记9 SpringIOC注解式开发_biubiubiu0706的博客-CSDN博客 JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装,简化JDBC代码. 新建模块spring-jdbctemplate 引入依赖 <dependencies><!--Spring Context依赖--><dependency><groupId>…

直播软件App开发:10个关键步骤,从零到一掌握

欢迎来到本文&#xff0c;我将为您解析直播软件App开发的关键步骤&#xff0c;帮助您从零开始掌握这一领域。作为该主题领域的专家&#xff0c;我将为您分享十个重要的步骤&#xff0c;带您实现直播软件App的开发目标。 步骤一&#xff1a;市场调研与需求分析 在直播软件App开…

购物新时尚RFID自助结账

购物已经变得更加简单和方便了&#xff0c;归功于RFID自助结账。别再排队等收银员了&#xff0c;让我们来看看这个酷炫的新方式。 RFID是什么&#xff1f;RFID就是那些小电子标签&#xff0c;它们能够让物品自动被识别。每个商品都有一个这样的标签&#xff0c;而RFID读卡器就…

Ansys Zemax | 如何设计光谱仪——实际应用

光谱学是一种无创性技术&#xff0c;是研究组织、等离子体和材料的最强大工具之一。 本文介绍了如何使用市售的光学元件来实现透镜-光栅-透镜&#xff08;LGL&#xff09;光谱仪。进行光谱仪的设置&#xff0c;并对其设计进行改进和优化。&#xff08;联系我们获取文章附件&…

品牌新闻稿大纲怎么写?建议收藏

一篇品牌新闻稿的大纲就犹如是全篇的骨架&#xff0c;骨架搭建好&#xff0c;然后再慢慢填充新鲜血液。品牌新闻稿的大纲亦是全文的写作方向&#xff0c;写好新闻稿大纲才能进行下一步撰写&#xff0c;写好新闻稿大纲你的稿件就离成功不远了。品牌新闻稿大纲怎么写&#xff1f;…

Tomcat中文路径目录

一、问题描述 linux环境下tomcat发布了包含中文名字的页面和文件&#xff0c;浏览器访问报404&#xff0c;非中文页面没有问题&#xff1b;本人为RP设计的原型图发布&#xff0c;其中包含了大量的中文文件和路径 二、解决步骤 第一步&#xff0c;设置tomcat&#xff0c;配置…

数据结构——快排与归并

排序算法 前言一、快速排序hoare版本挖坑法前后指针版本快速排序优化&#xff1a;快速排序非递归快速排序的特性总结&#xff1a; 二、归并排序基本思想&#xff1a;归并排序的特性总结&#xff1a; 总结 前言 重要的事说三遍&#xff01; 学习&#xff01;学习&#xff01;学…

能把西瓜塞进口袋吗?详解Java数据类型与变量

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、数据类型二、变量1、整型变量Ⅰ、整型变量的初始化Ⅱ、长整型变量Ⅲ、短整型变量 2、字节型变量3、浮点型变量Ⅰ、双精度浮…

支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答

很多投资者都知道&#xff0c;Renko图表和普通日本烛台都会采用相同的交易信号&#xff0c;即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现&#xff0c;且在蜡烛图交易中颇受欢迎。对于Renko图表而言…

串口数据太多,接收不完。Arduino修改串口缓冲区大小的办法

和网上搜到修改的方法不太一样&#xff0c;可能是版本不一样&#xff0c;我的方法供大家参考。arduino的串口缓冲区_Arduino修改串口缓冲区大小的办法 找到Serial.begin(115200);的定义&#xff0c; 串口收发代码示例 #include <Arduino.h> void setup() {// initial…

二叉树题目:翻转等价二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;翻转等价二叉树 出处&#xff1a;951. 翻转等价二叉树 难度 4 级 题目描述 要求 对于二叉树&#xff0c;我们可以定义如下翻转操作&#xff1a;选…

【app篇】写个简单的BLE调试app,练练手,同时为后续调试ESP32 BLE做个支持

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-09-25 ❤️❤️ 本篇更新记录 2023-09-25 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

5、Nacos服务注册服务端源码分析(四)之NotifyCenter

上篇我们讲server端处理服务注册源码时&#xff0c;遇到了一个关键类NotifyCenter&#xff0c;本篇就主要来分析下这个类。 NotifyCenter 这个类所在包&#xff1a;nacos-common /*** Unified Event Notify Center.*/通过类注释可以看出来这个类是一个统一的事件通知中心&am…

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法&#xff0c;我们把构造方法和析构方法这两个方法分开来讲&#xff1a; 1、构造方法 构造方法存在于每个声明的类中&#xff0c;主要作用是执行一些初始化任务。如果类中没有直接声明构造方法&#xff0c;那么类会默认地生成一个没…

仿网吧游戏菜单-超好用

GG软件菜单(X64)仿网吧菜单: https://url75.ctfile.com/f/1834175-943877085-2d844a?p6775 (访问密码: 6775)

如何将前后端分离的项目部署在服务器上

宝塔Linux部署&#xff1a; 因为要部署前端我们先下个nigx Tomcat,下载这个只是为了java&#xff0c;它里面包含java的 前端 在去添加站点&#xff0c;域名暂时是自己的公网 然后打开新建的站点&#xff0c;把里面的文件全删掉&#xff0c;再把自己的前端dist里的文件全选拖…