欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Matlab繪制超絢麗的煙花的過程詳解

 更新時(shí)間:2022年02月25日 10:13:13   作者:slandarer  
這篇文章主要為大家介紹了如何利用Matlab繪制超絢麗的煙花,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下

1.使用效果

2.隨機(jī)點(diǎn)生成

我們要構(gòu)造一個(gè)黑色背景,對(duì)其添加高斯噪聲,然后依據(jù)閾值刪掉部分噪聲,生成一張隨機(jī)點(diǎn)圖片:

% 構(gòu)造黑色背景并生成白色雜點(diǎn)
blackPic=uint8(zeros(800,800));
distPic=imnoise(blackPic,'gaussian',0, 0.11);
distPic(distPic<254)=0;

3.圖像膨脹

我們發(fā)現(xiàn)之前構(gòu)造的點(diǎn)太小了,我們要對(duì)其進(jìn)行形態(tài)學(xué)膨脹處理:

% 雜點(diǎn)膨脹
se=strel('square',3);
distPic=imdilate(distPic,se);

4.特效「風(fēng)」模擬

就是建立一個(gè)循環(huán),不斷地將點(diǎn)往右側(cè)復(fù)制,并將顏色變暗,代碼中第二個(gè)參數(shù)為拖拽長度,第三個(gè)參數(shù)為暗化速度:

% 構(gòu)造風(fēng)特效
windPic=wind(distPic,180,0.99);
% 風(fēng)特效構(gòu)造函數(shù)
    function resultPic=wind(oriPic,len,ratio)
        oriPic=double(oriPic);
        for i=1:len
            tempPic=[zeros(size(oriPic,1),1),oriPic(:,1:(end-1))].*ratio;
            oriPic(oriPic<tempPic)=tempPic(oriPic<tempPic);  
        end
        resultPic=uint8(oriPic);
    end

5.級(jí)坐標(biāo)變換

% 極坐標(biāo)變換
polarPic=polarTransf(windPic(:,end:-1:1)');
% 級(jí)坐標(biāo)變換構(gòu)造函數(shù) 
    function resultPic=polarTransf(oriPic)
        oriPic=double(oriPic);
        [m,n]=size(oriPic);
        [t,r]=meshgrid(linspace(-pi,pi,n),1:m);
        
        M=2*m;
        N=2*n;
        [NN,MM]=meshgrid((1:N)-n-0.5,(1:M)-m-0.5);
        T=atan2(NN,MM);
        R=sqrt(MM.^2+NN.^2);
        
        resultPic=interp2(t,r,oriPic,T,R,'linear',0);
        resultPic=uint8(resultPic);
    end

6.圖像模糊及再映射

我們發(fā)現(xiàn)煙花圖片中心區(qū)域方格化嚴(yán)重:

我們很容易想到圖像模糊,但是模糊后亮度又不夠,因此我們?cè)僮鲆淮斡成鋵D片整體亮度提高:

模糊及映射:

% 模糊以減少像素化
polarPic=imgaussfilt(polarPic,1.5);
polarPic=uint8(double(polarPic)./double(max(max(polarPic))).*260);

7.圖像上色

生成一個(gè)圓形的漸變圖片,并與白色煙花圖片進(jìn)行一次正交疊底:

% 構(gòu)造圓形漸變圖
matSize=[1600,1600];
point=[800,800];
colorList=[195    53    93
    211   102   141
    231   179   192
    229   182   172
    227   178   137
    238   191   147
    236   195   113];
% 正片疊底
colorMat=cColorMat(matSize,point,colorList);
colorMatR=colorMat(:,:,1);
colorMatG=colorMat(:,:,2);
colorMatB=colorMat(:,:,3);
fwPicR=double(colorMatR).*double(polarPic)./255;
fwPicG=double(colorMatG).*double(polarPic)./255;
fwPicB=double(colorMatB).*double(polarPic)./255;
fwPic(:,:,1)=fwPicR;
fwPic(:,:,2)=fwPicG;
fwPic(:,:,3)=fwPicB;
fwPic=uint8(fwPic);
imshow(fwPic)

