基于小波分析和中值滤波 图像处理 matlab程序

基于小波分析和中值滤波 图像处理 matlab程序,第1张

程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lenabmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。

clear;clc;

%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。

f=imread('Lenabmp');%%读取图像数据,图像只能保存在m文件所在的路径下

d=size(f);

if length(d)>2

f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图

end

T=d(1);

SUB_T=T/2;

% 2进行二维小波分解

l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)

L=T-length(l);

l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂

h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)

h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂

for i=1:T; % 列变换

row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros)fft(f(:,i)') ) )'; % 圆周卷积<->FFT

row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros)fft(f(:,i)') ) )'; % 圆周卷积<->FFT

end;

for j=1:T; % 行变换

line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros)fft(row(j,:)) ) ); % 圆周卷积<->FFT

line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros)fft(row(j,:)) ) ); % 圆周卷积<->FFT

end;

decompose_pic=line; % 分解矩阵

% 图像分为四块

lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)fi(y)

rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)psi(y)

lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)fi(y)

rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)psi(y)

% 3分解结果显示

figure(1);

subplot(2,1,1);

imshow(f,[]); % 原始图像

title('original pic');

subplot(2,1,2);

image(abs(decompose_pic)); % 分解后图像

title('decomposed pic');

figure(2);

% colormap(map);

subplot(2,2,1);

imshow(abs(lt_pic),[]); % 左上方为低频分量--fi(x)fi(y)

title('\Phi(x)\Phi(y)');

subplot(2,2,2);

imshow(abs(rt_pic),[]); % 矩阵右上为--fi(x)psi(y)

title('\Phi(x)\Psi(y)');

subplot(2,2,3);

imshow(abs(lb_pic),[]); % 矩阵左下为--psi(x)fi(y)

title('\Psi(x)\Phi(y)');

subplot(2,2,4);

imshow(abs(rb_pic),[]); % 右下方为高频分量--psi(x)psi(y)

title('\Psi(x)\Psi(y)');

% 5重构源图像及结果显示

% construct_pic=decompose_matrix'decompose_picdecompose_matrix;

l_re=l_zeros(end:-1:1); % 重构低通滤波

l_r=circshift(l_re',1)'; % 位置调整

h_re=h_zeros(end:-1:1); % 重构高通滤波

h_r=circshift(h_re',1)'; % 位置调整

top_pic=[lt_pic,rt_pic]; % 图像上半部分

t=0;

for i=1:T; % 行插值低频

if (mod(i,2)==0)

topll(i,:)=top_pic(t,:); % 偶数行保持

else

t=t+1;

topll(i,:)=zeros(1,T); % 奇数行为零

end

end;

for i=1:T; % 列变换

topcl_re(:,i)=ifft( fft(l_r)fft(topll(:,i)') )'; % 圆周卷积<->FFT

end;

bottom_pic=[lb_pic,rb_pic]; % 图像下半部分

t=0;

for i=1:T; % 行插值高频

if (mod(i,2)==0)

bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持

else

bottomlh(i,:)=zeros(1,T); % 奇数行为零

t=t+1;

end

end

这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定。

是的,是一样的。

a=image_mean;

a=double(a);

[dep,wide]=size(a);

new_image=ones(size(a));

for i=3:dep-2

for j=3:wide-2

new_image(i,j)=median([a(i-2,j-2) a(i-2,j-1) a(i-2,j) a(i-2,j+1) a(i-2,j+2) a(i-1,j-2) a(i-1,j-1) a(i-1,j) a(i-1,j+1) a(i-1,j+2) a(i,j-2) a(i,j-1) a(i,j) a(i,j+1) a(i,j+2) a(i+1,j-2) a(i+1,j-1) a(i+1,j) a(i+1,j+1) a(i+1,j+2) a(i+2,j-2) a(i+2,j-1) a(i+2,j) a(i+2,j+1) a(i+2,j+2)]);

end

end

for i=3:dep-2 %处理每一行的最头上两个和最边上2

new_image(i,1)=new_image(i,3);

new_image(i,2)=new_image(i,3); new_image(i,wide)=new_image(i,wide-2);

new_image(i,wide-1)=new_image(i,wide-2);

end

new_image(1,:)=new_image(3,:); %把第三行的所有元素赋值给第一行

new_image(2,:)=new_image(3,:);

new_image(dep,:)=new_image(dep-2,:);%把倒数第二行的所有元素值赋给最后一行

new_image(dep-1,:)=new_image(dep-2,:);

figure

imshow(uint8(new_image))

第一行是我接着我做的东西的上面来的,表示读入,你可以换成I=imread('F:\exam\Matlab\shibie\1jpg');等,根据情况读入就行了。最后一行我是把它进行了强制转换,你也可以试试不转换看能不能显示。

1、中值滤波的原理:对于一串连续输入的信号(量化后是一组数据)。如下图所示,是输入的原信号。中值滤波的原理为,重新计算每一个x的输出值(y),新的输出值。

相当于y=new(x),new的 *** 作是,从在以x为中心,长度为2k的原信号中(区间为[x-k+1,x+k]),提取出这段区间内中间的那个值,作为y=new(x)的结果。

2、举例来说,输入:Y[1-10]:1,2,3,4,5,6,7,8,9,10取区间2k=4,所以k=2;执行中值滤波K=中值滤波(Y)、由x-k+1>=1,所以当k=2时,x>=2、滤波时:

K[1]=Y[1]

K[2]=(Y[1]、Y[2]、Y[3]、Y[4])的中间值,即为2或3。

3、matlab的中值滤波实现方式:调用函数:A=medfilt1(B,n)、B为输入信号,A为滤波后的信号,即结果。

4、对于输入信号(最开头的图),以下分别为设置区间n=8和n=16得到的滤波图像。中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。

在function medfilt_Callback(hObject, eventdata, handles) 后面输入如下程序

x=(handlesimg);

y=imnoise(x,'salt & pepper',004); %加椒盐噪声

z=medfilt2(y(:,:),[5 5],'symmetric'); %中值滤波

imshow(z);

imwrite(z,'medfiltjpg');

title('zhongzhilvbo');

这个是我刚做完的一个关于GUI的课程设计里的代码,在你添加的那个按钮的callback函数后面添加这段代码就可以了,中间还给加了椒盐噪声。

以上就是关于基于小波分析和中值滤波 图像处理 matlab程序全部的内容,包括:基于小波分析和中值滤波 图像处理 matlab程序、求自适应中值滤波Matlab程序、matlab 中值滤波等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10210121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存