一维,二维小波变换过程是怎样的分别求其C,C++编写的程序

一维,二维小波变换过程是怎样的分别求其C,C++编写的程序,第1张

>

基于小波变换的多尺度图像边缘检测matlab源代码(在Matlab70下运行)

clear all;

load wbarb;

I = ind2gray(X,map);imshow(I);

I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);

[N,M] = size(I);

h = [0125,0375,0375,0125];

g = [05,-05];

delta = [1,0,0];

J = 3;

a(1:N,1:M,1,1:J+1) = 0;

dx(1:N,1:M,1,1:J+1) = 0;

dy(1:N,1:M,1,1:J+1) = 0;

d(1:N,1:M,1,1:J+1) = 0;

a(:,:,1,1) = conv2(h,h,I,'same');

dx(:,:,1,1) = conv2(delta,g,I,'same');

dy(:,:,1,1) = conv2(g,delta,I,'same');

x = dx(:,:,1,1);

y = dy(:,:,1,1);

d(:,:,1,1) = sqrt(x^2+y^2);

I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]);figure;imshow(I1);

lh = length(h);

lg = length(g);

for j = 1:J+1

lhj = 2^j(lh-1)+1;

lgj = 2^j(lg-1)+1;

hj(1:lhj)=0;

gj(1:lgj)=0;

for n = 1:lh

hj(2^j(n-1)+1)=h(n);

end

for n = 1:lg

gj(2^j(n-1)+1)=g(n);

end

a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same');

dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same');

dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same');

x = dx(:,:,1,j+1);

y = dy(:,:,1,j+1);

dj(:,:,1,j+1) = sqrt(x^2+y^2);

I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0 1]);figure;imshow(I1);

end

生活中需要对一些图像进行处理,比如压缩,去噪,图像增强,图像锐化与钝化,图像融合,图像的分解等,以便对于图像的成分,边缘等细节信息有更加深刻的认识,小波分析由于其固有的时频特性,既可以对图像进行时域分析,也可以对图像进行频率分析,这使得小波分析在图像处理中得到了广泛的应用,本节对其中一些图像处理功能及函数进行讲解:

wavedec2函数用于对图像进行二维小波分解,其函数调用格式如下:

[c,l]=wavedec2(X,n,’wname’);

其中,X表示原始图像,n表示分解层数,wname表示小波函数,c表示各层系数,l表示各层系数对应的长度

ddencmp用于得到全局阀值,其调用格式如下:

[thr,sorh,keepapp]=ddencmp(‘cmp’,’wp’,X);

[thr,sorh,keepapp]=ddencmp(‘cmp’,’wv’,X);

其中cmp表示压缩,wp表示小波包,wv表示小波,X表示原始信号,thr表示阀值,sorh表示阀值类型,s表示软阀值,h表示硬阀值,keepapp=1表示保持近似系数不变

wdencmp用于对数据或图像进行阀值去噪或压缩,其调用格式如下:

[xcomp,c1,l1,perf0,perfl2]=wdencmp(‘gbl’,c,l,’wname’,n,thr,sorh,keepapp);

glb表示利用全局阀值,perf0表示恢复比,perfl2表示压缩比

示例:利用二维小波对图像进行压缩

编写对应的m文件如下:

clc;

load woman;

subplot(1,2,1)

imshow(X,map);

title('原始图像');

[c,l]=wavedec2(X,3,'sym4');

%%获取全局阀值%%

[thr,sorh,keepapp]=ddencmp('cmp','wp',X);

[xcmp,c1,l1,perf0,perfl2]=wdencmp('gbl',c,l,'sym4',3,thr,sorh,keepapp);

subplot(1,2,2)

imshow(xcmp,map);

title('压缩后');

程序运行结果如下图:

小波变换用与图像去噪,噪声会影响图像处理的输入,采集,处理的各个环节及输出结果等全过程,因此对于图像的噪声处理是一个不可忽略的重要的问题,去噪已经成为图像处理中不可或缺的一部分

示例:对图像进行二维小波去噪

编写对应的m文件如下:

load julia;

%%产生噪声信号%%

init=3718025452;

rand('seed',init);

xnoise=X+8rand(size(X));

colormap(map);

subplot(1,3,1)

imshow(X,map);

title('原始信号')

subplot(1,3,2)

imshow(xnoise,map);

title('含有噪声的信号');

%%获取全局阀值%%

[thr,sorh,keepapp]=ddencmp('den','wp',xnoise);

[xden,c1,l1]=wdencmp('gbl',xnoise,'sym4',3,thr,sorh,keepapp);

subplot(1,3,3)

imshow(xden,map);

title('去除噪声后信号');

程序运行结果如下图:

小波分析用于图像增强,图像增强是对图像进行一定处理,使图像比原图更加清晰,视觉效果更好。

