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

深度学习篇---矩阵的魔法

我们可以把乘以特殊矩阵想象成对一张图片或一个图形施加“魔法指令”——这些指令藏在矩阵里,乘上坐标向量后,图形就会按我们想要的方式变形。

下面我会从二维平面(2D)开始介绍,最后提一下三维(3D)。为了直观,我们用列向量表示一个点,变换后的新点为


1. 恒等矩阵(什么都不做)

就像乘以1一样,原封不动。占个位置,后面有用。


2. 缩放(Scale)——拉长或压扁

  • sx=2,sy=1:水平拉长一倍,垂直不变。

  • sx=0.5,sy=0.5:整体缩小到一半。

  • 若 sx=sy,是均匀缩放(像放大镜);若不等,叫非均匀缩放(像把正方形变成长方形)。


3. 旋转(Rotation)——绕原点转动

绕原点逆时针转 θ 角度:

例子:θ=90°(cos⁡=0,sin⁡=1)

点 (1,0)→ (0,1),确实逆时针转90度。

注意:这是绕原点旋转。如果想绕任意点旋转,需要先平移、再旋转、再平移回去(见齐次坐标部分)。


4. 对称(Reflection)——镜像翻转

对称可看作特殊缩放(负系数)。

  • 关于x轴对称(上下翻转):

(x,y)→(x,−y)

  • 关于y轴对称(左右翻转):

(x,y)→(−x,y)

  • 关于直线 y=x 对称(交换坐标):

(x,y)→(y,x)

  • 关于原点对称(中心对称):

相当于旋转180°。


5. 剪切(Shear)——让图形“倾斜”

像把一副扑克牌推歪,面积不变但形状变平行四边形。

  • 水平剪切(y不变,x随y线性增加):

x′=x+ky,y′=y

  • 垂直剪切(x不变,y随x线性增加):

x′=x,y′=kx+y

例子:单位正方形 (0,0),(1,0),(1,1),(0,1)经水平剪切 k=1k=1 后变为 (0,0),(1,0),(2,1),(1,1),变成一个斜的四边形。


6. 投影(Projection)——压扁到一条线或一个点

  • 投影到x轴(y变为0):

  • 投影到y轴

  • 投影到直线 y=x

(会丢失垂直方向的信息)


7. 错切与拉伸的组合——仿射变换

上面所有操作(旋转、缩放、对称、剪切)都是线性变换,可以用2×2矩阵表示,它们共同特点是:保持原点不动、直线映射为直线。

但现实中我们还需要平移(移动位置)。平移不是线性变换(因为 0⃗ 必须映射到 0⃗),于是引入齐次坐标:把二维点 (x,y) 写为 (x,y,1),用3×3矩阵:

左上2×2做线性变换,右边两列做平移。这样就能组合出任意仿射变换(旋转+平移 = 绕任意点旋转;缩放+平移 = 关于任意点缩放)。


8. 三维中的类似操作

概念完全一样,只是矩阵变成3×3(线性)或4×4(仿射+透视)。

  • 缩放:对角矩阵 diag(sx,sy,sz)

  • 旋转:绕x、y、z轴各有旋转矩阵(例如绕z轴旋转类似二维,但z不变)

  • 对称:关于xy平面等(z取负)

  • 剪切:例如 x′=x+ky,其他不变

  • 投影:从3D投影到2D(用于相机成像)


一个直观总结(重要性质)

  • 行列式

    • 行列式绝对值 = 面积(2D)或体积(3D)缩放倍数

    • 行列式为1 → 保面积(旋转、剪切)

    • 行列式为0 → 压扁到更低维(投影)

  • 正交矩阵(如旋转、反射):保持长度和角度不变,逆矩阵 = 转置

  • 可逆性:只要行列式不为0,变换可逆(可恢复原图)


实际应用小例子

  • 计算机图形学:一个3D模型乘上模型矩阵(缩放→旋转→平移)放到世界,再乘视图矩阵(相机位置),再乘投影矩阵(透视)变成屏幕2D。

  • 图像处理:旋转照片、水平翻转自拍(对称)。

  • 机器人运动学:每个关节的变换就是一个个矩阵相乘。

  • 数据增强(机器学习):随机对图片做剪切、旋转、缩放来增加训练样本。

http://www.jsqmd.com/news/664187/

相关文章:

  • 构建可持续迭代的 Agent:反馈闭环怎么做
  • AI 术语通俗词典:矩阵范数
  • 别再只会用QTcpSocket了!聊聊QAbstractSocket那些被忽略的实用信号与状态管理
  • Layui tab选项卡如何动态根据ID值进行程序化切换
  • UWPHook完整指南:轻松将Windows商店游戏整合到Steam平台
  • 别再为PS2手柄时序头疼了!STM32CubeIDE调试PS2通讯的3个实用技巧与避坑指南
  • Python篇---# -*- coding: utf-8 -*- 声明
  • STM32CubeMX配置CRC避坑指南:Modbus/RTU校验从‘跑不通’到‘一次过’
  • 手把手教你用51单片机驱动DS18B20测温(附完整代码与常见时序问题排查)
  • CSS如何实现根据滚动进度触发的过渡效果_配合JS修改类名触发transition
  • 终极指南:5个核心方案彻底优化AEUX插件连接体验
  • 5G NR时频结构解析:从SCS到无线帧的物理层设计
  • 开源项目突然崩溃?SITS2026紧急预警:这6类“幽灵依赖”正在 silently hijack 你的构建流程!
  • Python篇---#!/usr/bin/env python3开头
  • AI 术语通俗词典:范数
  • 深度学习篇---图像标号与实例分割标注
  • “这个PR能合吗?”——SITS2026专家现场演示:实时接入GitHub Actions的AI影响分析沙箱(限免通道将于2024Q3关闭)
  • AI 眼镜“百镜大战”正酣,巨头各施所长,谁能跨越“戴得上”到“离不开”分水岭?
  • 代码推荐已死?不——它正与生成模型在AST语义层深度共生(LLM+RAG+Graph Neural Recommender三体架构首曝)
  • Python文件管理自动化:用glob.iglob()处理海量文件,内存不爆的秘密
  • SQL插入数据时忽略错误行_使用错误日志表暂存失败条目
  • 为什么OpenAI、DeepMind、中科院脑智卓越中心同时缺席2026奇点大会主论坛?(意识伦理红线白皮书内部版泄露)
  • STM32F103C8T6 ADC采样率上不去?手把手教你调时钟树和TIM触发,从857k冲到1M
  • IDEA隐藏无关文件
  • 从“1+1=2”到“1+1=10”:程序员如何用Python模拟哥德巴赫猜想验证
  • STM32F103C8T6 HAL库驱动HC-SR04避坑指南:双通道输入捕获如何避免溢出和负值?
  • Linux系统管理员必备:getent命令在用户管理和网络排错中的实战技巧
  • ESP32开发环境搭建避坑实录:从Gitee镜像、子模块更新到串口权限那些“坑”
  • mysql行锁是如何实现的_mysql底层机制解析
  • 你还在人工Code Review生成代码?这8个回滚检测信号已被Netflix、字节、蚂蚁联合标注为P0风险——立即启用这1套Prometheus+eBPF实时检测规则集