图像尺寸调整:缩放矩阵如何改变像素坐标?

目录

一、前言

二、图像是如何表示的

三、什么是图像缩放

四、缩放矩阵是什么

五、缩放矩阵如何作用于坐标

六、为什么需要矩阵运算

七、图像缩放流程

八、放大示例

九、缩小示例

十、使用NumPy模拟缩放矩阵

十一、批量处理多个像素

十二、OpenCV实现图像缩放

十三、按照比例缩放

十四、为什么会出现锯齿

最近邻插值

双线性插值

双三次插值

十五、OpenCV指定插值方式

十六、深度学习中的应用

YOLO

ResNet

ViT

十七、缩放矩阵与仿射变换

十八、总结


一、前言

在计算机视觉、图像处理以及深度学习领域,经常需要对图片进行尺寸调整。

例如:

复制代码
图片压缩

缩略图生成

目标检测

图像增强

神经网络输入预处理

假设有一张图片:

复制代码
1920 × 1080

而模型要求输入:

复制代码
640 × 640

此时就需要进行:

复制代码
图像缩放(Image Scaling)

很多人认为:

复制代码
缩放图片

只是改变宽高

实际上在数学层面,图像缩放的本质是:

利用缩放矩阵(Scaling Matrix)重新计算每个像素的坐标位置。


二、图像是如何表示的

在计算机中:

图片本质上是一个矩阵。

例如:

复制代码
5 × 5 图像

可以表示为:

复制代码
[
  10 20 30 40 50
  15 25 35 45 55
  20 30 40 50 60
  25 35 45 55 65
  30 40 50 60 70
]

其中:

复制代码
每个元素

表示一个像素值

而每个像素都对应一个坐标:

复制代码
(x, y)

例如:

复制代码
左上角

(0,0)

右下角

(4,4)

三、什么是图像缩放

假设原始图片大小:

复制代码
100 × 100

目标尺寸:

复制代码
200 × 200

那么:

复制代码
图片被放大2倍

反之:

复制代码
200 × 200

↓

100 × 100

则属于:

复制代码
图片缩小

无论放大还是缩小,本质都是:

复制代码
重新计算像素坐标

四、缩放矩阵是什么

二维空间中的缩放矩阵:

复制代码
[
  Sx   0
   0  Sy
]

其中:

复制代码
Sx

X方向缩放比例

Sy

Y方向缩放比例

例如:

放大2倍:

复制代码
[
 2 0
 0 2
]

横向放大2倍:

纵向放大3倍:

复制代码
[
 2 0
 0 3
]

五、缩放矩阵如何作用于坐标

假设一个像素坐标:

复制代码
P

=

[
 10
 20
]

表示:

复制代码
x = 10

y = 20

缩放矩阵:

复制代码
[
 2 0
 0 2
]

计算:

复制代码
[
 2 0
 0 2
]

×

[
10
20
]

结果:

复制代码
[
20
40
]

说明:

复制代码
原坐标

(10,20)

↓

新坐标

(20,40)

图片放大了2倍。


六、为什么需要矩阵运算

如果图片有:

复制代码
1920 × 1080

像素数量:

复制代码
2073600

超过200万个像素。

如果逐个手工计算:

复制代码
效率极低

因此:

复制代码
矩阵乘法

成为图像变换的核心工具。


七、图像缩放流程


八、放大示例

假设原图坐标:

复制代码
(1,1)

(2,2)

(3,3)

缩放矩阵:

复制代码
[
 2 0
 0 2
]

计算后:

原坐标 新坐标
(1,1) (2,2)
(2,2) (4,4)
(3,3) (6,6)

可以看到:

复制代码
所有坐标扩大2倍

九、缩小示例

缩放矩阵:

复制代码
[
0.5  0
0    0.5
]

原坐标:

复制代码
(100,60)

计算:

复制代码
[
0.5 0
0 0.5
]

×

[
100
60
]

结果:

复制代码
[
50
30
]

说明:

复制代码
图片缩小一半

十、使用NumPy模拟缩放矩阵

python 复制代码
import numpy as np

point = np.array([
    [10],
    [20]
])

scale_matrix = np.array([
    [2,0],
    [0,2]
])

new_point = scale_matrix @ point

print(new_point)

