报错:错误使用 wdencmp (line 98) Invalid argument value. 出错 E_5 (line 74) xd = wdencmp('gbl',c,s,Lo_R,Hi_R,thr,sorh,keepapp);
时间: 2024-01-04 19:03:36 浏览: 414
这个错误通常是因为输入参数`thr`的值不正确导致的。建议检查一下阈值的计算方式是否正确。
如果您使用的是之前的代码,请尝试使用以下代码来手动计算阈值:
```matlab
% 读入cameraman图像
img = imread('cameraman.tif');
% Daubechies小波包三尺度的低通和高通滤波器系数
Lo_D = [0.0352 -0.0854 -0.1350 0.4599 0.8069 0.3327];
Hi_D = [-0.3327 0.8069 -0.4599 -0.1350 0.0854 0.0352];
Lo_R = Hi_D(end:-1:1);
Hi_R = Lo_D(end:-1:1);
% 压缩处理
[c,s] = wavedec2(img,3,Lo_D,Hi_D);
% 手动计算Shannon熵准则所需的阈值
sigma = median(abs(c)) / 0.6745;
thr = sigma * sqrt(2*log(numel(c)));
sorh = 's';
keepapp = 1;
xd = wdencmp('gbl',c,s,Lo_R,Hi_R,thr,sorh,keepapp);
% 显示原始图像和处理结果
figure;
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(xd);
title('处理结果');
```
在这个代码中,我们使用中位数绝对偏差(MAD)来估计噪声的标准差`sigma`,然后手动计算Shannon熵准则所需的阈值`thr`。这个方法比之前的方法更稳健,通常在实践中更可靠。
阅读全文