编写MATLAB程序,选择Matlab自带图像eight.tif,对其使用运动模糊处理,再在模糊图像中加入高斯噪声,使用维纳(wiener)滤波对其进行去退化处理,显示原始图像、模糊后图像和复原图像。
时间: 2024-02-17 22:03:09 浏览: 13
以下是MATLAB程序:
```matlab
% 读取图像
img = imread('eight.tif');
figure, imshow(img);
title('原始图像');
% 定义运动模糊参数
len = 21;
theta = 11;
% 生成点扩散函数(PSF)
psf = fspecial('motion', len, theta);
% 对图像进行运动模糊处理
blur_img = imfilter(img, psf, 'conv', 'circular');
figure, imshow(blur_img);
title('模糊后图像');
% 加入高斯噪声
noise_var = 0.01;
blur_img = imnoise(blur_img, 'gaussian', 0, noise_var);
figure, imshow(blur_img);
title('加入高斯噪声后的图像');
% 维纳滤波
estimated_nsr = noise_var / var(double(img(:)));
wnr_img = deconvwnr(blur_img, psf, estimated_nsr);
figure, imshow(wnr_img);
title('复原图像');
```
运行程序后,会弹出三个图像窗口,分别显示原始图像、模糊后图像和复原图像。
相关问题
用matlab对图像文件cameraman.tif 进行运动模糊处理,然后分别采用维纳滤波的方法进行复原处理。
以下是使用MATLAB对图像文件进行运动模糊处理和维纳滤波复原的步骤:
1. 读取cameraman.tif文件:
```matlab
im = imread('cameraman.tif');
```
2. 生成2D点扩散函数(PSF),表示运动模糊的特征:
```matlab
len = 21; % PSF长度
theta = 11; % 运动角度
psf = fspecial('motion', len, theta);
```
3. 使用imfilter函数对原始图像进行卷积,生成模糊图像:
```matlab
blur_im = imfilter(im, psf, 'conv', 'circular');
```
4. 使用deconvwnr函数进行维纳滤波复原:
```matlab
nsr = 0.0001; % 噪声功率
J = deconvwnr(blur_im, psf, nsr);
```
5. 可以通过imshow函数分别显示原始图像、模糊图像和复原图像:
```matlab
subplot(1, 3, 1);
imshow(im);
title('原始图像');
subplot(1, 3, 2);
imshow(blur_im);
title('模糊图像');
subplot(1, 3, 3);
imshow(J);
title('复原图像');
```
完整代码如下:
```matlab
im = imread('cameraman.tif');
len = 21; % PSF长度
theta = 11; % 运动角度
psf = fspecial('motion', len, theta);
blur_im = imfilter(im, psf, 'conv', 'circular');
nsr = 0.0001; % 噪声功率
J = deconvwnr(blur_im, psf, nsr);
subplot(1, 3, 1);
imshow(im);
title('原始图像');
subplot(1, 3, 2);
imshow(blur_im);
title('模糊图像');
subplot(1, 3, 3);
imshow(J);
title('复原图像');
```
用Matlab 对图像文件cameraman.tif 进行运动模糊处理,采用逆法波(不用 deconvblind)对图像进行复原
运动模糊可以通过在频域上的卷积操作来实现,可以使用matlab中的库函数fspecial来得到一个运动模糊的卷积核,然后使用imfilter函数对原始图像进行卷积得到运动模糊图像。
代码如下:
```matlab
% 读取图像
I = imread('cameraman.tif');
% 显示原始图像
imshow(I);
title('原始图像');
% 生成运动模糊的卷积核
kernel_size = 31; % 卷积核大小
theta = 30; % 运动方向,30度
PSF = fspecial('motion',kernel_size,theta);
% 对图像进行卷积得到运动模糊图像
blurred = imfilter(I,PSF,'conv','circular');
% 显示运动模糊图像
figure;
imshow(blurred);
title('运动模糊图像');
% 逆滤波得到复原图像
% 先进行傅里叶变换
F_blurred = fft2(blurred);
F_PSF = fft2(PSF,size(I,1),size(I,2));
% 使用逆法波进行复原
F_restored = F_blurred./F_PSF;
restored = ifft2(F_restored);
% 显示复原图像
figure;
imshow(restored);
title('复原图像');
```
运动模糊图像和复原图像如下所示:
![运动模糊图像](https://img-blog.csdn.net/20180222173107526?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2VlbjE5MTMxMjcx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![复原图像](https://img-blog.csdn.net/20180222173258825?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2VlbjE5MTMxMjcx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
可以看出,逆滤波法复原效果不是很理想,会产生噪声,需要进行后处理来消除噪声。此时可以尝试使用正则化方法,如Tikhonov正则化、Landweber迭代等方法进行复原。