精华内容
下载资源
问答
  • 图像降采样和升采样 Matlab 代码。 该代码实现了以2为因子的图像升采样和降采样功能。 降采样包括使用平滑滤波器(with using the averaging filter)和不使用平滑滤波器(without using the averaging filter)两种方法...
  • 图像的降采样与升采样(二维插值)转自:http://www.lofter.com/postentry?from=search&permalink=1cb3111d_6ee95871、先说说这两个词的概念:降采样,即是采样点数...升采样,也即插值。对于图像来说即是二维插值...

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

    转自: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函数的旁瓣比较大,故在升采样后的图像中会存在振铃现象。读者可以观察上面的实现结果图片。如果想减小这种情况,则可以对其进行频域加窗。

    展开全文
  • 图像降采样和升采样Matlab代码

    千次下载 热门讨论 2009-01-04 12:26:25
    该代码实现了以2为因子的图像升采样和降采样功能。 降采样包括使用平滑滤波器(with using the averaging filter)和不使用平滑滤波器(without using the averaging filter)两种方法。 升采样包括像素点直接复制...
  • ITK 升采样

    2019-07-10 15:57:24
    //函数化 升采样 重置大小 void Resize(ImageType::Pointer input,ImageType::Pointer src,ImageType::Pointer* dst) { std::cout <<"----升采样----"<< std::endl; typedef itk::ResampleImageFilter...
    //函数化    升采样 重置大小
    void Resize(ImageType::Pointer input,ImageType::Pointer src,ImageType::Pointer* dst)
    {
        std::cout <<"----升采样----"<< std::endl;
        typedef itk::ResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;
        ResampleImageFilterType::Pointer resample = ResampleImageFilterType::New();
        resample->SetInput(input);
    
        typedef itk::AffineTransform<double,2> TransformType;
        TransformType::Pointer transform = TransformType::New();
        resample->SetTransform(transform);
    
        typedef itk::NearestNeighborInterpolateImageFunction<ImageType,double> InterpolatorType;
        InterpolatorType::Pointer interpolator = InterpolatorType::New();
        resample->SetInterpolator(interpolator);
    
        resample->SetDefaultPixelValue(0);
        resample->SetSize(src->GetLargestPossibleRegion().GetSize());
        resample->SetOutputSpacing(src->GetSpacing());
        resample->SetOutputOrigin(src->GetOrigin());
    
        ImageType2D::DirectionType direction;
        direction.SetIdentity();
        resample->SetOutputDirection(direction);
        try
        {    
            resample->UpdateLargestPossibleRegion();
        }
        catch( itk::ExceptionObject & exp )
        {
            cerr << "Exception caught !" << std::endl;
            cerr << exp << std::endl;
        }
        *dst = resample->GetOutput();
    } 
    

     

     

     

     

    展开全文
  • permalink=1cb3111d_6ee95871、先说说这两个词的概念:降采样,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中每行每列每隔k个点取一个点组成一幅图像...如果升采样系数为k,即在原图n...

    转自: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

    测试结果如下:

    02189c92d13ce8b6e662b9050d37bedc.png

    7905dac95ba1327521501537d8683820.png

    e11bbec3754f639d9076eb4582459a68.png

    3、结果分析

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

    于升采样,这里用了频域方法实现。将原图像进行二维傅里叶变换,之后在变换后的中间补零插值,再反变换回时域。根据傅里叶变换性质可知,此时的时域插值核

    sinc函数的形式,对于二维,应是

    二维sinc()函数。由于sinc函数的旁瓣比较大,故在升采样后的图像中会存在振铃现象。读者可以观察上面的实现结果图片。如果想减小这种情况,则可

    以对其进行频域加窗。

    展开全文
  • 数字信号升采样

    2021-01-07 17:11:31
    数字信号的升采样处理

    前言

    虽然Audition等音频处理工具现在可以轻松实现音频信号的升降采样操作,但还是想亲手操作一下才能更深刻地体会其原理。

    理论部分数字信号处理书上写得很清楚,假如要升采样N倍,那就在原始信号每两个点之间补N-1零,原本有a个点的信号补零后变成了N*a个点,最后过一个低通滤波器就可以了。假如我们手中有一个采样率是8kHz的信号,根据采样定理信号中最大的频率成分应该是4kHz,无论对其升采样多少倍,信号中最大的频率成分依旧是4kHz。用8k采样频率打开原始信号,和用升采样后相应的采样频率打开升采样后的信号,听起来应该是一模一样的,所以低通滤波的截止频率定为原信号的采样频率的一半。
    采样频率为8kHz的音频
    对上个音频升采样所得音频
    可以看到,fs=8kHz升采样两倍到fs=16kHz,但4kHz以上的语谱图漆黑一片,因为低通滤波器滤掉了4kHz以上的频率成分。而4kHz以下的部分和原始信号完全一致,听起来也毫无差异。

    现在我们对一个fs=8kHz的信号升采样两倍到fs=16kHz。

    一、操作步骤

    1.设计低通滤波器

    用matlab的filterDesigner(老版本叫fdatool)功能设计一个低通滤波器。
    在这里插入图片描述

    响应类型选择低通,设计方法选择FIR滤波器,采样频率为16000Hz,通常滤波器的边缘无法做到极为锋利,所以会让出一定频率。通带频率定为3800Hz,阻带频率定为4000Hz(事实证明让通带阻带截止频率相等会报错),阻带衰减设为60dB其他参数默认即可。设计好的低通滤波器为158阶。之后点击目标——生成C文件——导出为双精度浮点数。这时就已经成功导出我们需要的低通滤波器的参数啦。

    在这里插入图片描述
    得到的参数如下:

    const int BL = 159;
    const real64_T B[159] = {
       0.001896059819653,  0.00820094837682,  0.01314470859597,  0.01066527577552,
      0.0009246408389606,-0.005814546012738,-0.002930262262176, 0.003349544159389,
       0.003146652916839, -0.00209518582678, -0.00309180989114, 0.001386488161517,
       0.003041700406133,-0.0009218026015368, -0.00304631268199,0.0005614333728956,
       0.003100614445479,-0.000237163275515,-0.003190847597665,-8.734993325528e-05,
       0.003304776236801, 0.000438069901197,-0.003423584634794,-0.0008263738009497,
       0.003529681299126, 0.001253489063053,-0.003613907436449,-0.001721095555101,
       0.003669424233881,  0.00223419572336,-0.003685347044084,-0.002796293474046,
       0.003644490863923, 0.003400850515065,-0.003535050920519,-0.004036535762699,
       0.003358135714028, 0.004706228835982,-0.003105187396083,-0.005414708112309,
       0.002751461301551,  0.00614239056269,-0.002294893565941,-0.006879896373887,
        0.00174033795586, 0.007643844089695,-0.001053136439596,-0.008413240337596,
      0.0002222421356464, 0.009170050479732,0.0007444754128455,-0.009939844775154,
      -0.001903906599081,  0.01067834643084, 0.003246395045302, -0.01140847271717,
      -0.004828736727151,  0.01210499508553, 0.006685006502788, -0.01276575968549,
      -0.008878236392024,  0.01338822341275,   0.0115077498069, -0.01396149611399,
       -0.01471635759473,  0.01448148698008,  0.01874197835546, -0.01494458490013,
       -0.02399975282865,  0.01534274377544,  0.03127230182775, -0.01567719726563,
       -0.04225313517261,  0.01594087625832,  0.06134526407379, -0.01612848443384,
        -0.1047044022092,   0.0162441542224,    0.317841161598,   0.4837154941549,
          0.317841161598,   0.0162441542224,  -0.1047044022092, -0.01612848443384,
        0.06134526407379,  0.01594087625832, -0.04225313517261, -0.01567719726563,
        0.03127230182775,  0.01534274377544, -0.02399975282865, -0.01494458490013,
        0.01874197835546,  0.01448148698008, -0.01471635759473, -0.01396149611399,
         0.0115077498069,  0.01338822341275,-0.008878236392024, -0.01276575968549,
       0.006685006502788,  0.01210499508553,-0.004828736727151, -0.01140847271717,
       0.003246395045302,  0.01067834643084,-0.001903906599081,-0.009939844775154,
      0.0007444754128455, 0.009170050479732,0.0002222421356464,-0.008413240337596,
      -0.001053136439596, 0.007643844089695,  0.00174033795586,-0.006879896373887,
      -0.002294893565941,  0.00614239056269, 0.002751461301551,-0.005414708112309,
      -0.003105187396083, 0.004706228835982, 0.003358135714028,-0.004036535762699,
      -0.003535050920519, 0.003400850515065, 0.003644490863923,-0.002796293474046,
      -0.003685347044084,  0.00223419572336, 0.003669424233881,-0.001721095555101,
      -0.003613907436449, 0.001253489063053, 0.003529681299126,-0.0008263738009497,
      -0.003423584634794, 0.000438069901197, 0.003304776236801,-8.734993325528e-05,
      -0.003190847597665,-0.000237163275515, 0.003100614445479,0.0005614333728956,
       -0.00304631268199,-0.0009218026015368, 0.003041700406133, 0.001386488161517,
       -0.00309180989114, -0.00209518582678, 0.003146652916839, 0.003349544159389,
      -0.002930262262176,-0.005814546012738,0.0009246408389606,  0.01066527577552,
        0.01314470859597,  0.00820094837682, 0.001896059819653
    };
    
    

    接下来我们只需要把补零后的信号和这个数组做卷积就可以了。当升采样两倍时只需要在每两个点之间补1个0,但是如果要升采样10倍每两个点就需要补9个0,这大幅增加了计算量,且和0进行乘法运算得到的还是0,相当于进行了无意义的计算。所以,我们可以只计算原始信号和滤波器的卷积,干脆不进行0和滤波器系数的计算。

    void main()
    {
        FILE* fp, * fr;
        char file_head[44];
        int i = 0, j = 0, k=0;
        double fs_8k[80] = { 0.0 }, fs_16k;
        short vi;
        fp = fopen("8k.wav", "rb");
        fread(file_head, sizeof(char), 44L, fp);//.wav文件开头44个数为文件头,包含采样率等信息
        fr = fopen("16k.txt", "w"); 
        for (i = 0; ; i++)
        {
          if( fread(&vi, sizeof(short), 1L, fp) != 1L)break;//每次从音频中读入一个数
          for (k = 79; k > 0; k--) fs_8k[k] = fs_8k[k - 1];
          fs_8k[0] = vi;//将最新读到的数存在数组原采样率数组的开头
                fs_16k = 0.0;
                for (j = 0; j < 80; j++)
                {
                    fs_16k += (fs_8k[j] * B[2 * j]);
                }
                fprintf(fr, "%lf\n", fs_16k);
    
                fs_16k = 0.0;
                for(j = 0; j < 79; j++)
                {
                    fs_16k += (fs_8k[j] * B[2 * j + 1]);
                }
                fprintf(fr, "%lf\n", fs_16k);
         }
    }
    

    在这里插入图片描述
    在这里插入图片描述
    可以看到用自己编写的代码进行升采样效果和用音频处理工具升采样效果一致。

    展开全文
  • 图像降采样和升采样

    2016-05-24 09:54:00
    permalink=1cb3111d_6ee9587 1、先说说这两个词的概念:降采样,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中每行每列每隔k个点取一个点组成一幅图像。...如果升采样系数为k,即...
  • 多速率信号处理降采样率与升采样率-多速率信号处理.pdf 多速率信号处理——主要介绍了用matlab来降低采样率与提高采样率
  • 图像的降采样与升采样笔记

    千次阅读 2016-03-30 14:03:38
    采样 下采样(subsampled)也称降采样(downsampled),...升采样(downsampled)也称或图像插值(interpolation)。对于图像来说即是二维插值。如果升采样系数为k,即在原图n与n+1两点之间插入k-1个点,使其构成k分。
  • 该代码实现了对于数字音频信号的四倍抽取和四倍升采样
  • 卷积网络升采样

    2019-02-25 11:36:44
    自从步入深度学习时代,我们越来越追求end2end,那么升采样能不能不用人为定义的权重,而让模型自己学习呢?答案是显然的,deconv就是解决方案之一。 deconv和插值的区别与联系: deconv和插值,都是通过周围像素...
  • 升采样代码8K~16K

    热门讨论 2011-07-26 10:38:56
    完成音频的升采样功能,完成由8k采样频率到16k采样频率的转换
  • 与抽样相对的过程称为插值或升采样。使用插值这个词不是特别合适,因为有一种从稀疏样本集x[k]重建模拟信号x(t)的方法也被称为插值。在抽取和插值这个语境中,插值仅指增加有效采样率的方法。对以频率燕采样的时间...
  • 图像升采样的实现详解

    千次阅读 2017-08-24 13:49:13
    此篇文章主要详细描述升采样的实现,基于OpenCV3.2.0&C++实现,升采样实现效果为将M*N的图像采样得到2M * 2N,算法的主要思想如下(图片截自UCF课件以及The Laplacian Pyramid as a Compact Image Code by PETER J....
  • 上篇文章中,我们学习了如何使用pandas库中的date_range()函数生成时间序列索引,而且我们知道我们可以生成不同频率的时间索引,比如按小时、...首先,简单解释什么是数据重采样,所谓数据重采样就是将数据原有的频...
  • 实例33:图像重采样(降和升采样) #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkSmartPointer.h> #include <vtkImageData.h...
  • 上篇文章中,我们学习了如何使用pandas库中的date_range()函数生成时间序列索引,而且我们...带着这个问题,我们本次就来学习下数据重采样的知识。 首先,简单解释什么是数据重采样,所谓数据重采样就是将数据原有...
  • 刚开始学习说话人识别,刚刚看了点shell脚本的东西,师兄就让我写一个脚本对数据进行升降采样处理,自己用了最简单的方式,递归遍历一遍文件夹的wav文件,然后对每一个wav文件执行升降采样命令,此为记录性学习,请...
  • 升采样 重置大小 //函数化 升采样 重置大小 void Resize(ImageType::Pointer input,ImageType::Pointer src,ImageType::Pointer* dst) { std::cout &amp;lt;&amp;lt;&quot;----升采样----&quot;...
  • 二、采用频域滤波的方法进行图像降采样和升采样   一、首先计算其频谱图,用到的库函数如下: CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = ...
  • 前提必备知识:学会使用pandas 和numpy 产生时间序列数据--在pandas数据分析中有讲解 1,数据重采样: 1.1 降采样: ...1.2 升采样: 与降采样相反,时间频率变高了。 1.2 代码演示: 降采样 impor...
  • 图像升采样方法

    2019-09-14 21:58:25
    的水平、垂直两个方向上的线性内插,即根据待采样点与周围4个邻点的距离确定相应的权重,从而计算出待采样点的像素值。 距离越大,权重越小,所以对于(0,0)和(1,0)这两点,要插值的点距离前者是dx,距离后者是1-...
  • 升采样 256—512 //函数化 升采样 重置大小 void resize(ImageType::Pointer input,ImageType::Pointer src,ImageType::Pointer* dst) { std::cout &amp;lt;&amp;lt;&quot;----升采样----&quot;&...
  • 图像的降采样与升采样(二维插值) 1、先说说这两个词的概念:降采样,即是采样点数减少。对于一幅N*M的图像来说,如果降采样系数为k,则即是在原图中每行每列每隔k个点取一个点组成一幅图像。降采样很容易实现....
  • 利用matlab数学工具,实现对音频信号的、降采样,并加入高斯噪声,滤波后分析性能
  • 1.VTK中的图像重采样实现 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元间距重新采样,以构成几何变换后的新图像。重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表...
  • 上篇文章中,我们学习了如何使用pandas库中的date_range()函数生成时间序列索引,而且我们知道我们可以生成不同频率的时间索引,比如按小时、...首先,简单解释什么是数据重采样,所谓数据重采样就是将数据原有的频...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 329
精华内容 131
关键字:

升采样