图像上采样和图像下采样
#1. 图像下采样和上采样的概念#
无论是图像的上采样还是下采样都可以使用matlab中的imresize函数来实现,而这些操作在使用到图像金字塔的算法中,必然是不可或缺的操作步骤。需要指出的是,当我们对一幅图像先下采样再上采样回原尺寸,得到的结果就是原图像的低频成分了。
下面简要介绍2者的概念。
1.1 图像下采样
图像下采样(subsampled)可以通俗地理解成缩小图像,又称为降采样(downsampled)。其目的有两个:1)使得图像符合显示区域的大小;2)生成对应图像的缩略图。
##1.2 图像上采样 ##
图像上采样(upsampling)就是放大图像,也可以将之称为图像插值(interpolating),其主要目的是放大原图,从而使得图像可以显示在更高分辨率的显示设备上。
#2 . 原理#
2.1 下采样原理
为了说清下采样,我们举个例子。假设我们有一幅图像Img,其大小为M*N,并且我们想对该图像进行s倍下采样,即使图像缩小s倍,这里要在长宽上同时缩小s倍。那么最终得到的下采样图像(结果图像)的大小就为(M/s)×(N/s)。至于究竟如何使得图像转为(M/s)×(N/s)大小的,这里提供2种方法。如下:
img = imread('lena.tif');
[height,width,~] =size(img);
% 使用2种方法进行下采样
sub_1 = img(1:2:end,1:2:end)
sub_2 = imresize(img,[height/2,width/2],'bilinear');
2.2 上采样原理
图像上采样几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
具体来说,因为图像上采样是放大图像的,那么该过程必然会产生一些像素点,而这些像素点原本是不存在的。这样就引出了一个问题,这些新的像素点的像素值应该如何确定?内插值算法就是为了计算这些新生像素点的像素值而存在的。
在文献《图像插值技术综述》中简略的将插值算法分为传统插值、 基于边缘的插值和基于区域的插值3类。
接下来就分别简要叙述一下这3类算法。
2.2.1 传统插值算法###
最经典的插值方法有最近邻插值、双线性插值、双三次插值,为了克服传统插值的平滑效应,又出现了基于边缘的图像插值算法和基于对象的图像插值算法。
####最近邻插值####
最近邻插值是取采样点周围四个相邻像素点中距离最近的一个邻点的灰度值作为该点灰度值的方法。最近邻插值算法速度最快,但会产生明显锯齿和马赛克现象。
####双线性插值####
双线性插值利用周围四个邻点的灰度值在两个方向上做线性插值得到采样点的灰度值。这种方法在很大程度上消除了锯齿现象,但在边缘上变得较为模糊
####三线性插值####
双三次插值不仅考虑四个邻点灰度值,还考虑各邻点间的灰度值变化率的影响。是双线性插值的改进算法。和前两种经典插值方法相比,可以取得较好的插值效果。但仍具有低通滤波性,会损失插值图像的高频部分,因而使图像边缘模糊。
2.2.2 基于边缘的图像插值算法###
传统的插值方法虽然方法简单快速,但由于它们具有低通滤波的作用,往往造成图像边缘轮廓模糊。针对传统方法的优缺点,不同的学者提出了很多基于图像边缘的插值方法。这类插值方法的基本观点是:在非边缘区域,用传统的图像插值方法效果已经很好,且处理速度快、计算量小,因而在非边缘区域采用传统的插值方法;而在图像的边缘区域,采用特殊的插值方法,以增强边缘,有效保存了图像的细节。
2.2.1 基于区域的图像插值算法###
首先将原始低分辨率图像分割成不同区域,然后将插值点映射到低分辨率图像, 判断其所属区域, 最后根据插值点的邻域像素设计不同的插值公式, 计算插值点的值。
原文链接:https://blog.csdn.net/Chaolei3/article/details/80225756