日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -......

發布時間:2023/12/16 循环神经网络 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -...... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

% 該函數是根據對所輸入的png格式的真彩圖像、小波類型(db9或haar)

% 和相應的閾值進行了三級非標準小波harr或db9的分解和重構,從而達到了對原圖像的壓縮處理的

% 目的。它首先把通過原圖像分離后的某顏色分量作為二維圖像矩陣,通過調用自定義的二維離散

% 小波變換函數mydwt2(),并依據指定的小波基函數'wavename'進行二維離散的行、列小波變換,

% 得到了經變換后的相應顏色分量的近似分量% cA,水平細節分量cH,垂直細節分量cV,對角細節

% 分量cD和中間分量cM,然后調用自定義的圖像輸出函數outrgb分別把中間分量以及cA、cH、cV、

% cD合并后的圖像陣進行R、G、B合成輸出圖像文件,其中某顏色分量的cA又做為下一級二維離散的

% 行、列小波分解的輸入圖像陣,如此共完成三次。

% 其次,把經過三級非標準小波分解后的各顏色分量的各級水平細節分量、垂直細節分量、對角細

% 節分量矩陣通過調用自定義函數make_0()完成了相應矩陣元素數值小于閥值系數的個數統計,并

% 對它們進行小于閥值系數元素置0處理,且把分量盡數返回,以便三級的非標準小波重構處理。

% 最后,將返回得到的各顏色分量的第三級水平細節分量、垂直細節分量、對角細節分量矩陣和第

% 三級分解后的近似分量作為參數,通過調用自定義的二維離散小波反變換函數myidwt2()進行二維

% 離散的列、行重構,得到了經重構后的近似分量cA 和中間分量cM,把該中間分量cM以及近似分量

% cA分別和經置0處理后第二級cH、cV、cD行列擴展,同時進行R、G、B合成,后調用自定義的圖像

% 輸出函數outrgb()輸出圖像文件。其中各顏色分量的cA又做為下一級二維離散的列、行小波重構

% 的輸入圖像陣,如此共完成三次。最終得到了壓縮處理的圖像文件。

% 讀入圖像文件

picchar=strcat(mypic,'.png')

pic=imread(picchar);

pic=double(pic);

% 對原真彩圖像進行R、G、B分離

cAr0=pic(:,:,1);cAg0=pic(:,:,2);cAb0=pic(:,:,3);

% 第1級非標準分解

[cAr1,cHr1,cVr1,cDr1,cMr1] = mydwt2(cAr0,wavename);

[cAg1,cHg1,cVg1,cDg1,cMg1] = mydwt2(cAg0,wavename);

[cAb1,cHb1,cVb1,cDb1,cMb1] = mydwt2(cAb0,wavename);

% 輸出經第1級非標準分解后的圖像文件

outrgb(cMr1,cMg1,cMb1,wavename,threshold,'_1_row');

outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,cHb1,...

cVb1,cDb1),wavename,threshold,'_1_col');

% 第2級非標準分解

[cAr2,cHr2,cVr2,cDr2,cMr2] = mydwt2(cAr1,wavename);

[cAg2,cHg2,cVg2,cDg2,cMg2] = mydwt2(cAg1,wavename);

[cAb2,cHb2,cVb2,cDb2,cMb2] = mydwt2(cAb1,wavename);

% 輸出經第2級非標準分解后的圖像文件

outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,...

cVb1,cDb1),wavename,threshold,'_2_row');

outrgb(merge(merge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,...

cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1...

),wavename,threshold,'_2_col');

% 第3級非標準分解

[cAr3,cHr3,cVr3,cDr3,cMr3] = mydwt2(cAr2,wavename);

[cAg3,cHg3,cVg3,cDg3,cMg3] = mydwt2(cAg2,wavename);

[cAb3,cHb3,cVb3,cDb3,cMb3] = mydwt2(cAb2,wavename);

% 輸出經第2級非標準分解后的圖像文件

outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,...

cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1...

),wavename,threshold,'_3_row');

