用matlab做分别给定含噪声的模糊图像和不含噪声的模糊图像,通过维纳滤波对图像进行复原。
时间: 2024-02-18 09:59:53 浏览: 30
好的,具体步骤如下:
1. 不含噪声的模糊图像的复原
首先,我们需要对不含噪声的模糊图像进行复原。这里我们以高斯模糊为例,代码如下:
```
I = imread('lena.png'); % 读取原始图像
h = fspecial('gaussian', [5 5], 2); % 生成高斯模糊核
Iblur = imfilter(I, h, 'conv', 'same'); % 进行高斯模糊
J = deconvwnr(Iblur, h, 0.01); % 进行维纳滤波复原
```
其中,`Iblur`为模糊图像,`h`为模糊核,`0.01`为正则化参数,可以根据实际情况进行调整。
2. 含噪声的模糊图像的复原
接下来,我们需要对含噪声的模糊图像进行复原。这里我们以高斯噪声和高斯模糊为例,代码如下:
```
I = imread('lena.png'); % 读取原始图像
h = fspecial('gaussian', [5 5], 2); % 生成高斯模糊核
Inoise = imnoise(I, 'gaussian', 0, 0.01); % 添加高斯噪声
Iblur = imfilter(Inoise, h, 'conv', 'same'); % 进行高斯模糊
K = fft2(Iblur); % 对模糊图像进行傅里叶变换
H = fft2(h, size(I, 1), size(I, 2)); % 对模糊核进行傅里叶变换
S = abs(H).^2 + 0.01; % 计算维纳滤波中的分母
G = conj(H) ./ S; % 计算维纳滤波中的分子
J = real(ifft2(G .* K)); % 进行维纳滤波复原
```
其中,`Inoise`为加噪声的图像,`h`为模糊核,`0.01`为正则化参数,`K`和`H`分别为模糊图像和模糊核的傅里叶变换,`S`为计算维纳滤波中的分母,`G`为计算维纳滤波中的分子,`J`为复原后的图像。
3. 结果展示
最后,我们可以将原始图像、不含噪声的模糊图像和含噪声的模糊图像以及复原图像进行对比展示,代码如下:
```
subplot(2,2,1); imshow(I); title('原始图像');
subplot(2,2,2); imshow(Iblur); title('含噪声的模糊图像');
subplot(2,2,3); imshow(J); title('含噪声的模糊图像的复原');
subplot(2,2,4); imshow(J); title('不含噪声的模糊图像的复原');
```
运行后,就可以得到四张图像的对比展示了。
完整代码如下:
```
I = imread('lena.png'); % 读取原始图像
h = fspecial('gaussian', [5 5], 2); % 生成高斯模糊核
Iblur = imfilter(I, h, 'conv', 'same'); % 进行高斯模糊
J1 = deconvwnr(Iblur, h, 0.01); % 不含噪声的模糊图像的复原
Inoise = imnoise(I, 'gaussian', 0, 0.01); % 添加高斯噪声
Iblur = imfilter(Inoise, h, 'conv', 'same'); % 进行高斯模糊
K = fft2(Iblur); % 对模糊图像进行傅里叶变换
H = fft2(h, size(I, 1), size(I, 2)); % 对模糊核进行傅里叶变换
S = abs(H).^2 + 0.01; % 计算维纳滤波中的分母
G = conj(H) ./ S; % 计算维纳滤波中的分子
J2 = real(ifft2(G .* K)); % 含噪声的模糊图像的复原
subplot(2,2,1); imshow(I); title('原始图像');
subplot(2,2,2); imshow(Iblur); title('含噪声的模糊图像');
subplot(2,2,3); imshow(J1); title('含噪声的模糊图像的复原');
subplot(2,2,4); imshow(J2); title('不含噪声的模糊图像的复原');
```