『壹』 小波閾值去噪MATLAB
不知道怎麼改啊,我也在做小波去噪,是對信號進行處理,可是出來的結果不對
『貳』 急~!求助 matlab小波圖像去噪的源程序...處理.bmp格式的圖像....真的很急!!!郵箱:[email protected] ...
%利用小波變換對8位灰度圖像進行去噪去噪處理,最後顯示信噪比和均方誤差
clear all;clc;
A=imread('d:/photo/fabric/cd4 - 復制.bmp');
subplot(121),imshow(A);title('original imge');
[m,n]=size(A);
A=double(A);
%選取分解小波
display('選擇分解的小波:');
display('enter 1 for haar wavelet');
display('enter 2 for db2 wavelet');
display('enter 3 for db4 wavelet');
display('enter 4 for sym wavelet');
display('enter 5 for sym wavelet');
display('enter 6 for bior wavelet');
display('enter 7 for bior wavelet');
display('enter 8 for mexh wavelet');
display('enter 9 for coif wavelet');
display('enter 10 for meyr wavelet');
display('enter 11 for morl wavelet');
display('enter 12 for rbio wavelet');
display('press any key to quit');
ww=input('enter your choice: ');
switch ww
case 1
wv='haar';
case 2
wv='db2';
case 3
wv='db4' ;
case 4
wv='sym2'
case 5
wv='sym4';
case 6
wv='bior1.1';
case 7
wv='bior6.8';
case 8
wv='mexh';
case 9
wv='coif5';
case 10
wv='dmey';
case 11
wv='mor1';
case 12
wv='jpeg9.7';
otherwise
quit;
end
%選取分解的層數
display('選擇分解層數:');
levels=input('enter 1 or 2 : ');
filtertype=wv;
[C,S]=wavedec2(A,levels,filtertype); %小波分解
var=length(C)-S(size(S,1)-1,1)^2+1;
%{
%第一中去噪方法:用此種方法時,效果與選取分解的層數沒有關系,只與選取的小波有關系
C(var:length(C))=0; %將對角線的高頻系數置零
B=waverec2(C,S,filtertype); %重構圖像
%}
%{
%第二種去噪方法:貝葉斯閾值去噪,對各個高頻系數進行貝葉斯閾值去噪
display('選擇軟閾值或者硬閾值:');
display('enter 1 for soft thresholding');
display('enter 2 for hard thresholding');
sorh=input('sorh: ');
sigmahat=median(abs(C(var:length(C))))/0.6745; %Calculating sigmahat
st=(S(1,1)^2)+1; %低頻系數的個數
bayesC=[C(1:st-1),zeros(1,length(st:1:length(C)))]; %只是保留低頻信息
for jj=2:size(S,1)-1 %行數
%對於水平高頻系數
coeh=C(st:st+S(jj,1)^2-1);
thr=bayes(coeh,sigmahat);
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr);
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr);
end
st=st+S(jj,1)^2;
%對於垂直高頻系數
coev=C(st:st+S(jj,1)^2-1);
thr=bayes(coev,sigmahat);
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coev,thr);
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coev,thr);
end
st=st+S(jj,1)^2;
%對於對角高頻系數
coed=C(st:st+S(jj,1)^2-1);
thr=bayes(coed,sigmahat);
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coed,thr);
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coed,thr);
end
st=st+S(jj,1)^2;
end
B=waverec2(bayesC,S,filtertype); %重構圖像
%}
%{
%第三種方法:採用Donoho和Johnstone提出的固定閾值的方法進行去噪處理
display('選擇軟閾值或者硬閾值:');
display('enter 1 for soft thresholding');
display('enter 2 for hard thresholding');
sorh=input('sorh: ');
st=(S(1,1)^2)+1; %低頻系數的個數
djC=[C(1:st-1),zeros(1,length(st:1:length(C)))]; %只是保留低頻信息
for jj=2:size(S,1)-1 %行數
%對於水平高頻系數
coeh=C(st:st+S(jj,1)^2-1);
sigmah=median(abs(coeh))/0.6745;
thr=sigmah*sqrt(2*log10(length(coeh)));
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr);
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr);
end
st=st+S(jj,1)^2;
%對於垂直高頻系數
coev=C(st:st+S(jj,1)^2-1);
sigmav=median(abs(coev))/0.6745;
thr=sigmav*sqrt(2*log10(length(coev)));
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coev,thr);
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coev,thr);
end
st=st+S(jj,1)^2;
%對於對角高頻系數
coed=C(st:st+S(jj,1)^2-1);
sigmad=median(abs(coed))/0.6745;
thr=sigmav*sqrt(2*log10(length(coed)));
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coed,thr);
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coed,thr);
end
st=st+S(jj,1)^2;
end
B=waverec2(djC,S,filtertype); %重構圖像
%}
subplot(122),imshow(uint8(B));title('de-noised image');
%imwrite(B,'fab5.bmp'); %保存圖像在m文件的路徑中
%計算信噪比
t=0;
for i=1:m
for j=1:n
t=t+(abs(B(i,j)-A(i,j)))^2;
end
end
mse=t/(m*n); %圖像均方誤差
psnr=10*log10((255^2)/mse); %峰值信噪比
display('mse:');
mse
display('psnr:');
psnr
『叄』 小波閾值圖像去噪程序為什麼每次運行類似程序都有這個結果
File "barbara.png" does not exist. Error in ==> wavedenoise_main at 5意思是在主程序wavedenoise_main 第五行出錯,出錯原因是barbara.png文件不存在;
解決方法:第一種方法:你可以把文件barbara.png放在主程序wavedenoise_main這個文件夾;
第二種方法:im=imread('barbara.png'); 改為im=imread('路徑\barbara.png'); 路徑即為你圖片存放的路徑如:d:image\..\
『肆』 matlab中的小波工具箱怎麼用,希望能詳細介紹
將原始數據文件夾到裝有matlab的電腦
打開matlab軟體,進入軟體主界面
在軟體的左下方找到start按鈕,點擊選擇toolbox,然後選擇wavelet
進入wavemenu界面,選擇一維小波中的wavelet1-D並進入
5.將數據文件(.Mat格式)托到matlab軟體主界面的workspace
6.在wavemenu主界面中選擇file-load signal或者import from workspace—import signal
7.選擇要處理的信號,界面出現loaded信號,這就是沒有去噪前的原
始信號
8.右上角選擇用於小波分析的小波基以及分解層數並點擊analyse開始分析
9.分析後在左邊欄目中出現s,a*,d*,其中s為原信號,a*為近似信號,d*為細節信號
10.然後點擊denoise去噪
11.閾值方法常用的有4種fixed(固定閾值),rigorsure,heusure,minmax根據需要選擇,一般情況下rigorsure方式去噪效果較好
12.oft(軟閾值),hard(硬閾值)一般選擇軟閾值去噪後的信號較為平滑
13.在雜訊結構中選擇unscaled white noise,因為在工程應用中的雜訊一般不僅僅含有白雜訊
14.在雜訊結構下面的數值不要隨意改,這是系統默認的去噪幅度
15.點擊denoise開始正式去噪
16.在此窗口下點擊file-save denoised singal,保存輸出去噪後的信號
17.去噪結束
18.去噪結束後,把去噪後信號(.mat格式)拖至matlab主界面的workspace中,與原信號一起打包,以便以後計算統計量
19.Matlab編程計算相關統計量以及特徵量
20.得出統計量和特徵量後結束
『伍』 Matlab中的小波分析工具箱電子書txt全集下載
Matlab中的小波分析工來具箱 txt全集小說源附件已上傳到網路網盤,點擊免費下載:
內容預覽:
『陸』 誰有比較新版本的小波工具箱wavelet toolbox能分享一下嗎
首先,將下載的工具箱文件解壓,將文件夾復制到MATLAB安裝目錄下toolbox文件夾下。
其次,在版MATLAB命令行中輸入權如下命令: >>cd D:\MATLAB7\toolbox\piotr_toolbox % 找到你的工具箱 >> addpath(genpath('D:\MATLAB7\toolbox\piotr_toolbox')) %。
『柒』 跪求用MATLAB編寫的關於小波變換的閾值圖像去噪方法的程序
去找一些國外的博士或是研究生的論文,自己改改就可以了。很簡單的。
『捌』 用matlab實現基於邊緣檢測的圖象小波閾值去噪方法
Press the "Start" button to see a demonstration of
denoising tools in the Wavelet Toolbox.
This demo uses Wavelet Toolbox functions.
% Set signal to noise ratio and set rand seed.
sqrt_snr = 3; init = 2055615866;
% Generate original signal and a noisy version adding
% a standard Gaussian white noise.
[xref,x] = wnoise(3,11,sqrt_snr,init);
% Denoise noisy signal using soft heuristic SURE thresholding
% and scaled noise option, on detail coefficients obtained
% from the decomposition of x, at level 5 by sym8 wavelet.
% Generate original signal and a noisy version adding
% a standard Gaussian white noise.
lev = 5;
xd = wden(x,'heursure','s','one',lev,'sym8');
% Denoise noisy signal using soft SURE thresholding.
xd = wden(x,'rigrsure','s','one',lev,'sym8');
% Denoise noisy signal using fixed form threshold with
% a single level estimation of noise standard deviation.
xd = wden(x,'sqtwolog','s','sln',lev,'sym8');
% Denoise noisy signal using fixed minimax threshold with
% a multiple level estimation of noise standard deviation.
xd = wden(x,'minimaxi','s','sln',lev,'sym8');
% If many trials are necessary, it is better to perform
% decomposition one time and threshold it many times :
% decomposition.
[c,l] = wavedec(x,lev,'sym8');
% threshold the decomposition structure [c,l].
xd = wden(c,l,'minimaxi','s','sln',lev,'sym8');
% Load electrical signal and select a part.
load leleccum; indx = 2600:3100;
x = leleccum(indx);
% Use wdencmp for signal de-noising.
% find default values (see ddencmp).
[thr,sorh,keepapp] = ddencmp('den','wv',x);
% denoise signal using global thresholding option.
xd = wdencmp('gbl',x,'db3',2,thr,sorh,keepapp);
% Some trial examples without commands counterpart.
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 5;
% [xref,x] = wnoise(1,11,sqrt_snr,init);
% Some trial examples without commands counterpart (more).
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 4;
% [xref,x] = wnoise(2,11,sqrt_snr,init);
% Some trial examples without commands counterpart (more).
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 3;
% [xref,x] = wnoise(3,11,sqrt_snr,init);
% Some trial examples without commands counterpart (more).
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 3;
% [xref,x] = wnoise(3,11,sqrt_snr,init);
% Some trial examples without commands counterpart (more).
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 3;
% [xref,x] = wnoise(3,11,sqrt_snr,init);
% Some trial examples without commands counterpart (more).
% Rand initialization: init = 2055615866;
% Square root of signal to noise ratio: sqrt_snr = 3;
% [xref,x] = wnoise(3,11,sqrt_snr,init);
『玖』 要對圖像進行小波變換去噪,可以用哪些圖像處理庫(C/C++)
1.最簡單的方法:
public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{
char[] array = s.toCharArray();
String reverse = ""; //注意這是空串,不是null
for (int i = array.length - 1; i >= 0; i--)
reverse += array[i];
return reverse;
}
3.常用方法的變形:
public static String reverse2(String s)
{
int length = s.length();
String reverse = ""; //注意這是空串,不是null
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;//在字元串前面連接, 而非常見的後面
return reverse;
}
4.C語言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); //知道 char數組和String相互轉化
}
『拾』 求助matlab中的小波工具包
打開matlab軟體,進入軟體主界面在軟體的左下方找到start按鈕,點擊選擇toolbox,然後選擇wavelet進入wavemenu界面,選擇一維小波中的wavelet1-D並進入 7.選擇要處理的信號,界面出現loaded信號,這就是沒有去噪前的原9.分析後在左邊欄目中出現s,a*,d*,其中s為原信號,a*為近似信號,d*為細節信號11.閾值方法常用的有4種fixed(固定閾值),rigorsure,heusure,minmax根據需要選擇,一般情況下rigorsure方式去噪效果較好12.oft(軟閾值),hard(硬閾值)一般選擇軟閾值去噪後的信號較為平滑13.在雜訊結構中選擇unscaled white noise,因為在工程應用中的雜訊一般不僅僅含有白雜訊14.在雜訊結構下面的數值不要隨意改,這是系統默認的去噪幅度16.在此窗口下點擊file-save denoised singal,保存輸出去噪後的信號18.去噪結束後,把去噪後信號(.mat格式)拖至matlab主界面的workspace中,與原信號一起打包,以便以後計算統計量不會用就查幫助文檔啊!waverec函數是不需要你自己加零延拓的,上面的代碼完全不知所謂,waverec函數的使用是要依賴wavedec函數得到的CL組構的,CL組構中存放小波系數的數組C本身就已經延拓了,而且你不知道它對數據延拓了多少,延拓的方式有多種根本不是你這樣直接加零就行的。我發現你很有才,經常提問和編出一些匪夷所思的問題和代碼,不恥下問的精神是好的,但我個人是很不提倡這種做法的,有時間在這打字提問,不如找幾本基礎參考書看看,不了解就查嗎,不明白就往明白搞嗎,但看你這些「新奇」的問題和代碼真很抓狂,自己對於這些基本問題都懶得琢磨,打著勤奮好學,不恥下問的幌子,太沒勁了!哦,看錯了,waverec函數是可以用上面的代碼的,我看成wrcoef函數了,wrcoef函數可以實現waverec、upwlev和upcoef三個函數的功能之和,所以比waverec函數應用簡單,不需要你將其他分量置零,用它實現小波工具箱功能最方便。