%==========================================================================
% 圖像顏色映射函數(shù)
    function colorMat=cColorMat(matSize,point,colorList)
    [xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1));
    zMesh=sqrt((xMesh-point(2)).^2+(yMesh-point(1)).^2);
    zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));

    colorFunc=colorFuncFactory(colorList);
    colorMesh=colorFunc(zMesh);

    colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
    colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
    colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));

    colorMat=uint8(colorMat);
    end

    function colorFunc=colorFuncFactory(colorList)
        x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
        y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
        colorFunc=@(X)[interp1(x,y1,X,'linear')',...
                       interp1(x,y2,X,'linear')',...
                       interp1(x,y3,X,'linear')'];
    end

其他幾個(gè)顏色:

colorList2=[25    59   157
    24    71   219
    38   124   237
    93   215   255
   168   244   255
   243   254   250
   246   252   240];
colorList3=[239   250   210
   229   164   122
   232   150   138
   255   164   204
   192    58   111
   158    10    26
   224   168   121];

8.完整代碼

function drawFireWorks

% 構(gòu)造黑色背景并生成白色雜點(diǎn)
blackPic=uint8(zeros(800,800));
distPic=imnoise(blackPic,'gaussian',0, 0.11);distPic(distPic<254)=0;

% 雜點(diǎn)膨脹
se=strel('square',3);
distPic=imdilate(distPic,se);

% 構(gòu)造風(fēng)特效
windPic=wind(distPic,180,0.99);

% 極坐標(biāo)變換
polarPic=polarTransf(windPic(:,end:-1:1)');

% 模糊以減少像素化
polarPic=imgaussfilt(polarPic,1.5);
polarPic=uint8(double(polarPic)./double(max(max(polarPic))).*260);

%-----------------------------------------------------------------
% 構(gòu)造圓形漸變圖
matSize=[1600,1600];
point=[800,800];
colorList=[195    53    93
    211   102   141
    231   179   192
    229   182   172
    227   178   137
    238   191   147
    236   195   113];
% 正片疊底
colorMat=cColorMat(matSize,point,colorList);
colorMatR=colorMat(:,:,1);
colorMatG=colorMat(:,:,2);
colorMatB=colorMat(:,:,3);
fwPicR=double(colorMatR).*double(polarPic)./255;
fwPicG=double(colorMatG).*double(polarPic)./255;
fwPicB=double(colorMatB).*double(polarPic)./255;
fwPic(:,:,1)=fwPicR;
fwPic(:,:,2)=fwPicG;
fwPic(:,:,3)=fwPicB;
fwPic=uint8(fwPic);
imshow(fwPic)

%==========================================================================
% 風(fēng)特效構(gòu)造函數(shù)
    function resultPic=wind(oriPic,len,ratio)
        oriPic=double(oriPic);
        for i=1:len
            tempPic=[zeros(size(oriPic,1),1),oriPic(:,1:(end-1))].*ratio;
            oriPic(oriPic<tempPic)=tempPic(oriPic<tempPic);  
        end
        resultPic=uint8(oriPic);
    end
% 極坐標(biāo)變換構(gòu)造函數(shù) 
    function resultPic=polarTransf(oriPic)
        oriPic=double(oriPic);
        [m,n]=size(oriPic);
        [t,r]=meshgrid(linspace(-pi,pi,n),1:m);
        
        M=2*m;
        N=2*n;
        [NN,MM]=meshgrid((1:N)-n-0.5,(1:M)-m-0.5);
        T=atan2(NN,MM);
        R=sqrt(MM.^2+NN.^2);
        
        resultPic=interp2(t,r,oriPic,T,R,'linear',0);
        resultPic=uint8(resultPic);
    end

%==========================================================================
% 圖像顏色映射函數(shù)
    function colorMat=cColorMat(matSize,point,colorList)
    [xMesh,yMesh]=meshgrid(1:matSize(2),1:matSize(1));
    zMesh=sqrt((xMesh-point(2)).^2+(yMesh-point(1)).^2);
    zMesh=(zMesh-min(min(zMesh)))./(max(max(zMesh))-min(min(zMesh)));

    colorFunc=colorFuncFactory(colorList);
    colorMesh=colorFunc(zMesh);

    colorMat(:,:,1)=colorMesh(end:-1:1,1:matSize(1));
    colorMat(:,:,2)=colorMesh(end:-1:1,matSize(1)+1:2*matSize(1));
    colorMat(:,:,3)=colorMesh(end:-1:1,2*matSize(1)+1:3*matSize(1));

    colorMat=uint8(colorMat);
    end

    function colorFunc=colorFuncFactory(colorList)
        x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
        y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
        colorFunc=@(X)[interp1(x,y1,X,'linear')',...
                       interp1(x,y2,X,'linear')',...
                       interp1(x,y3,X,'linear')'];
    end
end

以上就是基于Matlab繪制超絢麗的煙花的過程詳解的詳細(xì)內(nèi)容,更多關(guān)于Matlab繪制煙花的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • opencv3/C++ 實(shí)現(xiàn)SURF特征檢測

    opencv3/C++ 實(shí)現(xiàn)SURF特征檢測

    今天小編就為大家分享一篇opencv3/C++ 實(shí)現(xiàn)SURF特征檢測,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C語言實(shí)現(xiàn)簡單通訊錄管理系統(tǒng)

    C語言實(shí)現(xiàn)簡單通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 深入分析Visual C++進(jìn)行串口通信編程的詳解

    深入分析Visual C++進(jìn)行串口通信編程的詳解

    本篇文章是對(duì)Visual C++進(jìn)行串口通信編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++基礎(chǔ)教程之指針拷貝詳解

    C++基礎(chǔ)教程之指針拷貝詳解

    這篇文章主要介紹了C++基礎(chǔ)教程之指針拷貝詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 使用C語言實(shí)現(xiàn)三子棋小游戲

    使用C語言實(shí)現(xiàn)三子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了使用C語言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 對(duì)比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    對(duì)比分析C語言中的gcvt()和ecvt()以及fcvt()函數(shù)

    這篇文章主要介紹了對(duì)比分析C語言中的gcvt和ecvt以及fcvt函數(shù),都是將數(shù)字轉(zhuǎn)化為字符串,注意其之間的功能區(qū)別,需要的朋友可以參考下
    2015-08-08
  • C語言編程時(shí)常犯十八個(gè)錯(cuò)誤小結(jié)

    C語言編程時(shí)常犯十八個(gè)錯(cuò)誤小結(jié)

    C語言的最大特點(diǎn)是:功能強(qiáng)、使用方便靈活。C編譯的程序?qū)φZ法檢查并不象其它高級(jí)語言那么嚴(yán)格,這就給編程人員留下“靈活的余地”,但還是由于這個(gè)靈活給程序的調(diào)試帶來了許多不便,尤其對(duì)初學(xué)C語言的人來說,經(jīng)常會(huì)出一些連自己都不知道錯(cuò)在哪里的錯(cuò)誤
    2013-07-07
  • C++實(shí)現(xiàn)DES加密算法實(shí)例解析

    C++實(shí)現(xiàn)DES加密算法實(shí)例解析

    這篇文章主要介紹了C++實(shí)現(xiàn)DES加密算法實(shí)例解析,是一個(gè)很實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • C語言中的參數(shù)傳遞機(jī)制詳解

    C語言中的參數(shù)傳遞機(jī)制詳解

    這篇文章主要介紹了C語言中的參數(shù)傳遞機(jī)制,C語言中函數(shù)參數(shù)的傳遞有:值傳遞、地址傳遞、引用傳遞這三種形式。下面我們?cè)敿?xì)探討下
    2017-04-04
  • C語言近萬字為你講透樹與二叉樹

    C語言近萬字為你講透樹與二叉樹

    樹是計(jì)算機(jī)算法最重要的非線性結(jié)構(gòu)。因?yàn)闃淠芎芎玫孛枋鼋Y(jié)構(gòu)的分支關(guān)系和層次特性,所以在計(jì)算機(jī)科學(xué)和計(jì)算機(jī)應(yīng)用領(lǐng)域有著廣泛的應(yīng)用。這篇文章我就帶大家一起了解一下樹、二叉樹這種結(jié)構(gòu),下篇文章會(huì)重點(diǎn)向大家介紹二叉樹的遍歷算法
    2022-05-05

最新評(píng)論