Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于插值方法的的二维图像缩放方法及其扩展

Quick Start

bash run.sh

基本介绍

图像采样理论

数学上,图像通常被视为一个 连续函数

$$f(x,y): \Omega \subset \mathbb{R}^2 \rightarrow \mathbb{R}^C$$

其中

  • $(x,y)$:连续坐标
  • $C$:通道数(1 或 3)
  • $f(x,y)$ 的“大小”并不是以像素数度量的
  • 它代表了同一个真实连续图像

在数学上,图像本身不存在“分辨率”的概念,只存在定义域大小。

当你把连续图像转换成数字图像时,你是对 (f(x,y)) 进行 离散采样

$$I[i, j] = f\left(\frac{i}{W-1} L_x, \frac{j}{H-1}L_y\right)$$

不同分辨率代表不同采样密度。

分辨率和图像缩放

$$ \text{Resolution}_x = \frac{W-1}{L_x}, \quad \text{Resolution}_y = \frac{H-1}{L_y}, \quad $$

  • $W,H$ are pixel counts.
  • $L_x, L_y$ are physical lengths

$$ \text{Resolution} = \sqrt{\frac{W-1}{L_x} \times \frac{H-1}{L_y}} $$

  • 如果放大图片的物理长度但是像素点的个数保持不变,分辨率会随着物理尺寸的增大而下降。
  • 因此,在保证分辨率不变的基本情形下,需要使用插值算法增加像素点的个数。

具体而言,图片缩放可以看成:

  • 图像的物理尺寸从 $(L_x, L_y)$ 变成了 $(L_x^{'},L_y^{'})$
  • 图像的数字特征为从一个离散网格 $(W_0, H_0)$ 采样恢复/推测原始连续函数 $f(x,y)$,然后在新的网格上重新取样 $(W_1, H_1)$

$$ \text{Discrete Image} \rightarrow \text{Interpolate } f(x,y) \rightarrow \text{Resample} $$

在这个过程中,需要保证分辨率不变:

$$ \frac{W_0-1}{L_x} = \frac{W_1-1}{L_x^{'}} \quad \frac{H_0-1}{L_y} = \frac{H_1-1}{L_y^{'}} $$

每个维度之间相互独立 对于图片的缩小,不需要计算额外的插值节点,但是需要做下采样

核心功能实现

我们需要实现一个自定义的图像缩放类,这个图像缩放类需要实现下面的功能:

  • 读入一张本地图片,解析成张量格式
  • 利用自主实现的若干插值算法(最近邻插值/双线性插值/双二次插值/双三次插值)
    • 具体来说,对于每张图像,可以被解析成一个 $(H, W, C)$ 的三维高阶张量(不考虑并行 batch 运算)
    • 对每一个通道分别做插值, Input: $(H_i, W_i)$
    • 因此,对于我们设计的插值积累,需要实现的一个接口是:
def scale(self, input_tensor, output_size):
    # input_tensor is a 2-D tensor which shape is $(H, W)$
    # output size is a tuple demonstrating the output size, which shape is $(H', W')$
    ...
    return output_tensor

$$ \text{scale}: \mathbb{R}^{H \times W} \to \mathbb{R}^{H' \times W'} $$

  • 输入:二维数组 ($I \in \mathbb{R}^{H\times W}$)
  • 输出:二维数组 ($I' \in \mathbb{R}^{H'\times W'}$)

Pipeline

  • OpenCV 读取一张图片,并且确定放大后图片的尺寸
  • 计算得到目标张量的 size
  • 调用 Scale 函数实现
  • 本地导出图片
  • 并且和原始的图片的直接拉伸进行比较

About

Official Repo for AI1807: Two-Dimensional Image Scaling Methods Based on Classical Interpolation Algorithms and Their Extensions

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages