图像上采样和图像下采样

#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

原文地址:https://www.cnblogs.com/zhanjiahui/p/11643544.html

时间: 2024-08-29 08:52:43

图像上采样和图像下采样的相关文章

非下采样Contourlet(NSCT)变换

顾名思义,NSCT变换核心是Contourlet,即关于边缘的变换. 所谓非下采样是基于频域的,根据个人理解,这就相当于,对某一图像而言,首先设定一个频率阈值,然后通过滤波器筛选出大于等于这个阈值频率的图像(当然这不是一次性得筛选过程,而是迭代使用非下采样二通道带通滤波器的过程),具体过程见下面的图1. 这时,如果对空域.频域.时域不太了解的话,就又是一团浆糊.关于这三个概念可以参照<图像处理与识别学习小结><数字图像处理3--空间域,时域,频域的理解>两篇博文. 再说回NSCT变

批处理人脸检测区域的保存和下采样

花了一晚上时间,终于解决了检测到的人脸区域的保存和下采样,成果如下: 1.可以批处理一个文件夹下的所有图像: 2.利用opencv进行人脸的检测: 3.对检测到的人脸区域进行保存: 4.对人脸图像32*32的下采样保存. 源代码: #include "cv.h" #include "highgui.h" #include <stdio.h> using namespace cv; #include<iostream> #include<

狄拉克下采样

Dirac sampling.狄拉克下采样. <An edge-guided image interpolation algorithm via directional filtering and data fusion> The downsampling process considered in this paper, through which an LR image is generated from the corresponding HR image, is ideal Dirac

c# PictureBox 的图像上使用鼠标画矩形框

C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现.当鼠标键按下时开始画框,鼠标键抬起时画框结束. Point start; //画框的起始点 Point end,//画框的结束点bool blnDraw;//判断是否绘制Rectangel rect; 鼠标按下响应 private void PictureBox1_MouseDown(object sender, MouseEventArgs e) {

CKEditor去掉超链接和高级的方法,及上传和图像对调位置

项目中用不到超链接和高级,去掉的方法就是在config.js里加入 config.removeDialogTabs = 'image:advanced;image:Link'; 上传和图像对调位置:要修改这个目录下的plugins/image/dialogs/image.js 文件,文件代码虽然很多,但都会有解决的办法的.可以Ctrl+F搜一下Upload,这个就是上传图片的代码,整段复制到contents:[]里面去,记得是放在第一个位置,则就把上传图片就放到第一位置了.

暗通道优先的图像去雾算法(下)

书接上文 http://blog.csdn.net/baimafujinji/article/details/27206237 我们已经了解了暗通道图像去雾算法的基本原理,下面我们来编程实现,然后对结果再做一些讨论. 上述代码中调用了几个函数,限于篇幅这里仅给出其中的暗通道处理函数,其余函数读者可以尝试自己写写看,当然其中最关键的就是暗通道处理函数,这也是算法的核心内容. 另外,代码里我们使用了导向滤波函数,导向滤波代码来自何恺明博士,读者可以访问他的网页获得源码,已经论文的原文,链接如下: h

PHP 使用GD库生成验证码 在图像上绘制汉字

PHP 并不仅限于创建 HTML 输出, 它也可以创建和处理包括 GIF, PNG, JPEG, WBMP 以及 XPM 在内的多种格式的图像. 更加方便的是,PHP 可以直接将图像数据流输出到浏览器. 要想在 PHP 中使用图像处理功能,你需要连带 GD 库一起来编译 PHP. GD 库和 PHP 可能需要其他的库, 这取决于你要处理的图像格式. 你可以使用 PHP 中的图像函数来获取下列格式图像的大小: JPEG, GIF, PNG, SWF, TIFF 和 JPEG2000.如果联合 ex

Mac上的尖端图像查看器—EdgeView2,装机必备神器!

在Mac上一直以来有这样一个问题,那么就是看图片无法翻页,自带的文件管理器太差了,不够直观.那么有没有办法解决这个问题的呢?当然有,今天小编就给大家带来的一款Mac上的尖端图像查看器EdgeView2,它能轻松帮我们解决这个问题.快跟小编一起来看看EdgeView2的强大功能吧! ---图像查看器 -支持JPG,GIF,BMP,psD,TIFF,RAW(DNG)和PDF等图像文件支持主要的存档格式,如ZIP,RAR,CBZ,CBR,7zip,ALZ等.可以提取加密的存档文件可以在归档中读取归档文

图像上对的算术运算

1.图像加法 可以用函数cv2.add()将两幅图像进行加法运算,当然也可以直接使用numpy. res=img1+img2.两幅图像的大小,类型必须一致,或者第二个,图像可以使一个简单的标量值. 注意:OpenCV 中的加法与 Numpy 的加法是有所不同的.OpenCV 的加法 是一种饱和操作,而 Numpy 的加法是一种模操作. x = np.uint8([250]) y = np.uint8([10]) print cv2.add(x,y) # 250+10 = 260 => 255 [