计算高斯滤波器去噪效果的MATLAB代码
时间: 2023-12-09 19:07:07 浏览: 64
以下是使用MATLAB实现高斯滤波器去噪的代码:
```matlab
% 读入待处理图像
img = imread('lena.jpg');
% 添加高斯噪声
img_noisy = imnoise(img,'gaussian',0,0.01);
% 显示原始图像和带噪声的图像
figure;
subplot(1,2,1);imshow(img);title('Original Image');
subplot(1,2,2);imshow(img_noisy);title('Noisy Image');
% 定义高斯滤波器
G = fspecial('gaussian',[5 5],2);
% 对图像进行高斯滤波
img_filtered = imfilter(img_noisy,G,'same');
% 显示去噪后的图像
figure;
subplot(1,2,1);imshow(img_noisy);title('Noisy Image');
subplot(1,2,2);imshow(uint8(img_filtered));title('Filtered Image');
```
在上述代码中,我们首先读入待处理的图像,然后使用imnoise函数为图像添加高斯噪声。接下来,我们使用fspecial函数定义一个高斯滤波器,其中[5 5]表示滤波器的大小,2表示滤波器的标准差。最后,我们使用imfilter函数对带噪声的图像进行滤波操作,得到去噪后的图像。
相关问题
计算高斯滤波器去噪的平滑度指标的MATLAB代码
好的,以下是MATLAB代码:
```matlab
% 定义高斯滤波器大小和标准差
filter_size = 5;
sigma = 2;
% 生成高斯滤波器
filter = fspecial('gaussian', filter_size, sigma);
% 读入图像
img = imread('lena.png');
% 添加高斯噪声
noisy_img = imnoise(img, 'gaussian', 0, 0.01);
% 对添加噪声的图像进行滤波
filtered_img = imfilter(noisy_img, filter, 'replicate');
% 计算平滑度指标
smoothness = sum(sum(abs(filtered_img - noisy_img))) / numel(img);
% 显示结果图像和平滑度指标
subplot(1, 2, 1);
imshow(noisy_img);
title('Noisy Image');
subplot(1, 2, 2);
imshow(filtered_img);
title(['Filtered Image (Smoothness: ', num2str(smoothness), ')']);
```
其中,`sum`函数用于计算图像的差值之和,`numel`函数用于计算图像的像素数。在计算平滑度指标时,我们可以利用滤波后的图像和添加噪声的图像之间的差值,除以图像的像素数得到平均值。这个平均值越小,说明滤波后的图像越平滑,平滑度指标越高。在显示结果图像时,我们可以将平滑度指标显示在标题中。
计算高斯滤波器去噪的运行时间和计算复杂度的MATLAB代码
好的,以下是MATLAB代码:
```matlab
% 定义高斯滤波器大小和标准差
filter_size = 5;
sigma = 2;
% 生成高斯滤波器
filter = fspecial('gaussian', filter_size, sigma);
% 读入图像
img = imread('lena.png');
% 添加高斯噪声
noisy_img = imnoise(img, 'gaussian', 0, 0.01);
% 对添加噪声的图像进行滤波
start_time = tic; % 记录开始运行时间
filtered_img = imfilter(noisy_img, filter, 'replicate');
end_time = toc(start_time); % 记录结束运行时间
% 显示结果图像
subplot(1, 2, 1);
imshow(noisy_img);
title('Noisy Image');
subplot(1, 2, 2);
imshow(filtered_img);
title('Filtered Image');
% 输出运行时间和计算复杂度
fprintf('运行时间:%f 秒\n', end_time);
fprintf('计算复杂度:%d 次乘法和 %d 次加法\n', numel(filter), numel(filter)*3);
```
其中,`fspecial`函数用于生成高斯滤波器,`imread`函数用于读入图像,`imnoise`函数用于添加高斯噪声,`imfilter`函数用于对添加噪声的图像进行滤波。`tic`和`toc`函数用于记录运行时间。在输出计算复杂度时,我们可以利用高斯滤波器的大小和公式计算出乘法和加法的次数,即 `numel(filter)` 次乘法和 `numel(filter)*3` 次加法。