outrgb(merge(merge(merge(cAr3,cHr3,cVr3,cDr3),cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),...

merge(merge(merge(cAg3,cHg3,cVg3,cDg3),cHg2,cVg2,cDg2),cHg1,cVg1,cDg1),...

merge(merge(merge(cAb3,cHb3,cVb3,cDb3),cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),...

wavename,threshold,'_3_col');

% 統計經過三級非標準小波分解后的各顏色分量的各級水平細節分量、垂直細節分量、對

% 角細節分量的相應矩陣元素數值小于閥值系數的個數,并對它們進行小于閥值系數元素

% 置0處理。

zeronum=0;

[cHr3,cVr3,cDr3,cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,num_0]=make_0(cHr3,cVr3,cDr3,...

cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,threshold);

zeronum=zeronum+num_0;

[cHg3,cVg3,cDg3,cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,num_0]=make_0(cHg3,cVg3,cDg3,...

cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,threshold);

zeronum=zeronum+num_0;

[cHb3,cVb3,cDb3,cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,num_0]=make_0(cHb3,cVb3,cDb3,...

cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,threshold);

zeronum=zeronum+num_0;

% 把0的總數寫入文本文件

zerotxt=strcat(wavename,'_',threshold,'_','zero','.txt')

csvwrite(zerotxt,zeronum);

% 第1級非標準重構

[cAr2,cMr3] = myidwt2(cAr3,cHr3,cVr3,cDr3,wavename);

[cAg2,cMg3] = myidwt2(cAg3,cHg3,cVg3,cDg3,wavename);

[cAb2,cMb3] = myidwt2(cAb3,cHb3,cVb3,cDb3,wavename);

% 輸出經第1級非標準重構后的圖像文件

outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,...

cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1...

),wavename,threshold,'_1_icol');

outrgb(merge(merge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,...

cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1...

),wavename,threshold,'_1_irow')

% 第2級非標準重構

[cAr1,cMr2] = myidwt2(cAr2,cHr2,cVr2,cDr2,wavename);

[cAg1,cMg2] = myidwt2(cAg2,cHg2,cVg2,cDg2,wavename);

[cAb1,cMb2] = myidwt2(cAb2,cHb2,cVb2,cDb2,wavename);

% 輸出經第2級非標準重構后的圖像文件

outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,...

cVb1,cDb1),wavename,threshold,'_2_icol');

outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,cHb1,...

cVb1,cDb1),wavename,threshold,'_2_irow');

% 第3級非標準重構

[cAr0,cMr1] = myidwt2(cAr1,cHr1,cVr1,cDr1,wavename);

[cAg0,cMg1] = myidwt2(cAg1,cHg1,cVg1,cDg1,wavename);

[cAb0,cMb1] = myidwt2(cAb1,cHb1,cVb1,cDb1,wavename);

% 輸出經第3級非標準重構后的圖像文件,即最終圖像文件

outrgb(cMr1,cMg1,cMb1,wavename,threshold,'_3_icol');

outrgb(cAr0,cAg0,cAb0,wavename,threshold,'_result');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [cA,cH,cV,cD,cM]=mydwt2(mypic_RGB,wavename)

%此函數是利用MATLAB工具箱提供的一維離散小波變換函數dwt()對傳遞進來的圖像矩陣mypic_RGB

% 進行相應的小波類型分解處理,其中參數wavename是小波類型。它借助于使用了指定的小波基函

% 數'wavename' 的dwt()首先對圖像矩陣進行行分解,而后進行列分解。生成了近似分量cA,水平

% 細節分量cH,垂直細節分量cV,對角細節分量cD和中間分量cM

% 變量初始化

cA=[];cH=[];cV=[];cD=[];cM=[];cAm=[];cDm=[];

% 進行逐行行分解變換

% cA1,cD1為臨時近似,細節分量,把兩分量進行列數擴展合成為中間分量矩陣以便輸出

x=size(mypic_RGB);

for i=1:x(1)

[cA1,cD1]=dwt(mypic_RGB(i,:),wavename);

cAm=[cAm;cA1];cDm=[cDm;cD1];

end

cM=[cAm,cDm];

% 對兩臨時分量進行逐列列分解變換,最后生成近似分量cA,水平細節分量cH,垂直細節分量cV,對

% 角細節分量cD

cAm=cAm';cDm=cDm';

x=size(cAm);

for i=1:x(1)

[cA1,cD1]=dwt(cAm(i,:),wavename);

cA=[cA;cA1];cV=[cV;cD1];

end

x=size(cDm);

for i=1:x(1)

[cA1,cD1]=dwt(cDm(i,:),wavename);

cH=[cH;cA1];cD=[cD;cD1];

end

% 轉置矩陣

cA=cA';cH=cH';cV=cV';cD=cD';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [mypic_RGB,cM]=myidwt2(cA,cH,cV,cD,wavename)

% 此函數實現了二維離散小波反變換,即重構。它是利用MATLAB工具箱所提供的一維離散小波反變

