在matlab中中值滤波,均值滤波和高斯滤波进行均值,方差,标准差对比的代码
时间: 2023-06-13 22:09:15 浏览: 177
以下是在 MATLAB 中实现中值滤波、均值滤波和高斯滤波,并计算它们的均值、方差和标准差的示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 转换为灰度图像
grayImg = rgb2gray(img);
% 中值滤波
medImg = medfilt2(grayImg);
% 均值滤波
meanImg = imfilter(grayImg, fspecial('average', [3,3]));
% 高斯滤波
gaussianImg = imgaussfilt(grayImg);
% 计算均值、方差和标准差
meanMed = mean(medImg(:));
meanMean = mean(meanImg(:));
meanGaussian = mean(gaussianImg(:));
varMed = var(double(medImg(:)));
varMean = var(double(meanImg(:)));
varGaussian = var(double(gaussianImg(:)));
stdMed = std(double(medImg(:)));
stdMean = std(double(meanImg(:)));
stdGaussian = std(double(gaussianImg(:)));
% 显示结果
disp(['中值滤波:均值 = ', num2str(meanMed), ',方差 = ', num2str(varMed), ',标准差 = ', num2str(stdMed)]);
disp(['均值滤波:均值 = ', num2str(meanMean), ',方差 = ', num2str(varMean), ',标准差 = ', num2str(stdMean)]);
disp(['高斯滤波:均值 = ', num2str(meanGaussian), ',方差 = ', num2str(varGaussian), ',标准差 = ', num2str(stdGaussian)]);
figure;
subplot(2,2,1), imshow(grayImg), title('原图');
subplot(2,2,2), imshow(medImg), title('中值滤波');
subplot(2,2,3), imshow(meanImg), title('均值滤波');
subplot(2,2,4), imshow(gaussianImg), title('高斯滤波');
```
在这个示例中,我们首先读取了一个彩色图像 `img`,然后将其转换为灰度图像 `grayImg`。接下来,使用 `medfilt2` 函数实现中值滤波,使用 `imfilter` 函数和 `fspecial` 函数实现均值滤波,使用 `imgaussfilt` 函数实现高斯滤波。最后,使用 `mean`、`var` 和 `std` 函数计算均值、方差和标准差,并将结果显示出来。我们还使用 `imshow` 函数分别显示了原图和三种滤波后的图像。
阅读全文