上述代码报错:错误使用 var (line 74) 数据类型无效。第一个输入参数必须为单精度值或双精度值。 出错 E_6 (line 45) estimated_nsr = noise_var / var(cameraman(:));
时间: 2024-02-18 12:05:17 浏览: 84
抱歉,这是因为 `var` 函数的输入必须是单精度或双精度值,而 `cameraman` 是无符号的8位整数。你可以将其转换为双精度类型来解决这个问题,如下:
```matlab
% 读入cameraman图像
cameraman = imread('cameraman.tif');
% 进行运动模糊
PSF = fspecial('motion', 20, 45);
motion_blur = imfilter(cameraman, PSF, 'conv', 'circular');
% 加入高斯噪声
noise_mean = 0;
noise_var = 0.0001;
motion_blur = imnoise(motion_blur, 'gaussian', noise_mean, noise_var);
% 恢复退化图像
cameraman = im2double(cameraman);
motion_blur = im2double(motion_blur);
estimated_nsr = noise_var / var(cameraman(:));
cameraman_b_n = deconvblind(motion_blur, PSF, 10, estimated_nsr);
% 计算峰值信噪比PSNR
PSNR = psnr(cameraman, cameraman_b_n);
% 在一个窗口中显示原始图像,退化图像和恢复结果
figure;
subplot(1,3,1); imshow(cameraman); title('Original Image');
subplot(1,3,2); imshow(motion_blur); title('Degraded Image');
subplot(1,3,3); imshow(cameraman_b_n); title('Restored Image');
% 输出PSNR结果
disp(['PSNR: ', num2str(PSNR), ' dB']);
```
这样就解决了 `var` 函数的问题。
阅读全文