去噪演算法代碼
『壹』 編寫用均值濾波去噪的matlab程序,用兩種方法實現.(重謝)
方法一:filter2
clearall;
I=imread('lena.bmp');
%讀入預處理圖像
imshow(I)
%顯示預處理圖像
K1=filter2(fspecial('average',3),I)/255;
%進行3*3均值濾波
K2=filter2(fspecial('average',5),I)/255;
%進行5*5均值濾波
K3=filter2(fspecial('average',7),I)/255;
%進行7*7均值濾波
figure,imshow(K1)
figure,imshow(K2)
figure,imshow(K3)
方法二:雙循環語句,移動平均法
%均值濾波
clc,clear;
f=imread('lena.bmp');
subplot(121),imshow(f),title('原圖');
f1=imnoise(f,'gaussian',0.002,0.0008);
%subplot(222),imshow(f1),title('添加高斯雜訊圖');
k1=floor(3/2)+1;
k2=floor(3/2)+1;
X=f1;
[M,N]=size(X);
uint8Y=zeros(M,N);
funBox=zeros(3,3);
fori=1:M-3
forj=1:N-3
funBox=X(i:i+3,j:j+3);
s=sum(funBox(:));
h=s/9;
Y(i+k1,j+k2)=h;
end;
end;
Y=Y/255;
subplot(122),imshow(Y),title('均值濾波');
實現圖:
『貳』 關於圖像去噪的matlab代碼
I
=
imread('a.png');%讀圖像
J
=
imnoise(I,'salt
&
pepper',0.02);%加椒鹽雜訊
K
=
medfilt2(J);%用中值濾波去雜訊。
imshow(K);
如果效果不好,加上圖片問我。
『叄』 matlab語音去噪程序代碼
subplot(2,2,3);plot(magY)
subplot(2,2,4);plot(angY)
是不是你窗口分區分錯了,為什麼會有3,4
『肆』 MATLAB閾值去噪代碼問題
for 循環寫錯了 ij 寫成mn了
『伍』 數字圖像處理clean演算法的MATLAB代碼
圖像去噪是數字圖像處理中的重要環節和步驟。去噪效果的好壞直接影響到後續的圖像處理工作如圖像分割、邊緣檢測等。圖像信號在產生、傳輸過程中都可能會受到雜訊的污染,一般數字圖像系統中的常見雜訊主要有:高斯雜訊(主要由阻性元器件內部產生)、椒鹽雜訊(主要是圖像切割引起的黑圖像上的白點雜訊或光電轉換過程中產生的泊松雜訊)等;
目前比較經典的圖像去噪演算法主要有以下三種:
均值濾波演算法:也稱線性濾波,主要思想為鄰域平均法,即用幾個像素灰度的平均值來代替每個像素的灰度。有效抑制加性雜訊,但容易引起圖像模糊,可以對其進行改進,主要避開對景物邊緣的平滑處理。
中值濾波:基於排序統計理論的一種能有效抑制雜訊的非線性平滑濾波信號處理技術。中值濾波的特點即是首先確定一個以某個像素為中心點的鄰域,一般為方形鄰域,也可以為圓形、十字形等等,然後將鄰域中各像素的灰度值排序,取其中間值作為中心像素灰度的新值,這里領域被稱為窗口,當窗口移動時,利用中值濾波可以對圖像進行平滑處理。其演算法簡單,時間復雜度低,但其對點、線和尖頂多的圖像不宜採用中值濾波。很容易自適應化。 Wiener維納濾波:使原始圖像和其恢復圖像之間的均方誤差最小的復原方法,是一種自適應濾波器,根據局部方差來調整濾波器效果。對於去除高斯雜訊效果明顯。
實驗一:均值濾波對高斯雜訊的效果
I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');%讀取圖像
『陸』 請問如何在matlab中對信號進行去噪操作。最好用函數的形式,方便其他程序調用
matlab 只是一個編程工具,像c,c++,Java,等,去噪演算法是根據雜訊的類型,圖像的類型進行設計的,不是萬能的,現在對自然圖像去噪的兩大經典演算法:DL:KSVD, BM:BM3D
『柒』 用MATLAB實現頻域平滑濾波以及圖像去噪代碼
%%%%%%%%spatial frequency (SF) filtering by low pass filter%%%%%%%%
% the SF filter is unselective to orientation (doughnut-shaped in the SF
% domain).
[FileName,PathName,FilterIndex] = uigetfile ;
filename = fullfile(PathName, FileName) ;
[X map] = imread(filename, fmt); % read image
L = double(X); % transform to double
%%%%%%%%%%%%% need to add (-1)x+y to L
% calculate the number of points for FFT (power of 2)
fftsize = 2 .^ ceil(log2(size(L)));
% 2d fft
Y = fft2(X, fftsize(1), fftsize (2));
Y = fftshift(Y);
% obtain frequency (cycles/pixel)
f0 = floor([m n] / 2) + 1;
fy = ((m: -1: 1) - f0(1) + 1) / m;
fx = ((1: n) - f0(2)) / n;
[mfx mfy] = meshgrid(fx, fy);
% calculate radius
SF = sqrt(mfx .^ 2 + mfy .^ 2);
% SF-bandpass and orientation-unselective filter
filt = SF > k0;
A_filtered = filt .* A; % SF filtering
L_filtered = real(ifft2(ifftshift(A_filtered))); % IFFT
L_filtered = L_filtered(1: size(L, 1), 1: size(L, 2));
%%%%%%%%%%need to add (-1)x + y to L_filtered
% show
figure(1);
clf reset;
colormap gray;
% plot image
subplot(2, 2, 1);
imagesc(L);
colorbar;
axis square;
set(gca, 'TickDir', 'out');
title('original image');
xlabel('x');
ylabel('y');
imwrite(L, fullfile(FilePath, 'original image.bmp'), 'bmp') ;
% plot amplitude
A = abs(A);
A = log10(A);
% spectral amplitude
subplot(2, 2, 2);
imagesc(fx, fy, A);
axis xy;
axis square;
set(gca, 'TickDir', 'out');
title('amplitude spectrum');
xlabel('fx (cyc/pix)');
ylabel('fy (cyc/pix)');
imwrite(A, fullfile(FilePath, 'amplitude spectrum.bmp'), 'bmp') ;
% filter in the SF domain
subplot(2, 2, 3);
imagesc(fx, fy, filt);
axis xy;
axis square;
set(gca, 'TickDir', 'out');
title('filter in the SF domain');
xlabel('fx (cyc/pix)');
ylabel('fy (cyc/pix)');
imwrite(filt, fullfile(FilePath, 'filter in SF.bmp'), 'bmp') ;
% filtered image
subplot(2, 2, 4);
imagesc(L_filtered);
colorbar;
axis square;
set(gca, 'TickDir', 'out');
title('filtered image');
xlabel('x');
ylabel('y');
imwrite(filtered, fullfile(FilePath, 'filtered image.bmp'), 'bmp');
%%%%%%%%%%%%%%%%%median filter%%%%%%%%%%%%%%%%
[FileName,PathName,FilterIndex] = uigetfile ;
filename = fullfile(PathName, FileName) ;
[LNoise map] = imread(filename, fmt); % read image
L = medfilt2(LNoise, [3 3]); % remove the noise with 3*3 block
figure ;
imshow(LNoise) ;
title('image before fitlering') ;
figure
imshow(L)
title('filtered image') ;
imwrite(FilePath, 'filtered image.bmp', bmp)
『捌』 跪求一個emd 去噪的程序 matlab 代碼 帶中文解釋的 方便理解
function imf = emd(x,n);%%最好把函數名改為emd1之類的,以免和Grilling的emd沖突
%%n為你想得到的IMF的個數
c = x('; % of the input signal (as a row vector)
N = length(x);-
% loop to decompose the input signal into n successive IMFs
imf = []; % Matrix which will contain the successive IMF, and the resiefor t=1:n
% loop on successive IMFs
%-------------------------------------------------------------------------
% inner loop to find each imf
h = c; % at the beginning of the sifting process, h is the signal
SD = 1; % Standard deviation which will be used to stop the sifting process
while SD > 0.3 % while the standard deviation is higher than 0.3 (typical value) %%篩選停止准則
% find local max/min points
d = diff(h); % approximate derivative %%求各點導數
maxmin = []; % to store the optima (min and max without distinction so far)
for i=1:N-2
if d(i)==0 % we are on a zero %%導數為0的點,即」駐點「,但駐點不一定都是極值點,如y=x^3的x=0處
if sign(d(i-1))~=sign(d(i+1)) % it is a maximum %%如果駐點兩側的導數異號(如一邊正,一邊負),那麼該點為極值點
maxmin = [maxmin, i]; %%找到極值點在信號中的坐標(不分極大值和極小值點)
end
elseif sign(d(i))~=sign(d(i+1)) % we are straddling a zero so%%如y=|x|在x=0處是極值點,但該點倒數不存在,所以不能用上面的判
斷方法
maxmin = [maxmin, i+1]; % define zero as at i+1 (not i) %%這里提供了另一類極值點的判斷方法
end
end
if size(maxmin,2) < 2 % then it is the resie %%判斷信號是不是已經符合殘余分量定義
break
end
% divide maxmin into maxes and mins %% 分離極大值點和極小值點
if maxmin(1)>maxmin(2) % first one is a max not a min
maxes = maxmin(1:2:length(maxmin));
mins = maxmin(2:2:length(maxmin));
else % is the other way around
maxes = maxmin(2:2:length(maxmin));
mins = maxmin(1:2:length(maxmin));
end % make endpoints both maxes and mins
maxes = [1 maxes N];
mins = [1 mins N];
%------------------------------------------------------------------------- % spline interpolate to get max and min envelopes; form imf
maxenv = spline(maxes,h(maxes),1:N); %%用樣條函數插值擬合所有的極大值點
minenv = spline(mins, h(mins),1:N); %%用樣條函數插值擬合所有的極小值點
m = (maxenv + minenv)/2; % mean of max and min enveloppes %%求上下包絡的均值
prevh = h; % of the previous value of h before modifying it %%h為分解前的信號
h = h - m; % substract mean to h %% 減去包絡均值
% calculate standard deviation
eps = 0.0000001; % to avoid zero values
SD = sum ( ((prevh - h).^2) ./ (prevh.^2 + eps) ); %% 計算停止准則
end
imf = [imf; h]; % store the extracted IMF in the matrix imf
% if size(maxmin,2)<2, then h is the resie
% stop criterion of the algo. if we reach the end before n
if size(maxmin,2) < 2
break
end
c = c - h; % substract the extracted IMF from the signal
end
return
參考資料
http://..com/link?url=5jhgpTXu95SDRgi_
『玖』 Java圖像去噪怎麼實現
流程不外乎是
讀取圖像文件;
掃描噪點;
去除噪點;
保存圖像文件。
Java2D操作好像使用BufferedImage讀取圖像文件最方便,有一陣沒弄這了,忘了。應該可以讀取JPG,PNG,GIF圖像。
識別噪點應該有專門的演算法,我沒研究過,網路一下應該能找到專門演算法,然後寫段代碼就可以。我個人以為是獨立一個像素與周圍一定范圍內的像素差異過大,就認為是噪點。可以有亮度,色相上的差別。BufferedImage可以讀取每個像素的RGB,從而能識別色相的差別;還有個矩陣,用來由RGB計算亮度的,也就可以計算亮度差別了,這個網上都能找到。
輸出也使用BufferedImage就可以。
關鍵是每個像素都要和周圍像素比較,還要計算亮度,最少是三重循環了,如何提高效率是個大問題了。這個代碼寫好了也算一個高手了。