去噪算法代码
‘壹’ 编写用均值滤波去噪的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就可以。
关键是每个像素都要和周围像素比较,还要计算亮度,最少是三重循环了,如何提高效率是个大问题了。这个代码写好了也算一个高手了。