% 換函數idwt()對傳遞進來的近似分量cA、水平細節分量cH、垂直細節分量cV和對角細節分量cD進

% 行相應的小波類型重構處理,其中參數wavename是小波類型。它借助于使用了指定的小波基函數

% 'wavename'的idwt()首先對四個分量矩陣進行列反變換,而后行反變換。重構出中間過程圖像矩

% 陣cM和原始圖像矩陣mypic_RGB。

cA1=[];cD1=[];

% 進行逐列列重構變換,得到過程矩陣cA1、cD1,再對它們列數擴展合成為中間圖陣cM

cA=cA';cH=cH';cV=cV';cD=cD';

mypic_RGB=[];

x=size(cA);

for i=1:x(1)

temp=idwt(cA(i,:),cV(i,:),wavename);

cA1=[cA1;temp];

end

x=size(cH);

for i=1:x(1)

temp=idwt(cH(i,:),cD(i,:),wavename);

cD1=[cD1;temp];

end

cA1=cA1';

cD1=cD1';

cM=[cA1,cD1];

% 對上述得到的分量cA1、cD1作為過程細節分量進行逐行行重構變換,得到圖像矩陣mypic_RGB

x=size(cA1);

for i=1:x(1)

temp=idwt(cA1(i,:),cD1(i,:),wavename);

mypic_RGB=[mypic_RGB;temp];

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function []=outrgb(pic_R,pic_G,pic_B,wavename,threshold,level)

% 該函數確定了圖像在各像素位置上的紅、綠、藍的強度值組合。實現了R、G、B各分量組合后所

% 成的真彩圖像的文件輸出

temp=size(pic_R);

pic=zeros(temp(1),temp(2),3);

for i=1:temp(1);

for j=1:temp(2);

pic(i,j,1)=pic_R(i,j);

pic(i,j,2)=pic_G(i,j);

pic(i,j,3)=pic_B(i,j);

end

end

%輸出RGB圖像,即真彩圖像。

imwrite(pic/255,strcat('pic','_',wavename,'_',threshold,level,'.png'));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [cH3,cV3,cD3,cH2,cV2,cD2,cH1,cV1,cD1,count]...

=make_0(cH3,cV3,cD3,cH2,cV2,cD2,cH1,cV1,cD1,threshold)

% 該函數功能是本課程役計的關鍵,它完成了對經過三級非標準分解后各分量圖矩陣中所有元素數

% 值小于閥值的進行置0處理,為后面進行三級非標準重構原始圖像從而實現圖像壓縮奠定了基礎。

% 輸入經過非標準分解后顏色分量的各級的水平細節分量、垂直細節分量、對角細節分量和閥值

% threshold其中數字表示非標準處理的級別。輸出各分量圖矩陣中所有元素數值小于閥值系數置

% 0處理后所對應的各級的水平細節分量、垂直細節分量、對角細節分% 量,并統計它們系數為0個

% 數count。

threshold_num=str2num(threshold);

count=0;

% 借助臨時分量對第三級非標準分解的水平細節分量、垂直細節分量、對角細節分量進行行、列數

% 擴展合成cM_matrix3,并對數值小于閥值系數進行置0處理,并統計矩陣元素數值小于閥值系數的

% 個數。

cM_cA3=cD3

cM_cA3=zeros(size(cM_cA3,1),size(cM_cA3,2));

num=size(cM_cA3,1)*size(cM_cA3,2);

cM_matrix3=[cM_cA3,cH3;cV3,cD3];

cM_size=size(cM_matrix3);

for i=1:cM_size(1)

for j=1:cM_size(2)

if abs(cM_matrix3(i,j))<=threshold_num

count=count+1;

cM_matrix3(i,j)=0;

end

end

end

% 對所合成的cM_matrix3重新分離出置0處理后的水平細節分量、垂直細節分量和對角細節分量,并

% 精確了矩陣元素數值小于閥值系數的數目。

cH3=cM_matrix3;cV3=cM_matrix3;cD3=cM_matrix3;

cH3(1+size(cM_cA3,1):2*size(cM_cA3,1),:)=[];cH3(:,1:size(cM_cA3,2))=[];

cV3(1:size(cM_cA3,1),:)=[];cV3(:,1+size(cM_cA3,2):2*size(cM_cA3,2))=[];

cD3(1:size(cM_cA3,1),:)=[];cD3(:,1:size(cM_cA3,2))=[];

count=count-num;

