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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mallat算法分析及c语言实现,图像的Mallat算法分解(Matlab代码)

發(fā)布時間:2024/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mallat算法分析及c语言实现,图像的Mallat算法分解(Matlab代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Mallat 算法的分析與綜合框架參考書上的資料很多,這里就不多說了。

下面是我寫的關(guān)于圖像的程序,分別是:一維分解,二維分解;一維合成,二維合成。最后是測試主程序。

謝謝參考,錯了請反饋一下!

%內(nèi)部子函數(shù),對一行(row)矢量進(jìn)行一次小波變換,利用fft實(shí)現(xiàn)

function y=mdec1(x,h,g)

%x 行數(shù)組

%h為低通濾波器

%g為高通濾波器

%輸出: y 進(jìn)行一級小波分解后的系數(shù)

lenx=size(x,2);???????????????? %求行的長度

lenh=size(h,2);???????????????? %求低通濾波器的長度

rh=h(end:-1:1);???????????????? %rh是h的逆序? h0(n)=h(-n)

rrh=[zeros(1,(lenx-lenh)),rh];? %rrg在rg前插入(lenx-lenh))個零

rrh=circshift(rrh',1)';???????? %循環(huán)位移

rg=g(end:-1:1);???????????????? %rg為高通濾波器的逆序g0(n)=g(-n)

rrg=[zeros(1,(lenx-lenh)),rg];? %rrg在rg前插入(lenx-lenh))個零

rrg=circshift(rrg',1)';???????? %循環(huán)位移

r1=dyaddown(ifft(fft(x).*fft(rrh,lenx)),1); %use para 1,下2奇采樣

r2=dyaddown(ifft(fft(x).*fft(rrg,lenx)),1); %use para 1,下2奇采樣

y=[r1,r2];???????????????????? %相加得到小波系數(shù)

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

function Y=mallatdec2(X,wname,level)

%輸入:X????? 載入的二維圖像像數(shù)值;

%???? level? 小波分解次(級)數(shù)設(shè)定值(如果設(shè)定值超過最高可分解次數(shù),按最高分解次數(shù)分解)

%????? wname? 小波名字wavelet name

%輸出:Y???? 多極小波分解后的小波系數(shù)矩陣

%wfilters:小波濾波器

[h,g]=wfilters(wname,'d');??? %h,g分別為分解的低通和高通濾波器

X=double(X);

t=1;

hh=size(X,2);

Y=zeros(1,hh);

while t<=level?? %循環(huán)

%先進(jìn)行行小波變換

for row=1:hh

Y(row,1:hh)=mdec1(X(row,1:hh),h,g) ;

end

%再進(jìn)行列小波變換

for col=1:hh

temp=mdec1( Y(1:hh,col)',h,g); %Y(1:hh,col)為矩陣中的一列,轉(zhuǎn)置后為行向量,得到的結(jié)果temp也是行向量

Y(1:hh,col)=temp';???????????? %將行向量轉(zhuǎn)置為列向量存儲在Y中

end

t=t+1;???????????????????????????? %循環(huán)次數(shù)加1,大于level,循環(huán)終止

hh=hh/2;?????????????????????????? %分解的矩陣的大小為原來的四分之一

X=Y;?????????????????????????????? %將Y值賦給X等待下一次分解

end

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

%內(nèi)部子函數(shù),對一行小波系數(shù)進(jìn)行重構(gòu)

function y=mrec1(x,h,g)

%輸入:x 行數(shù)組

%???? h為低通濾波器

%???? g為高通濾波器

%輸出: y 進(jìn)行一級小波重構(gòu)后值

lenx=size(x,2);

r3=dyadup(x(1,1:lenx*0.5),0);??????? %內(nèi)插零use para 0,上采樣

r4=dyadup(x(1,(lenx*0.5+1):lenx),0); %內(nèi)插零use para 0,上采樣

y=ifft(fft(r3,lenx).*fft(h,lenx))+ ifft(fft(r4,lenx).*fft(g,lenx));

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

%二維小波重構(gòu)函數(shù)

function Y=mallatrec2(X,wname,level)

%輸入:X????? 載入的小波系數(shù)矩陣;

%?? ??level? 小波分解次(級)數(shù)設(shè)定值(如果設(shè)定值超過最高可分解次數(shù),按最高分解次數(shù)分解)

%????? wname? 小波名字wavelet name

%輸出:Y???? 重構(gòu)圖像矩陣

[h,g]=wfilters(wname,'d');%h為重構(gòu)的低通濾波器;g為重構(gòu)高通濾波器

hz=size(X,2);

h1=hz/(2^(level-1));

while h1<=hz

% 對列變換

for col=1:h1

temp=mrec1(X(1:h1,col)',h,g)';

X(1:h1,col)=temp;

end

%再對行變換

for row=1:h1

temp=mrec1(X(row,1:h1),h,g);

X(row,1:h1)=temp;

end

h1=h1*2;

end

Y=X;

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

%測試函數(shù)(主函數(shù))

clc;

clear;

close all;

X=imread('lena.bmp');;%路徑

figure(1);imshow(X);

X=double(X);

level=2;

A = mallatdec2(X,'db4',level);

figure(2);

imshow(uint8(A));title('多尺度分解圖像');

Y= mallatrec2(A,'db4',level);

figure(3);

imshow(uint8(Y));title('重構(gòu)圖像');

總結(jié)

以上是生活随笔為你收集整理的mallat算法分析及c语言实现,图像的Mallat算法分解(Matlab代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。