matlab避免使用for_Matlab中如何减少循环尽量对矩阵操作

本文探讨了如何使用Matlab的矩阵运算来减少循环,提高图像处理效率,特别是针对小波阈值降噪的算法。通过对比传统的循环实现与矩阵运算的实现方式,展示了矩阵运算在二维离散小波变换降噪中的优势,以硬阈值法为例,说明了如何简化代码并提高降噪速度。
摘要由CSDN通过智能技术生成

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);

如果不用循环,程序如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值