Matlab
基础是矩阵运算,它的优势就是矩阵运算的程序简洁、快速。虽然也提供了程序流
程的控制语句,如
for
、
while
、
if
、
else
、
switch
、
try
、
catch
等等,但是应少用,特别是循环
语句
for
、
while
,费时费事,编写程序时想法尽量避免过多的循环,能有矩阵运算代替是更
好的选择,这样编出的程序也简单明了。那么实际编程中应如何减少循环而采用矩阵运算
呢?这个问题没有统一的答案,需要结合实际情况,这里举几个例子来说明。
(
1
)图像的小波阈值降噪
利用二维离散小波变换对图像进行降噪是一种常用的图像降噪手段,
其中比较简单典型
的方法就是硬阈值法,
其基本思想是:
对小波分解后的高频系数,
一般认为其绝对值比较大
的主要反映了信号本身的特征,
绝对值比较小的系数反映的多是噪声信息,
于是可以事先确
定一个阈值,当高频系数的绝对值小于阈值时让其为
0
,反之则保留。
这里先用循环的方法编写程序,然后再用矩阵操作的方法编写,请大家对比。
load tire; %
打开一幅图像
[m n]=size(X);
X0=X+randn(m,n).*10; %
加噪声
[cA1,cH1,cV1,cD1] = dwt2(X0,'bior3.7'); %
小波分解
th=60; %
指定一个阈值,可以参考其他资料了解阈值确定方法
[m1 n1]=size(cH1);
for i=1:m1
for j=1:n1
if abs(cH1(i,j))<>
cH1(i,j)=0;
end
if abs(cV1(i,j))<>
cV1(i,j)=0;
end
if abs(cD1(i,j))<>
cD1(i,j)=0;
end
end
end
Xn= idwt2(cA1,cH1,cV1,cD1,'bior3.7'); %
小波重构
figure(1); %
显示原图像、加噪图像、降噪图像
subplot(131);imshow(X,map);
subplot(132);imshow(X0,map);
subplot(133);imshow(Xn,map);
如果不用循环,程序如下: