当前位置: 首页 > news >正文

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

文章目录

  • 一、图像几何变换理论
  • 二、图像平移
    • 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.shapetranslated_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.lryc.cn/news/175692.html

相关文章:

  • 如何正确选择研究方向?如何实现论文创新?
  • Postgresql源码(113)表达式JIT计算简单分析
  • CMU15-213 课程笔记 04-Floating Point
  • DockerKubernetes ❀ Service下Port端口区分
  • 【C++】笔试训练(一)
  • 数据结构与算法之集合: Leetcode 349. 两个数组的交集 (Typescript版)
  • Unity 内存性能分析器 (Memory Profiler)
  • 前端携带Bearer Token
  • leetcode 周赛 364
  • 开机自启动Linux and windows
  • 科技云报道:大模型的阴面:无法忽视的安全隐忧
  • 2023年前端流行什么技术和框架了?
  • Nginx 背锅解析漏洞
  • AI与传统数据库 - ChatGPT风过之后 | 从Duet AI说开来
  • L1-032 Left-pad C++解法
  • Python 用列表实现模拟手机通讯录(简易版)
  • macOS使用官方安装包安装python
  • 如何重装Windows Mirosoft Store
  • 软考高级系统架构设计师系列论文真题七:基于构件的软件开发
  • git rebase 修改中间的commit
  • 登录业务实现 - token登录鉴权
  • 内存对齐--面试常问问题和笔试常考问题
  • 贪心算法-会议室问题
  • 单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用
  • 【VIM系列】cscope命令
  • Vue的自定义事件(Custom Events):实现组件间通信的强大工具
  • 简易实现通讯录(1.0)
  • CSS笔记——触发式动画Transition、主动式动画Animation、Transfrom 动画、CSS 3D 动画、阴影和滤镜样式
  • 软件测试之Web安全测试详解
  • MYSQL binlog