示例:利用小波分析对图像进行增强

编写对应的m文件如下:

clc;

load facets;

subplot(1,2,1)

imshow(X,map);

title('原始信号');

[c,l]=wavedec2(X,3,'sym4');

sizec=size(c);

fori=1:sizec(2)

if(c(i)>250)

c(i)=2c(i);

else

c(i)=05c(i);

end

end

y=waverec2(c,l,'sym4');

subplot(1,2,2)

imshow(y,map);

title('增强图像');

程序运行结果如下图:

图像钝化

图像的钝化可以在时域中,也可以在频域中,在时域中处理较为简单,只需要加一个平滑滤波器,使图像中每个点与其邻点做平滑处理即可,在此主要说明图像钝化在频域中的处理。图像钝化是为了突出低频信息,弱化高频信息。

示例:对图像进行频域钝化处理,

编写对应的m文件如下:

load chess;

subplot(1,2,1)

imshow(X,map);

title('原始图像');

[c,l]=wavedec2(X,3,'db4');

sizec=size(c);

fori=1:sizec(2)

if(c(i)>280)

c(i)=c(i)2;

else

c(i)=c(i)05;

end

end

y=waverec2(c,l,'db4');

subplot(1,2,2)

imshow(y,map);

title('采用小波方法钝化图像');

程序运行结果如下图:

图像锐化,与图像钝化刚好相反,是为了突出高频信息,弱化低频信息,从快速变化的成分中分离出系统边界成分,以便进一步识别或者分割等 *** 作。

示例:对图像进行锐化处理

编写对应的m文件如下:

load chess;

subplot(1,2,1)

imshow(X,map);

title('原始图像');

[c,l]=wavedec2(X,3,'db5');

sizec=size(c);

%%突出高频信息,弱化低频信息%%

fori=1:sizec(2)

if(abs(c(i))<280)

c(i)=c(i)2;

else

c(i)=c(i)05;

end

end

y=waverec2(c,l,'db5');

subplot(1,2,2)

imshow(y,map);

title('采用小波方法锐化图像');

程序运行结果如下图:

小波分析用于图像融合

图像融合是将同一图像的两个部分或者不同图像合成一张图,以便合成之后的图形比原来更容易理解。

示例:利用二维小波变换将两幅图像融合在一起

编写对应的m文件如下:

clear all;

load bust;

X1=X;

map1=map;

load woman;

X2=X;

map2=map;

subplot(1,3,1)

imshow(X1,map1);

title('第一幅图像');

subplot(1,3,2)

imshow(X2,map2);

title('第二幅图像');

%%对第二幅图形低频部分和高频部分进行处理%%

fori=1:256

forj=1:256

if(X2(i,j)>120)

X2(i,j)=X2(i,j)2;

else

X2(i,j)=X2(i,j)05;

end

end

end

[c1,l1]=wavedec2(X1,3,'sym4');

[c2,l2]=wavedec2(X2,3,'sym4');

%%对图像进行融合%%

c=c1+c2;

%%减少图像的亮度%%

c=c05;

y=waverec2(c,l1,'sym4');

subplot(1,3,3)

imshow(y,map2);

title('融合后图像');

程序运行结果如下图:

小波分析用于图像分解

对图像分解的目地在于可以更好的观察图像的细节,对图像做出更好的判断,swt2函数用于对图像进行分解,其调用格式如下:

[sa,sh,sv,sd]=swt2(X,N,’wname’);

其中sa,sh,sv,sd分别表示近似系数,水平系数,竖直系数,对角系数,x分解图像,N分解的层数,wname表示小波基名称

示例:对图像进行分解

编写对应的m文件如下:

clear all;

load woman;

[sa,sh,sv,sd]=swt2(X,3,'db3');

s=1;

fori=1:3

subplot(3,4,s)

image(wcodemat(sa(:,:,i),192));

title(['第',num2str(i),'层近似系数']);

subplot(3,4,s+1)

image(wcodemat(sh(:,:,i),192));

title(['第',num2str(i),'层水平系数']);

subplot(3,4,s+2)

image(wcodemat(sv(:,:,i),192));

title(['第',num2str(i),'层竖直系数']);

subplot(3,4,s+3)

image(wcodemat(sd(:,:,i),192));

title(['第',num2str(i),'层对角系数']);

s=s+4;

end

程序运行结果如下图:

以上就是关于一维,二维小波变换过程是怎样的分别求其C,C++编写的程序全部的内容,包括:一维,二维小波变换过程是怎样的分别求其C,C++编写的程序、matlab 小波变换 跪求用Matlab将图像经过小波变换三层分解后得到的低频和高频组合图像的程序。、跪求用MATLAB编写的关于小波变换数字图像数字边缘提取的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存