上采样下采样

本文详细介绍了图像处理中的上下采样技术,包括下采样(如平均值、最大值滤波和卷积)和上采样(邻域插值、双线性、三次内插法与反卷积在CNN中的应用)。特别关注了反卷积在视觉化、FCN和GAN中的作用,以及不同插值方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像处理中的上采样和下采样


下采样

下采样即缩小图像,主要有两个目的:使得图像符合需要的大小;生成对应图像的缩略图。
下采样的原理很简单,比如对于一幅尺寸为MxN的图像,对其进行s倍下采样,即得到(M/s)x(N/s)尺寸的图像。这可以通过把原始图像划成sxs的窗口,使每个窗口内的图像变成一个像素,这个像素点的值可以是窗口内所有像素的均值或者最大值等等。另外我认为高斯滤波等卷积方式本身也是一种下采样。


上采样

上采样与下采样相反,其目的是放大图像。注意,它并不能带来更多关于该图像的信息,因此图像的质量会受到影响。
上采样的实现主要有两种思路。一种是内插值的方法,另一种是采用反卷积(也称转置卷积)的方法。

注:还有一种现在已经比较少用的方法也就是反池化,想了解的话可以看一下computer-vision笔记:反池化


插值方法

  1. 最邻近元法

    这种方法最简单,不需要计算,即在待求像素的四个邻像素中,选取距离待求像素最近的邻像素的灰度值赋给待求像素。

    最邻近元法

    如上图所示,新增在A区内的像素就用左上角的像素点来赋值,其余三个区域同理。
    虽然最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能会出现明显的锯齿状。
  2. 双线性插值法

    双线性插值法

    这种方法也很好理解,就是把原本四个像素点围成的新的区域中的灰度值变化视作线性的,然后根据插入点的位置,按照比例计算两次,得到最终要赋的值。

    看成线性按照比例

    这也是一种比较常用的插值方法。
  3. 三次内插法

    该方法是理论上最优的sinc函数(辛格函数)逼近,其数学表达式为:Sinc(x)=sin(x)xSinc(x)=sin(x)x
    待求像素的灰度值由其周围16个灰度值加权内插得到,如下图所示。

    三次内插法

    待求像素的灰度计算式如下:

    f(x,y)=f(i+u,j+v)=ABCf(x,y)=f(i+u,j+v)=ABC

    其中ABCABC的含义分别如下所示。

    各项表示

    三次内插法计算量比较大,但插值后的图像效果最好。

反卷积

反卷积通常用于如下几个方面:在CNN可视化处理中,可以通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;在FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;在GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。
为了方便理解和比较,我们将卷积和反卷积对照着看。
我们先来看卷积时使用3x3卷积核,且没有padding,strides为1时的情况。

卷积

反卷积


可以看到,由于卷积使用了no padding,那么对应的反卷积就要添加padding,反卷积的padding值可用padding = kernel_size - stride来计算。在上面的情况中,反卷积的padding就是3减1等于2。
前面说到反卷积也称转置卷积,这里说一下原因。
对于上面3x3卷积核的计算,我们可以通过这样一个4x16的稀疏矩阵来把卷积变成矩阵相乘Y=CXY=CX。

稀疏矩阵


注意到这里每一行有9个数值和7个0,也就是说在上面4x4的输入特征中,对每一个输出特征,有9个输入特征参与了计算。
如此,卷积的前向操作可以表示为输入和稀疏矩阵CC相乘。类似的,卷积的反向传播就是输出和CC的转置相乘。

注意:熟悉线性代数的读者应该会发现,要实现上面的运算,不应该是求矩阵的逆吗。信息论告诉我们,卷积是不可逆的,因此要注意,上面的两个CC指的并不是同一个,即用来进行反卷积的权重矩阵不一定来自于原卷积矩阵,但该权重矩阵的形状和转置后的原卷积矩阵完全相同。
此外,在一些深度学习的开源框架中,并不是通过这种转换方法来计算卷积的,因为这个转换会存在很多无用的0乘操作。

还有一个要注意的是,当卷积的stride为2时,要对输入矩阵中间补零才能完成反卷积,其实相当于进行了两次padding,一次内插补零,一次在外圈补零。

步长为2卷积

步长为2反卷积

### 数据上下采样的概念 在数据处理领域,上采样下采样是指调整数据集中样本数量的技术。对于不平衡的数据集而言,这些技术尤为重要。当某个类别的实例数远少于其他类别时,可以通过增加少数类的数量来平衡这种差异;反之,则可以减少多数类的数量。 #### 下采样 具体到操作层面,在执行下采样过程中会减少原始序列中的元素数目。这通常意味着按照一定比例或者固定步长去除部分数据点[^2]。例如,在MATLAB环境中实现这一过程可借助`downsample()`函数完成: ```matlab % MATLAB代码示例:对输入向量y进行四倍速率的降采样 y_down = downsample(y, 4); ``` 上述命令表示将以每隔三个位置保留一个的方式获取新的子序列作为输出结果 `y_down` ,从而实现了原信号频率降低的效果。 #### 上采样上采样则是指提高目标对象(如时间序列、图像等)的空间分辨率或时间密度的过程。它涉及创建额外的数据点以填补现有观测之间的空白区域。一种常见的做法是在相邻两点间插入新值,并利用插值算法估计其合理取值范围[^3]。比如双线性插值法就是基于最近邻域内的四个像素计算未知位置的颜色强度。 ```python import numpy as np from scipy import ndimage def upsample_image(image, scale_factor): """ 对给定图片按指定因子放大 """ zoomed_shape = tuple([int(dim * scale_factor) for dim in image.shape]) return ndimage.zoom(image, (zoomed_shape[0]/image.shape[0], zoomed_shape[1]/image.shape[1]), order=1) # Python代码示例:将二维数组形式的灰度图扩大两倍显示尺寸 upsampled_img = upsample_image(gray_scale_image, 2) ``` 此段Python脚本展示了如何运用SciPy库下的`ndimage.zoom()`方法来进行简单的图像放缩变换,其中参数`order=1`指示采用了一阶B-spline即线性插值策略。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值