图像的降采样与升采样(二维插值)

转自:http://www.lofter.com/postentry?from=search&permalink=1cb3111d_6ee9587

1、先说说这两个词的概念:

降采样,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中 每行每列每隔k个点取一个点组成一幅图像。降采样很容易实现.

升采样,也即插值。对于图像来说即是二维插值。如果升采样系数为k,即在原图n与n+1两点之间插入k-1个点,使其构成k分。二维插值即在每行插完之后对于每列也进行插值。

插值的方法分为很多种,一般主要从时域和频域两个角度考虑。对于时域插值,最为简单的是线性插值。除此之外,Hermite插值,样条插值等等均可以从有关数值分析书中找到公式,直接代入运算即可。对于频域,根据傅里叶变换性质可知,在频域补零等价于时域插值。所以,可以通过在频域补零的多少实现插值运算。

2、实现

其实在matlab中自带升采样函数(upsample)和降采样函数(downsample),读者可以查找matlab的帮助文件详细了解这两个函数。在这里,我重新写如下:

%========================================================

%   Name: usample.m

%   功能:升采样

%   输入:采样图片 I, 升采样系数N

%   输出:采样后的图片Idown

%   author:gengjiwen    date:2015/5/10

%========================================================

function Iup = usample(I,N)

[row,col] = size(I);

upcol = col*N;

upcolnum = upcol - col;

uprow = row*N;

uprownum = uprow -row;

If = fft(fft(I).').';     %fft2变换

Ifrow = [If(:,1:col/2) zeros(row,upcolnum) If(:,col/2 +1:col)];   %水平方向中间插零

%补零之后,Ifrow为row*upcol

Ifcol = [Ifrow(1:row/2,:);zeros(uprownum,upcol);Ifrow(row/2 +1:row,:)];   %垂直方向补零

Iup = ifft2(Ifcol);

end

%========================================================

%   Name: dsample.m

%   功能:降采样

%   输入:采样图片 I, 降采样系数N

%   输出:采样后的图片Idown

%   author:gengjiwen    date:2015/5/10

%========================================================

function Idown = dsample(I,N)

[row,col] = size(I);

drow = round(row/N);

dcol = round(col/N);

Idown = zeros(drow,dcol);

p =1;

q =1;

for i = 1:N:row

for j = 1:N:col

Idown(p,q) = I(i,j);

q = q+1;

end

q =1;

p = p+1;

end

end

% ===========================================

% 测试升采样和降采样的程序

%  author:gengjiwen , date:2015/05/10

%  备注:测试完毕!

%============================================

clear;

close all;

I = imread('test1.jpg');

I = rgb2gray(I);

figure(1);

imagesc(I);

title('原图像');

% 图像降采样

figure;

for ii = 2:2:8

Idown = dsample(I,ii);

subplot(2,2,ii/2);

imagesc(Idown);

str = ['downsample at N = ' num2str(ii)];

title(str);

end

% 图像升采样

figure;

for ii = 2:2:8

Iup =usample(I,ii);

subplot(2,2,ii/2);

imagesc(abs(Iup));

str = ['upsample at N = ' num2str(ii)];

title(str);

end

测试结果如下:

3、结果分析

降采样没什么可说的,其实在matlab中可以很方便的用冒号运算符实现,具体可以查看下matlab自带函数downsample的实现。

对于升采样,这里用了频域方法实现。将原图像进行二维傅里叶变换,之后在变换后的中间补零插值,再反变换回时域。根据傅里叶变换性质可知,此时的时域插值核sinc函数的形式,对于二维,应是 二维sinc()函数。由于sinc函数的旁瓣比较大,故在升采样后的图像中会存在振铃现象。读者可以观察上面的实现结果图片。如果想减小这种情况,则可以对其进行频域加窗。

python升采样和插值_图像的降采样与升采样(二维插值)相关推荐

  1. 一篇文章带你搞定二维插值的 MATLAB 计算

    前面已经学习了二维插值的基本概念:一篇文章带你认识数学建模中的二维插值 本篇文章主要实现使用MATLAB进行二维插值计算 文章目录 一.网格节点的插值计算 二.散点数据的插值计算 1. 示例 1 2. ...

  2. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  3. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  4. 数据处理(一):python二维插值运算

    0 前言 结果展示:黑色的点是前期输入生成的,彩色是后期生成的,代表不同像素点的数值 1 代码 import numpy as np import matplotlib.pyplot as plt f ...

  5. python二维插值_python实现二维插值的三维显示

    本文实例为大家分享了二维插值的三维显示具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ 演示二维插值. "" ...

  6. 二维插值-MATLAB

    二维插值与MATLAB实例解析 一.插值节点为网格节点 二.插值节点为散乱节点 Addition: (1)学会查看matlab帮助文档 (2)matlab脚本类型 (3)matlab三维绘图函数 二维 ...

  7. 一篇文章带你认识数学建模中的二维插值

    本篇文章主要是认识数学建模中的二维插值 二维插值的具体计算可参考:一篇文章带你搞定二维插值的 MATLAB 计算 文章目录 一.引言 二.网格节点的概念 三.散乱节点的概念 四.二维插值的常见方法 1 ...

  8. 插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值

    插值:求过已知有限个数据点的近似函数. 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小. 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似 ...

  9. MATLAB一维插值和二维插值

    插值问题描述:已知一个函数上的若干点,但函数具体表达式未知,现在要利用已知的若干点求在其他点处的函数值,这个过程就是插值的过程. 1.一维插值 一维插值就是给出y=f(x)上的点(x1,y1),(x2 ...

最新文章

  1. C++内联函数学习总结
  2. 学习微服务服务消费者——Feign
  3. 服务器被bash服务占满_用bash脚本自动下载ftp服务器文件
  4. 李迟2021年4月知识总结
  5. 安装VMware Workstation 16 Pro 和 ubuntu-16.04.7-desktop-amd64.iso
  6. 与,或,非,异或进行位运算的总结
  7. 数据分析没有思路怎么办
  8. Win11截图键无法使用怎么办?Win11截图键无法使用的解决方法
  9. 华为手机计算机不能用,华为手机无法连接电脑(手机助手)怎么办,连接不上...
  10. Hive中变量的使用
  11. mysql Operator 学习
  12. NOI Online #2入门组
  13. 算法的浅论:算法前序
  14. zhuan 常用图像数据集:标注、检索
  15. 1.Kafka下载安装
  16. CTO与CIO选型数据中台的几大建议
  17. oracle 记录镜像文件,记录oracle 10g RMAN的一些新特征-介绍了镜像与备份集的区别...
  18. 关于NOKIA E71 播放视频文件(mp4等)的问题
  19. 袁国宝:滴滴如何给网约车司机们,系上温情的“安全带”?
  20. Zero date value prohibited问题Error attempting to get column ‘effective_date‘ from result set

热门文章

  1. GBase 8s synonym同义词实践
  2. h5首页加载慢_近期iOS打开H5页面非常慢的原因
  3. 使用springboot快速搭建支付宝当面付应用
  4. VS2008C#连接SQLserver2008示例
  5. Django框架学习(1) —— 环境搭建
  6. 2012年12月21日
  7. redis 作用和应用场景等总结篇
  8. 纯CSS3文字 渐变内发光投影效果
  9. 服务器系统重装后多出一个盘,服务器系统重装后多出一个盘
  10. 【最简单的python画折线图】半封装式代码画折线图,防止写重复代码