精华内容
参与话题
问答
  • 语音信号处理MATLAB实现

    千次阅读 多人点赞 2018-11-06 20:33:51
    matlab语音信号处理的一段代码 涉及到的函数sound()函数audioread()函数 sound函数的输入参量是音频数据向量、采样频率和转换位数。 也可以自己写些声音数据。下面的声音声调和频率有关,长度和数据长度有关: ...

    matlab语音信号处理的一段代码

    涉及到的函数sound()函数audioread()函数

    sound函数的输入参量是音频数据向量、采样频率和转换位数。
    也可以自己写些声音数据。下面的声音声调和频率有关,长度和数据长度有关:
    例如:
    sound(sin(2*pi*25*(1:4000)/100));

    响两声就是:
    sound(sin(2*pi*25*(1:4000)/100));
    pause(1);
    sound(sin(2*pi*25*(1:4000)/100));
    MATLAB也自带了很多声音:
    %鸟声
    load chirp
    sound(y,Fs)
    %锣声
    load gong
    sound(y,Fs)
    %哈里路亚

    MATLAB里函数audioread的使用格式:

    [y,Fs]=audioread('D:\MATLAB\work\noisymusic.wav');

    sound(y,Fs);

    还涉及到数字信号处理的一部分信号处理的知识,这里只是简单的用低通滤波器来进行处理,可以发现滤波的效果并不好

    
    [y,fs]=audioread('D:\matlab\work\voice.mp3');
    sound(y,fs)      % 回放语音信号
    n=length(y)  %选取变换的点数 
    y_p=fft(y,n);      %对n点进行傅里叶变换到频域
    f=fs*(0:n/2-1)/n;   % 对应点的频率
    figure(1)
    subplot(2,1,1);
    plot(y);                    %语音信号的时域波形图
    title('原始语音信号采样后时域波形');
    xlabel('时间轴')
    ylabel('幅值 A')
    subplot(2,1,2);
    plot(f,abs(y_p(1:n/2)));     %语音信号的频谱图
    title('原始语音信号采样后频谱图');
    xlabel('频率Hz');
    ylabel('频率幅值');
    %对音频信号产生噪声
      L=length(y)        %计算音频信号的长度
      noise=0.1*randn(L,2);  %产生等长度的随机噪声信号(这里的噪声的大小取决于随机函数的幅度倍数)
      y_z=y+noise;        %将两个信号叠加成一个新的信号——加噪声处理   
      pause(5)
      sound(y_z,fs)
    %对加噪后的语音信号进行分析
    n=length(y);  %选取变换的点数 
    y_zp=fft(y_z,n);      %对n点进行傅里叶变换到频域
    f=fs*(0:n/2-1)/n;   % 对应点的频率
    figure(2)
    subplot(2,1,1);
    plot(y_z);                    %加噪语音信号的时域波形图
    title('加噪语音信号时域波形');
    xlabel('时间轴')
    ylabel('幅值 A')
    subplot(2,1,2);
    plot(f,abs(y_zp(1:n/2)));     %加噪语音信号的频谱图
    title('加噪语音信号频谱图');
    xlabel('频率Hz');
    ylabel('频率幅值');
    %对加噪的语音信号进行去噪程序如下:
    fp=1500;fc=1700;As=100;Ap=1;
    %(以上为低通滤波器的性能指标)
    wc=2*pi*fc/fs; wp=2*pi*fp/fs;
    wdel=wc-wp;
    beta=0.112*(As-8.7);
    N=ceil((As-8)/2.285/wdel);
    wn= kaiser(N+1,beta);
    ws=(wp+wc)/2/pi;
    b=fir1(N,ws,wn);
    figure(3);
    freqz(b,1);
    title('低通滤波器的幅频图');
    xlabel('频率/hz');
    ylabel('幅度/db');
    %(此前为低通滤波器设计阶段)——接下来为去除噪声信号的程序——
    x=fftfilt(b,y_z);
    X=fft(x,n);
    figure(4);
    subplot(2,2,1);plot(f,abs(y_zp(1:n/2)));
    title('滤波前信号的频谱');
    subplot(2,2,2);plot(abs(X));
    title('滤波后信号频谱');
    subplot(2,2,3);plot(y_z);
    title('滤波前信号的波形')
    subplot(2,2,4);plot(x);
    title('滤波后信号的波形')
    pause(5);
    sound(x,fs)  %回放滤波后的音频

     

    展开全文
  • 利用MATLAB实现图片切换动画效果详解

    万次阅读 多人点赞 2018-03-15 16:59:51
    介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB的高级图形设计,具体的函数及命令文中会详细介绍。本文先逐步介绍实现思路及代码细节,最后附上...

    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB的高级图形设计,具体的函数及命令文中会详细介绍。本文先逐步介绍实现思路及代码细节,最后附上完整代码。

    1. 前言

           MATLAB中为数据可视化提供了全面系统的功能函数,据此可以绘制出许多形象生动的精美图像。同时MATLAB的句柄图形为用户提供了强有力的工具,可以很方便地对图形的每个可能方面进行控制,这在需要设计GUI的场合用处很大。刚接触时看到许多用MATLAB制作出炫丽的仿真动画不明觉厉,在大学的MATLAB编程课里也经常有编写一个图片切换动画的作业或课设。这里写一个有几幅图片轮流切换不同效果的程序,为此提供一个参考思路,希望对大家有所启发。

    2. MATLAB动画制作

           本节介绍MATLAB中动画制作的常用方式,对原理比较熟悉的读者可直接跳至第3节。众所周知动画其实是很多张图片的以一定时间间隔的逐帧切换,一个简单直接的想法当然就是下面代码中方式了。首先读取一张图片,通过for循环逐步扩大要显示图片的索引范围,达到逐步放大图片的效果。

    I=imread('image.jpg');%读图
    [x,y,z]=size(I);%尺寸
    while 1
    for i=1:100
       imshow(I(1:x/100*i,1:y/100*i,:));%逐渐放大显示
    end
    end

                                                                                                图2.1 显示效果图

           上述代码有点粗糙,运行过程中随着图片的放大窗口也在不断抖动。这其实跟imshow( )函数有关,每次调用它显示一张图片系统就会自动新创建一个窗口,窗口的大小是根据要显示图片的大小自动缩放的,上面的for循环中不断调用imshow( )而图片的大小是不断变大的,显示窗口自然也跟着变化。

           其实MATLAB为动画制作提供了三种实现方式:质点动画、电影动画、程序动画。质点动画是最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作;电影动画首先会保存一系列的图形数据,然后按照一定的顺序像电影一样的播放;程序动画是在图形窗口中按照一定的算法连续擦除和重绘图形对象。下面逐个简单演示一下

    2.1 质点动画

           质点动画由comet、comet3函数产生质点动画,分别对应二维和三维坐标下的质点。首先求解出质点完整的运动轨迹坐标x,y(三维时还有z),将x,y作为输入参数使用comet或comet3直接绘制动点。

     

    调用格式 调用说明
    comet(y) 显示质点绕着向量y的动画轨迹运动(二维)
    comet(x,y) 显示质点在横轴、纵轴方向的运动随向量x,y的动画轨迹(二维)
    comet(x,y,p)  效果与上一个相同,额外定义轨迹尾巴线的长度p*length(y),p介于0,1之间,默认为0.1

    comet3函数的使用方法与comet相似。

    实例代码如下:

    clf;  
    clear;  
    grid on;
    
    vx = 100*cos(1/4*pi);  
    vy = 100*sin(1/4*pi);  
    t = 0:0.02:15;  
    dx = vx*t;  
    dy = vy*t-9.8*t.^2/2;  
    comet(dx, dy);

    效果如图2.1.1所示

     

     

                                                                                               图2.1.1 质点动画效果图

    2.2 电影动画

           电影动画和电影的制作有点相似,实际可以看出是一个先“拍”再“播”的过程,即捕捉将要构成动画帧的图像逐个存到一个大矩阵中,然后播放这个大矩阵的数据。

    基本步骤:
      1、调用moviein函数初始化内存,创建一个足够大的矩阵,用于存储构成每一帧图像的数据。
      2、利用getframe抓取当前画面(即每帧图像),返回的数据用于构成动画矩阵。
      3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认只播放一次。

    getframe与movie函数调用格式见表2.2.1及表2.2.2:getframe函数可以捕捉动画帧,并保存到矩阵中。

    表2.2.1 getframe函数用法
    调用格式 调用说明
    f=getframe 从当前图形框中得到动画帧
    f = getframe(h) 从图形句柄h中得到动画帧
    f=getframe(h,rect) 从图形句柄h的指定区域rect中得到动画帧

    当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的用法有:

    表2.2.2 movie函数用法
    调用格式 调用说明
    movie(M) 将矩阵M中的动画帧播放一次
    movie(M, n) 将矩阵M中的动画帧播放n次
    movie(M,n,fps) 将矩阵M中的动画帧以每秒fps帧的速度播放n次

    实例:旋转的山峰动画

    clc; clear;  
       
    % peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。  
    % 参数为30,得到的X、Y、Z为30*30的矩阵。  
    [X, Y, Z] = peaks(30);  
    % surf绘制三维曲面图  
    surf(X,Y,Z);  
       
    axis([-3,3,-3,3,-10,10]);  
    % 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象  
    axis off;  
    shading interp;   
    colormap(hot);  
    
    M = moviein(20);% 建立一个20列的大矩阵    
    for i = 1:20    
       view(-37.5+24*(i-1),30);% 改变视点     
       M(i) = getframe;% 将图形保存到M矩阵   
    end  
    
    movie(M,2);% 播放画面2次

    运行结果如图2.2.1所示

     

     

                                                                                              图2.2.1 电影动画实例

    2.3 程序动画

           在MATLAB中把用于数据可视和界面制作的基本绘图要素称为句柄图形对象,每个图形对象有相应的属性值,例如线条Line对象就有颜色、位置等属性。可以改变图形对象的属性值,重绘图形对象,从而创建程序动画。其基本思路是:首先新建一个图形窗口,再循环内逐渐改变图形对象的相应属性值,并使用drawnow函数更新当前图形,整个循环就会表现出变化的动画效果。

    实例代码如下

    clear;
    clc;
    %% 新建图形窗口并设置初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
         [800 800 360 360],'name','图片切换动画效果');
     movegui(hFigure,'center');%设置居中
     %设置坐标轴属性
     hAxes=axes('Visible','off','units','normalized','position',[0 0 1 1]);
     
    %% 在图形窗口中显示图片 
     Im=imread('image.jpg');
     hIm=imshow(Im);
     [x,y,z]=size(Im);
    %% 修改属性并重绘
    for i=1:100
    I=Im(1:x/100*i,1:y/100*i,:);%逐渐放大显示
    set(hIm,'CData',I);
    drawnow;
    end

            代码5-8行新建图形窗口并为窗口中的对象设置初始属性,可以理解为给后面显示图像提供一个自定义的环境。首先第5行figure函数用于Figure图形窗口的创建,括号中参数设置相应属性,其中'menubar','none'表示禁用菜单栏;‘NumberTitle’,‘off’表示图形标题中不显示图形编号;‘Position’,'[800 800 360 360]'表示设置图形窗口的位置与大小,格式为[左 底 宽 高];‘Name’,'图片切换动画效果',表示设置图形窗口的标题。

           第7行设置图形窗口在居中位置。第9行axes函数用于Axes坐标对象的创建,即在当前图形窗口中新建一个坐标轴,括号里面参数设置上与figure格式相似,即设置坐标轴不可见、计量单位为常规、绘图区域的位置和大小设为[0 0 1 1]([左 底 宽 高])。

          第12-13行为读入图片,并在上面设置的坐标中显示图片,hIm为image(图形)对象的句柄,可通过句柄对该对象进行操作。

          第16-20行是在for循环中修改image(图形)对象的CData属性,并重绘图形从而实现动画的。具体的第18行中,set就是一个用于设置一般对象属性的函数,第一个参数hIm为图形句柄用于指定对哪个对象进行操作,这里就是image对象了;后面‘CData’,‘I’是指当前要显示的图像数据设置为矩阵I。整句就是指对hIm对象设置其要显示的图像这一属性为I。第19行drawnow就是将属性改变了的图形显示出来。

    实现的效果如图2.3.1所示

                                                                                      图2.3.1 程序动画效果

    3. 图片切换效果制作

           经过前面动画制作原理的介绍,这节就正式说说开头那个效果的实现了,为了便于编程实现(电影动画方式需先存后播编程稍显繁琐)这里采用程序动画的制作方式。首先需要准备几张长方形图片,为了方便后面处理其大小尺寸应该一致,即几张图像有相同长宽,并与接下来编写的M文件放在同一文件夹下。新建一个M文件命名为imageswitch.m,我们后面的编程都在该文件下进行。

    3.1 效果一实现

           如图3.1.1所示,将长方形图片做一个简单划分(这里我的图片尺寸为1920*1200),以宽度的大小为边长在中间掏出一个正方形,就是图中两条蓝色线条分割的中间部分,那么两条线的位置就是(1920-1200)/2和1920-(1920-1200)/2也就是360,和1560,如此一来这张图片就分成了左右两个长条和中间正方形区域了。

                                                                                              图3.1.1 分割图片

           现在一步步从头开始编写程序吧,首先实现的是第二幅图片的左边长条由顶部向下移动逐渐覆盖原图片的左边长条,同时右边的长条也逐渐被覆盖不过是由底部向上移动的。在程序中这一过程其实是一个图片矩阵中一部分元素逐渐被另一矩阵中元素所替换的过程。说白了图片的存储和处理都是以矩阵的形式,图3.1那张图片就是一个1920*1200*3的三维矩阵,左边长条的移动就是横坐标范围在1-360,纵坐标范围为1-1200的所有元素逐渐由第二张图数据矩阵的相同范围上的对应元素所赋值的过程了。我们看一段代码理解一下。

    function imageswitch1()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/100;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
    end

           代码中第1-19行是新建图形窗口并对图形对象设置属性值为后面动画制作提供一个好的“环境”,在2.3节中已经详细介绍这里就不再赘述了。21-30行就是重点了,21行是设置一个赋值的范围跨度,值越大后面动画进行的速度就越快;22行的Length就是小长条的宽,为了方便后面用到;整个动画的实现在for循环中进行,第26行Im是将要显示的矩阵而后面的I2是下一张图片的数据矩阵,在第12行Im已经被赋值为第一张图片的数据矩阵I1了,现在要做的就是随着for循环的进行i的值逐渐增大长条逐渐被赋值了。22行语句如下

    Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);

          可以看到第二维和第三维的范围两边矩阵是相同的,都分别是1:Length、:,即第二维索引范围是1到Length(小长条的宽),第三维索引取全部范围(第三维可认为是对色彩的设定,“:”表示取索引全部范围,就可以认为是保留色彩了,实际还得理解下RGB图像的存储方式哦)。第一维范围为1到i,随i的增大越来越多的区域被I2中x-i+1到x范围的I2覆盖。同理第23行也是逐渐覆盖原有图像右边长条,所以这是第二维的范围应该是y-Length+1到y,而右边的长条下一张图片的那一部分是向下逐渐覆盖的,故第一维两个矩阵的索引范围与左边的相反。

           第24行将image对象的CData属性设置为赋值后的Im,即显示的图像是新的Im。第25行用drawnow函数重绘图形窗口,就会显示新的一帧。最终以上代码运行的动画效果如图3.1.2所示

                                                                                               图3.1.2 长条移动演示

           将中间正方形区域平均分成上下两部分,上部分区域由下一幅图片相应部分向右移动覆盖,下部分由下一幅图片相应部分向左移动覆盖,效果一的完整效果就是图3.1.3所示的

                                                                                          图3.1.3 效果一的完整效果

           这只要在上面实现长条的代码23-24间加上以下两行代码其原理与长条移动相同,只不过这时的索引范围需要有所改变上层范围为1到x/2,即上半部分,第二维Im是从Length+1(正方形开始的地方)至Length+i(随i的增大逐渐覆盖这个正方形宽度范围)被I2中最右边部分开始的像素部分取代,而第二行正好覆盖的方向相反。

    Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
    Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);

           效果一的完整代码如下,新建到imageswitch2.m文件中即可实现图3.1.3的效果

    function imageswitch2()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    
    end

             同样可以将覆盖的方向改变,如取与上面相反的覆盖方向就可以实现又一种切换效果了。

    3.2 缩放效果制作

           对于中间的正方形区域可以设计一个缩放的效果,如图3.2.1所示。

                                                                                             图3.2.1 缩放演示效果

     

    这时对正方形赋值的代码如下     

    Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);

           要实现缩小就需要正方形区域的索引范围以一定速度缩小,最终由下一张图片完全覆盖,实现图3.2.1效果的完整代码如下

    function imageswitch3()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    while 1
        
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        Im=I1;
    end
    end

           同样可以设计一个从中间放大而覆盖图像的效果,这只需要改变上面代码中for中的赋值部分就可以了,至于具体如何修改大家只要参考第4节中的完整代码就行了,限于篇幅这里就不多说了。

    3.3 将动画保存为GIF

           MATLAB 制作gif动态图的基本思想就是,将一张张的静态图组合成一张能动的gif图片,并保存到相应的位置。 那么,要想制作一张动态图,首先要有若干个静态图,并且他们的索引值是连续的。将我们制作的动画保存下来其完整代码如下

    function imageswitch4()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
     % 动画效果一
    
        jo=0;
        for i=x:-step:step  
            Im=I1;
            Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
    
            jo=jo+1;
            %依次输出图片
            print(hFigure,'-dbmp',sprintf('%d',jo))   
        end
        
    %% 依次读取生成的所有图片
    for j=1:jo
        %获取当前图片
        A=imread(sprintf('%d.bmp',j));
        [I,map]=rgb2ind(A,256);
        %生成gif,并保存
        if(j==1)
            imwrite(I,map,'movefig.gif','DelayTime',0.1,'LoopCount',Inf)
        else
            imwrite(I,map,'movefig.gif','WriteMode','append','DelayTime',0.1)    
        end
    end
    
    end

     

           前面第1-33行代码与之前的代码一致,在第37行print(hFigure,'-dbmp',sprintf('%d',jo)) 中hFigure是当前图形窗口的图形句柄,指定输出当前窗口的图像,'-dbmp'指定输出文件格式,sprintf('%d',jo)是对bmp文件命名为jo。后面第41-51行的for循环是遍历刚刚生成的图片将其组合成gif文件,生成的gif文件如图3.2.2所示。

     

     

     

                                                                                                  图3.2.2 movefig.gif

    4. 完整代码

           实现文中开头图中的效果的完整代码如下所示,在MATLAB中新建一个m文件,命名为imageswitch.m运行即可。注意将相应图片放在m文件相同文件夹下,图片的命名需与代码中一致(也可修改代码中文件名)免得出错。下面是本文所用到的图片文件,需要的可以选中复制下来用于测试程序,只是需要改下文件名与这里一致。

    %作品:图片切换动画效果
    %作者:吴限 
    %2018.3.14
    function imageswitch()
    %需显示的图片文件名预存
    S=char('BingWallpaper-2016-09-27.jpg',...
        'BingWallpaper-2016-10-07.jpg',...
        'BingWallpaper-2016-10-13.jpg',...
        'BingWallpaper-2016-10-14.jpg',...
        'BingWallpaper-2016-12-26.jpg');
    Imagename=cellstr(S);
    %% 读入图片
    I1=imread(Imagename{1});I2=imread(Imagename{2});
    I3=imread(Imagename{3});I4=imread(Imagename{4});
    I5=imread(Imagename{5});
    %% 转换存储格式为double
    I1=im2double(I1);I2=im2double(I2);I3=im2double(I3);
    I4=im2double(I4);I5=im2double(I5);
    %% 
    [x,y,z]=size(I1);
    Im=I1;
    %% 创建图形窗口并设置图形对象初始属性
    hFigure=figure('menubar','none','NumberTitle','off','position',...
        [1000 1000 720 450],'name','图片切换动画效果');
    movegui(hFigure,'center');
    axes('Visible','off','units','normalized','position',[0 0 1 1]);
    % 显示图片
    hIm=imshow(Im);
    
    step=x/10;%渐变步长
    Length=(y-x)/2;
    
    while 1
        % 动画效果一
        for i=step:step:x
            % 改变图像数据
            Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:);
    
            Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
       
         % 动画效果二
        Im=I2;
        for i=x:-step:step
            Im=I4;
            Im(x-i+1:x,1:Length,:)=I3(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I3(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I3(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        
        %动画效果三
        Im=I3;
        for i=x:-step:step
            Im=I1;
            Im(1:i,1:Length,:)=I4(x-i+1:x,1:Length,:);
            Im(x-i+1:x,y-Length+1:y,:)=I4(1:i,y-Length+1:y,:);
            
            Im(1:x/2,Length+1:Length+i,:)=I4(1:x/2,y-Length-i+1:y-Length,:);
            Im(x/2+1:x,y-Length-i+1:y-Length,:)=I4(x/2+1:x,Length+1:Length+i,:);
      
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow  ;%重绘当前图形窗口
        end
        
        %动画效果四
        Im=I4;
        for i=1:step:x
            Im(x-i+1:x,1:Length,:)=I5(1:i,1:Length,:);
            Im(1:i,y-Length+1:y,:)=I5(x-i+1:x,y-Length+1:y,:);
            
            Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I5(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
            
            set(hIm,'CData',Im);%设置image对象CData属性为Im
            drawnow ;%重绘当前图形窗口
        end
        
        Im=I5;
    end
    end

    用到的图片文件:

     

     

     

    BingWallpaper-2016-09-27.jpg

    BingWallpaper-2016-10-07.jpg

    BingWallpaper-2016-10-13.jpg

    BingWallpaper-2016-10-14.jpg

    BingWallpaper-2016-12-26.jpg

          本文中所有代码的完整m文件还有图片文件已经上传,代码经调试通过

    下载链接:https://download.csdn.net/download/qq_32892383/10288793

    有需要的朋友在评论区留言,可以将文件发送至你的邮箱。

    【公众号获取】
    本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“IS20180315”即可获取全部资源文件。

    5. 结束语

           这就是利用MATLAB进行图片切换动画的全部内容了,还有很多炫丽的动画效果可以创造,将动画效果用到PPT演示和GUI设计等方面定能增色不少。本博文介绍的方法在多次修改之下,使其程序更加严谨。由于编者能力有限,代码即使经过了多次校对,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

    展开全文
  • Matlab实现人脸识别

    万次阅读 多人点赞 2018-06-13 21:35:23
    最近在学习matlab图像处理部分,发现人脸识别这一块非常好玩,在这里做个总结。人脸识别之一:查找图片中的人脸并用方框圈出 这种类似于智能手机拍照时,屏幕里那个框任务头部的红框。大致步骤为:获取RGB图片---&...

     最近在学习matlab图像处理部分,发现人脸识别这一块非常好玩,在这里做个总结。

    人脸识别之一:查找图片中的人脸并用方框圈出

               这种类似于智能手机拍照时,屏幕里那个框任务头部的红框。大致步骤为:获取RGB图片--->转换为灰度图像--->图像处理--->人脸识别。从书中摘出的代码如下:

    clear all
    clc
    
    %获取原始图片
    i=imread('face.jpg');
    I=rgb2gray(i);        
    BW=im2bw(I);             %利用阈值值变换法将灰度图像转换成二进制图像
    figure(1);
    imshow(BW);
    %最小化背景
    [n1 n2]=size(BW);
    r=floor(n1/10);
    c=floor(n2/10);
    x1=1;x2=r;
    s=r*c;
    
    for i=1:10
        y1=1;y2=c;
        for j=1:10
            if(y2<=c || y2>=9*c) || (x1==1 || x2==r*10)
                loc=find(BW(x1:x2,y1:y2)==0);
                [o p]=size(loc);
                pr=o*100/s;
                if pr<=100
                    BW(x1:x2,y1:y2)=0;
                    r1=x1;r2=x2;s1=y1;s2=y2;
                    pr1=0;
                end
                imshow(BW);
            end
            y1=y1+c;
            y2=y2+c;
        end
        x1=x1+r;
        x2=x2+c;
    end
    figure(2)
    subplot(1,2,1);
    imshow(BW)
    title('图像处理');
    %人脸识别
    L=bwlabel(BW,8);
    BB=regionprops(L,'BoundingBox');
    BB1=struct2cell(BB);
    BB2=cell2mat(BB1);
    
    [s1 s2]=size(BB2);
    mx=0;
    for k=3:4:s2-1
        p=BB2(1,k)*BB2(1,k+1);
        if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8
            mx=p;
            j=k;
        end
    end
    subplot(1,2,2);
    title('人脸识别');
    imshow(I);
    hold on;
    rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j)],'EdgeColor','r')

    实验效果图:

                                

    从实验效果图中,可以看出红框框出了人脸部分。

    人脸识别之二:由输入的人像识别出数据库中人像

          这种情况类似于手机人脸解锁,通过当前的人脸去和保存的人脸做比对来实现解锁等功能;从网上看了好多资料,由于个人能力有限大多都没仿真出来,最后通过学习PCA算法,了解到可通过PCA算法对输入矩阵降维,提取特征值和特征向量的方式来做人脸比对。具体的PCA的东西在这里不作介绍,主要介绍一下如何实现人脸比对。

          大致步骤:制作人脸数据样本--->PCA提取样本数据特征值--->人脸比对

    1.人脸样本

           从网上搜集了10张人脸图片,来制作成样本。

                               

    %读取转换10张图片,生成数据矩阵
    function ImgData = imgdata()  
    %导入图片
    picture1 = rgb2gray(imread('1.jpg')); 
    picture2 = rgb2gray(imread('2.jpg')); 
    picture3 = rgb2gray(imread('3.jpg')); 
    picture4 = rgb2gray(imread('4.jpg'));   
    picture5 = rgb2gray(imread('5.jpg'));  
    picture6 = rgb2gray(imread('6.jpg')); 
    picture7 = rgb2gray(imread('7.jpg'));  
    picture8 = rgb2gray(imread('8.jpg'));   
    picture9 = rgb2gray(imread('9.jpg'));
    picture10 = rgb2gray(imread('10.jpg'));  
    [m,n] = size(picture1); 
    picture_ten = {picture1,picture2,picture3,picture4,picture5,picture6,picture7,picture8,picture9,picture10};  
    for i=1:10 
        %把m*n的矩阵变换成1*(m*n)的矩阵  
        ImgData(i,:) = reshape(picture_ten{i},1,m*n);  
    end  
    %数据范围缩小到0到1之间  
    ImgData = double(ImgData)/255;  
    
    

    2. PCA分析

    function Cell_ten = PCA(imgdata,k)  
    [m,n] = size(imgdata);    
    img_mean = mean(imgdata); %计算每列平均值  
    img_mean_ten = repmat(img_mean,m,1); %复制m行平均值至矩阵img_mean_ten 
    Z = imgdata - img_mean_ten;  
    T = Z'*Z;%协方差矩阵      
    [V,D] = eigs(T,k); %计算T中最大的前k个特征值与特征向量  
    img_new = imgdata*V*D;  %低维度下的各个人脸的数据  
    Cell_ten = {img_new,V,D};

    3.通过输入测试人脸从数据库中找到相对应人脸

    function face=  facefind(Cell_ten,testdata)%此函数代码借鉴于他人,还未征求其同意,这里就暂时略过

    这里testdata是测试图片的数据

    4.主程序调用

    img=imgdata(); %图片矩阵数据
    Cell_ten=PCA(img,2);% PCA
    face1=facefind(Cell_ten,imread('test.jpg'));%识别
    subplot(1,2,1)
    imshow('test.jpg')
    title('测试图像')
    subplot(1,2,2)
    imshow(strcat(num2str(face1),'.jpg'))
    title('数据库图像')

    测试效果:

                                        

    使用这个方式可以实现简单的人脸识别,但精确度不高;使用神经网络会使精确度大幅度提高,再接再厉,学习使用神经网络实现人脸识别。此文介绍原理性的东西较少,现在对于介绍这一方面,本人比较欠缺,今后的日子里会更新些算法学习的东西。

    展开全文
  • 迪克斯特拉(Dijkstra)算法之MATLAB实现

    万次阅读 多人点赞 2016-01-12 21:39:14
    by WC 1.12.2016 1. 迪克斯特拉(Dijkstra)算法 在网上面看了很多的解释,仍没有感觉到有非常通熟易懂的解释,在这里我为大家讲解一下,尽量避免枯燥难懂的数学公式。 狄克斯特拉算法。是从一个特定的顶点(又...
                                                                                               by WC 1.12.2016 
    

    1. 迪克斯特拉(Dijkstra)算法
    在网上面看了很多的解释,仍没有感觉到有非常通熟易懂的解释,在这里我为大家讲解一下,尽量避免枯燥难懂的数学公式。
    狄克斯特拉算法。是从一个特定的顶点(又可称为原点,可自己定义)到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。举个例子,通熟易懂 .
    这里写图片描述
    圆圈表示一个顶点,每两个圆圈之间的线段上面的数字表示权值,这个权值可以表示从一个点到另外一个点所需要的时间,距离等等花销,在本例,表示距离。。每个圆圈里面写着原点到这个点的距离。
    我们先设置两个顶点的集合T和S:
    1)S中存放已找到最短路径的顶点,初始时,集合S中只有一个顶点,即、原点V0,我们在V0圆圈内写0,本身到本身的距离时0
    2)T中存放当前还没找到最短路径的顶点,我们将除了V0以外的所有点的距离写无穷大,在这里我们都写99。

    这里写图片描述
    找到S中的第一个点s(1),即原点,从原点开始,寻找与s(1)相连的最近一层的权值最小的点

    这里写图片描述
    找到S中的第二个点s(2),即在与原点相连的权值2,6,,9找到最小权值2,将其所对应的点的圆圈里面写2,表示原点到这个点的最短距离为2

    这里写图片描述
    找到S中第三个点s(3)的最短路径,写上3,,表示原点到这个点的最短距离为3,记住:这个3不是表示S中的存放的序号,而是表示原点到此点的距离

    这里写图片描述
    找到S中的第四个点s(4),最小距离=2+1+1=4,即(1)-s(2)-s(3)-s(4),小于原点直接到s(4)的距离s(0)-s(4) =6

    以下的类似
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    所以迪克拉算法的核心就是从原点出发(原点可以是自己定义的任意一个点),以原点为圆心,半径从小到大,判断原点到半径上面的点的最短距离,这个距离可能是圆心r0->r1(半径较小)->r2(半径较大)或者是r0->r2(如果存在r0到r2这条路径的话)

    2.MATLAB实现
    例 某公司在六个城市c1, c2,,,, c6 中有分公司,从 ci到 cj 的直接航程票价记在
    下述矩阵的 (i, j) 位置上。(∞ 表示无直接航路),请帮助该公司设计一张城市 c1 到其它城市间的票价最便宜的路线图。
    这里写图片描述

    用矩阵
    a[n,n](n 为顶点个数)存放各边权的邻接矩阵, 行向量 pb 、 index1、 index2 、d 分别用来存放 P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。其中分量
    这里写图片描述
    index2(i) 存放始点到第i 点最短通路中第i 顶点前一顶点的序号;
    d(i) 存放由始点到第i 点最短通路的值。
    求第一个城市到其它城市的最短路径的 Matlab 程序如下:

    clc,clear all
    a=zeros(6);
    a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;               
    a(2,3)=15;a(2,4)=20;a(2,6)=25;
    a(3,4)=10;a(3,5)=20;
    a(4,5)=10;a(4,6)=25;
    a(5,6)=55;
    a=a+a'                                                  
    a(find(a==0))=inf %将a=0的数全部替换为无强大               
    pb(1:length(a))=0;pb(1)=1;  %当一个点已经求出到原点的最短距离时,其下标i对应的pb(i)赋1
    index1=1; %存放存入S集合的顺序
    index2=ones(1,length(a)); %存放始点到第i点最短通路中第i顶点前一顶点的序号
    d(1:length(a))=inf;d(1)=0;  %存放由始点到第i点最短通路的值
    temp=1;  %temp表示c1,算c1到其它点的最短路。
    while sum(pb)<length(a)  %看是否所有的点都标记为P标号
    tb=find(pb==0); %找到标号为0的所有点,即找到还没有存入S的点
    d(tb)=min(d(tb),d(temp)+a(temp,tb));%计算标号为0的点的最短路,或者是从原点直接到这个点,又或者是原点经过r1,间接到达这个点
    tmpb=find(d(tb)==min(d(tb)));  %求d[tb]序列最小值的下标
    temp=tb(tmpb(1));%可能有多条路径同时到达最小值,却其中一个,temp也从原点变为下一个点
    pb(temp)=1;%找到最小路径的表对应的pb(i)=1
    index1=[index1,temp];  %存放存入S集合的顺序
    temp2=find(d(index1)==d(temp)-a(temp,index1));
    index2(temp)=index1(temp2(1)); %记录标号索引
    end
    d, index1, index2

    上面的程序第一次看并不能看懂,需要读者在MATLAB中一步一步的单步运行,记住:是设置断点,单步运行,同时观察矩阵的值的变化情况。结果附在下面

    d =

     0    35    45    35    25    10
    

    index1 =

     1     6     5     2     4     3
    

    index2 =

     1     6     5     6     1     1
    
    展开全文
  • 基于Retinex的图像去雾算法(MATLAB实现

    万次阅读 多人点赞 2017-07-01 14:09:06
    通常图像增强算法(例如...并在MATLAB中实验一下这类方法的去雾效果。Retinex(包括SSR、MSR和MSRCR)是一种常用的建立在科学实验和科学分析基础上的图像增强方法,它是以人类视觉系统为出发点发展而来的一套理论方法
  • MATLAB实现apFFT

    2013-05-18 10:17:22
    MATLAB实现FFT与全相位FFT谱分析和比较,传统FFT和全相位FFT比较
  • MFCC提取详细及Matlab实现

    万次阅读 2014-05-25 23:06:09
    一、MFCC概述  在语音处理领域里,梅尔频率倒谱(mel-frequency cepstrum简称MFC)表示一个语音的短时功率谱,是一个语音的对数功率谱在频率的一个非线性梅尔刻度上进行线性余弦转换所得。 ...
  • MATLAB实现最小二乘法

    万次阅读 多人点赞 2019-03-31 20:40:32
    文章仅为创作者的观点,可与转载者讨论 最小二乘法         最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。 ... &nb...
  • Matlab实现CNN(一)

    万次阅读 多人点赞 2018-05-20 15:15:27
    由于大多高校在校生使用matlab比较多,而网上的教程代码基本都基于caffe框架或者python,对于新入门的同学来说甚是煎熬,所以本文采用matlab结合MNIst手写数据库完成对手写数字的识别。本人水平有限,如有纰漏,还.....
  • Matlab实现CNN(二)

    万次阅读 2018-05-20 15:16:33
    1.前言最近需要用到卷积神经网络(CNN),在还没完全掌握cuda+caffe+TensorFlow+python这一套传统的深度学习的流程的时候,想到了matlab,自己查了一下documentation,还真的有深度学习的相关函数。所以给自己提个醒,...
  • 朴素贝叶斯分类MATLAB实现

    万次阅读 热门讨论 2018-03-20 20:56:07
    原理: 首先将数据分成训练集和测试集,计算测试集中每个类的先验概率(就是每个类在训练集中占的比例),然后为样本的每个属性估计条件概率(就是属性值相同的样本在每一类中占的比例)为了方便理解请看下面的例子...
  • 【Matlab编程】哈夫曼编码的Matlab实现

    万次阅读 多人点赞 2015-05-04 11:31:45
    在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章《哈夫曼树及编译码》。不过在通信仿真中,经常要...下面直接给出具体的Matlab实现的哈夫曼编码函数,由于程序中注释还算比较详细,在此就不予与说明: functio
  • LDPC编码的matlab实现

    热门讨论 2010-11-03 13:59:45
    这个Matlab仿真程序实现LDPC低密度奇偶校验码(Low Density Parity Check)算法。用了BPSK调制,适用于AWGN信道下,很全
  • AR模型的matlab实现

    热门讨论 2011-07-25 09:05:39
    matlab实现的AR模型的仿真程序,可以运行出结果。非常适合初学者使用
  • 蒙特卡洛模拟方法的matlab实现

    万次阅读 2019-08-15 14:18:16
    蒙特卡洛模拟方法的matlab实现 这篇文章本来发在另一个号上的。。但是由于历史遗留的原因(id。微信号)把那个号注销了,结果忘记删除原文章,好像申请删除还挺麻烦的,所以不删了直接在这重新发一遍 蒙特卡洛模拟这...
  • 积分matlab实现

    千次阅读 2019-05-20 12:16:55
    数值积分matlab实现 上周有读者问到有关数值积分的问题,这里给大家介绍一些常见的用得到的数值积分例子;每篇博文就讲一种类型,方便大家阅读。 首先介绍数值积分的matlab指令:s=int(fun,v,a,b)。 其中,int表示...
  • MATLAB实现巴特沃斯数字滤波器

    万次阅读 多人点赞 2019-08-03 10:07:35
    MATLAB实现巴特沃斯数字滤波器 MATLAB实现巴特沃斯数字滤波器 前因:因为要准备保研面试,今年暑假就重新把烂尾的项目捡起来了。 为了提取采集到的脑电信号中有用的部分,想用数字带通滤波器实现,浏览了很多帖子...
  • Matlab实现图像阈值分割

    万次阅读 多人点赞 2017-11-13 15:40:22
    使用matlab实现阈值分割,实现两种方法,一是人工选择阈值进行分割,而是自动选择阈值进行分割。操作步骤 1、 打开Matlab内容自带的coins.png图像。 2、 观察它的直方图。 3、 人工选定一个阈值,并进行分割。 4...
  • MATLAB 实现单纯形法

    万次阅读 多人点赞 2018-11-21 11:42:41
    的代码实现 function [x,f,it]=linp(A,b,c) %输出x为最优解,f为最优值,it为迭代次数。 b=b(:);%变为列向量 it=0; [m,n]=size(A); x=zeros(1,n+length(b)); A=[A eye(length(b)) b]; %化为标准型,A b合一块 c=[c ...
  • 数字图像处理MATLAB程序实现

    千次阅读 2018-03-21 18:48:04
    用函数对cameraman图像进行非线性变换 a=imread(‘F:\work\Digital Image Processing\2015\ketangshiyan\ceshitu\cameraman.jpg’) ; %读取原始图像 figure(1); imshow(a); xlabel(‘(a)原始图像’);...
  • Matlab 实现 数值计算方法 二分法

    万次阅读 多人点赞 2015-05-28 08:33:48
    给本科生助课,需要用到二分法,所以就编写了一下二分法的matlab代码,while循环、for循环都用到了; 个人认为这两段程序编写的比较细致,该涉及到的输入输出都有。都是比较简单的知识,所以给大家分享出来,供交流...
  • RNN卷积神经网络,LSTM,使用matlab实现,简单的数据拟合
  • Matlab实现Huffman编码

    万次阅读 2017-03-29 10:07:06
    %HUFF_CODEC 哈夫曼编码的MATLAB实现 % author==Frank % 本程序重点在建树和建表过程,以及求解平均码长和编码效率 % 因为建表的顺序不一致,可能会导致码表不一致,但是都满足熵编码要求 %u 输出排序后的频率分布 %...
  • NSGA2算法中文详解与MATLAB实现整理

    千次阅读 2019-03-07 20:55:25
    NSGA2算法 NSGA-II多目标遗传算法概述 ...NSGA2算法MATLAB实现(能够自定义优化函数) http://www.omegaxyz.com/2018/01/22/new_nsga2/ NSGA2算法特征选择MATLAB实现(多目标) http://www.omegaxyz.co...
  • 自适应滤波之最小均方(LMS)算法以及matlab实现

    万次阅读 多人点赞 2018-05-31 14:06:30
    使用LMS算法对进行信号分离 clear close all clc a1=-1.6; a2=0.8; [x,fs1]=audioread('handel.wav'); [dn,fs2]=audioread('handel_echo.wav'); figure; subplot(2,1,1); plot(x); title('spk参考信号');...plo...
  • matlab实现CRC

    万次阅读 2015-07-15 21:49:15
    CRC MATLAB算法
  • MATLAB实现香农编码

    千次阅读 2018-06-07 19:33:43
    最近有个实验是用MATLAB实现香农编码的,在网上看到了别人写的程序,大部分都不支持手动输入信源,我自己就加上了几行,能够直接输入信源分布,下面是程序:pa=input('请输入信源分布:')k=length(pa); %计算信源符号...
  • 归一化的matlab实现

    千次阅读 2016-06-24 17:16:31
    最近在做神经网络,需要对训练数据进行...虽然matlab有现成的归一化函数(mapminmax() premnmx),但归一化到特定的区间,上述函数并不方便使用。由此萌生了自己编写归一化函数的想法。(先说推导,matlab代码见后面)
  • LU分解(matlab实现)

    万次阅读 多人点赞 2016-05-02 17:32:05
    LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。 主要的算法思路是从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,这些行...Matlab实现:% f
  • 主成分分析PCA降维的MATLAB程序实现代码

    千次下载 热门讨论 2011-03-09 20:41:54
    MATLAB实现用主成分分析(PCA)的方法对矩阵的降维.其中包括具体程序实现代码,为了增加程序的可读性,对程序的主要步骤都进行了解释。

空空如也

1 2 3 4 5 ... 20
收藏数 357,515
精华内容 143,006
关键字:

matlab实现

matlab 订阅