% 借助臨時分量對第二級非標準分解的水平細節分量、垂直細節分量、對角細節分量進行行、列數

% 擴展合成cM_matrix2,并對數值小于閥值系數進行置0處理,并統計矩陣元素數值小于閥值系數的 % 個數。

cM_cA2=cD2

cM_cA2=zeros(size(cM_cA2,1),size(cM_cA2,2));

num=size(cM_cA2,1)*size(cM_cA2,2);

cM_matrix2=[cM_cA2,cH2;cV2,cD2];

cM_size=size(cM_matrix2);

for i=1:cM_size(1)

for j=1:cM_size(2)

if abs(cM_matrix2(i,j))<=threshold_num

count=count+1;

cM_matrix2(i,j)=0;

end

end

end

% 對所合成的cM_matrix2重新分離出置0處理后的水平細節分量、垂直細節分量和對角細節分量,并

% 精確了矩陣元素數值小于閥值系數的數目。

cH2=cM_matrix2;cV2=cM_matrix2;cD2=cM_matrix2;

cH2(1+size(cM_cA2,1):2*size(cM_cA2,1),:)=[];cH2(:,1:size(cM_cA2,2))=[];

cV2(1:size(cM_cA2,1),:)=[];cV2(:,1+size(cM_cA2,2):2*size(cM_cA2,2))=[];

cD2(1:size(cM_cA2,1),:)=[];cD2(:,1:size(cM_cA2,2))=[];

count=count-num;

% 借助臨時分量對第一級非標準分解的水平細節分量、垂直細節分量、對角細節分量進行行、列數

% 擴展合成cM_matrix1,并對數值小于閥值系數的元素進行置0處理,且統計矩陣元素數值小于閥值

% 系數的個數。

cM_cA1=cD1

cM_cA1=zeros(size(cM_cA1,1),size(cM_cA1,2));

num=size(cM_cA1,1)*size(cM_cA1,2);

cM_matrix1=[cM_cA1,cH1;cV1,cD1];

cM_size=size(cM_matrix1);

for i=1:cM_size(1)

for j=1:cM_size(2)

if abs(cM_matrix1(i,j))<=threshold_num

count=count+1;

cM_matrix1(i,j)=0;

end

end

end

% 對所合成的cM_matrix1重新分離出置0處理后的水平細節分量、垂直細節分量和對角細節分量,并

% 精確了矩陣元素數值小于閥值系數的數目。

cH1=cM_matrix1;cV1=cM_matrix1;cD1=cM_matrix1;

cH1(1+size(cM_cA1,1):2*size(cM_cA1,1),:)=[];cH1(:,1:size(cM_cA1,2))=[];

cV1(1:size(cM_cA1,1),:)=[];cV1(:,1+size(cM_cA1,2):2*size(cM_cA1,2))=[];

cD1(1:size(cM_cA1,1),:)=[];cD1(:,1:size(cM_cA1,2))=[];

count=count-num;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function pic=merge(cA,cH,cV,cD)

% 該函數實現了對傳入的四個參數矩陣cA,cH,cV,cD合并,其中cA,cH,cV,cD分別代表左上角、右上

% 角、左下角、右下角矩陣,合并結果為輸出矩陣pic

% 取得四個參數矩陣行、列兩維的最大分別值row_max和col_max

temp1=size(cA);temp2=size(cH);temp3=size(cV);temp4=size(cD);

row_max=max([temp1(1),temp2(1),temp3(1),temp4(1)]);

col_max=max([temp1(2),temp2(2),temp3(2),temp4(2)]);

% pic=zeros(2*row_max,2*col_max);

% 與最大分別值row_max和col_max比較,對左上角矩陣擴展置0

if temp1(1)

cA(row_max,col_max)=0;

end

% 與最大分別值row_max和col_max比較,對右上角矩陣擴展置0

if temp2(1)

cH(row_max,col_max)=0;

end

% 與最大分別值row_max和col_max比較,對左下角矩陣擴展置0

if temp3(1)

cV(row_max,col_max)=0;

end

% 與最大分別值row_max和col_max比較,對右下角矩陣擴展置0

if temp4(1)

cD(row_max,col_max)=0;

end

% 合并左上角、右上角、左下角、右下角矩陣生成輸出pic矩陣

pic=[cA,cH;cV,cD];

總結

以上是生活随笔為你收集整理的matlab两个力的合成与分解,[转帖]小波图像分解与合成(例子) - Matlab讨论区 - 振动论坛 动力学,噪声 -......的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。