输出:

复制代码
[[20]
 [40]]

十一、批量处理多个像素

多个坐标:

python 复制代码
import numpy as np

points = np.array([
    [1,2],
    [2,3],
    [3,4]
])

scale = 2

scaled_points = points * scale

print(scaled_points)

输出:

复制代码
[
 [2 4]
 [4 6]
 [6 8]
]

十二、OpenCV实现图像缩放

安装:

复制代码
pip install opencv-python

读取图片:

python 复制代码
import cv2

img = cv2.imread("test.jpg")

print(img.shape)

输出:

复制代码
(1080,1920,3)

表示:

复制代码
高1080

宽1920

RGB三通道

缩放图片:

python 复制代码
import cv2

img = cv2.imread("test.jpg")

resized = cv2.resize(
    img,
    (640,640)
)

cv2.imwrite(
    "result.jpg",
    resized
)

生成:

复制代码
640 × 640

新图片。


十三、按照比例缩放

例如:

复制代码
缩小50%

代码:

python 复制代码
import cv2

img = cv2.imread("test.jpg")

resized = cv2.resize(
    img,
    None,
    fx=0.5,
    fy=0.5
)

cv2.imwrite(
    "small.jpg",
    resized
)

其中:

复制代码
fx

横向缩放比例

fy

纵向缩放比例

十四、为什么会出现锯齿

理论上:

复制代码
坐标变换后

可能出现小数坐标

例如:

复制代码
(10,20)

↓

(15.5,30.5)

但是:

复制代码
像素位置必须是整数

因此需要:

复制代码
插值算法

计算像素值。


常见插值方法:

最近邻插值

复制代码
Nearest Neighbor

速度最快。


双线性插值

复制代码
Bilinear

最常用。


双三次插值

复制代码
Bicubic

效果更平滑。


十五、OpenCV指定插值方式

双线性插值:

python 复制代码
resized = cv2.resize(
    img,
    (640,640),
    interpolation=cv2.INTER_LINEAR
)

双三次插值:

python 复制代码
resized = cv2.resize(
    img,
    (640,640),
    interpolation=cv2.INTER_CUBIC
)

十六、深度学习中的应用

在训练神经网络时:

通常需要统一输入尺寸。

例如:

YOLO

复制代码
640 × 640

ResNet

复制代码
224 × 224

ViT

复制代码
224 × 224

因此:

复制代码
缩放矩阵

是计算机视觉最基础的变换之一

几乎所有视觉模型都会使用。


十七、缩放矩阵与仿射变换

图像缩放实际上属于:

复制代码
仿射变换

的一种。

常见仿射变换包括:

复制代码
缩放

旋转

平移

镜像

错切

其中:

复制代码
缩放矩阵

负责改变大小

旋转矩阵

负责改变方向

十八、总结

图像缩放看似简单,但背后涉及线性代数中的矩阵变换思想。

核心公式:

复制代码
新坐标

=

缩放矩阵

×

原坐标

缩放矩阵:

复制代码
[
 Sx 0
 0 Sy
]

其中:

复制代码
Sx

横向缩放比例

Sy

纵向缩放比例

在实际项目中:

复制代码
图像压缩

目标检测

图像分类

深度学习预处理

都离不开缩放矩阵。

可以这样理解:

复制代码
图像缩放

不是简单改变图片大小

而是在数学上

重新计算每一个像素的位置

而缩放矩阵,正是完成这一过程的核心工具。

相关推荐
IT_陈寒2 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
To_OC2 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
大模型真好玩4 小时前
什么是Loop Engineering?最通俗易懂的Loop Engineering核心概念
人工智能·agent·deepseek
叁两4 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
LaiYoung_4 小时前
🎁 送你一套超好用超实用的 FE AI-Coding Skills
前端·人工智能·开源
ZzT7 小时前
怎么做才不会被 AI 替代?
人工智能·程序员
鱼鱼不愚与7 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
道友可好7 小时前
从今天开始:你的第一个 Harness Engineering 实践
前端·人工智能·后端
小姜前线技术8 小时前
AI回答代码块高亮加一键复制
人工智能
洛阳泰山8 小时前
从 0 到 1.6K Star:一个 Java 开源项目的增长复盘
人工智能·后端·开源