matlab5*5均值滤波代码
时间: 2023-11-15 17:06:39 浏览: 67
以下是一个基本的5x5平均滤波器的MATLAB代码:
```
% 读取图像
img = imread('image.jpg');
% 定义5x5平均滤波器
filter = ones(5,5) / 25;
% 在图像上应用滤波器
filtered_img = imfilter(img, filter);
% 显示原始图像和过滤后的图像
subplot(1,2,1), imshow(img), title('原始图像');
subplot(1,2,2), imshow(filtered_img), title('平均滤波后的图像');
```
在这个代码中,`imread`函数用于读取图像,`ones`函数创建一个5x5的矩阵,并将所有元素初始化为1。除以25是为了计算平均值。然后,`imfilter`函数用于应用滤波器,生成过滤后的图像。最后,使用`subplot`和`imshow`函数显示原始图像和过滤后的图像。
相关问题
MATLAB3*3均值滤波代码
以下是MATLAB中实现3*3均值滤波的代码:
```matlab
function img_filtered = mean_filter(img)
[m,n] = size(img);
img_filtered = zeros(m,n);
for i = 2:m-1
for j = 2:n-1
% 3*3均值滤波
img_filtered(i,j) = mean(mean(img(i-1:i+1,j-1:j+1)));
end
end
end
```
其中,`img`为原始图像,`img_filtered`为滤波后的图像。在循环中,对于每个像素点,取其周围3*3个像素的平均值作为滤波后的像素值。需要注意的是,由于边缘像素无法取到3*3个像素,因此在循环时需要从第二行第二列开始循环,到倒数第二行倒数第二列结束。
对于给定图像lena.bmp,首先调用matlab的图像工具箱函数实现5*5的均值滤波,然后在不调用图像工具箱函数的情况下实现该图像的3*3均值滤波,最后将两个滤波结果相减,可以对比两种滤波图像的差别。请写出matlab程序。
好的,以下是matlab代码实现:
```matlab
% 读取图像lena.bmp
img = imread('lena.bmp');
% 使用matlab的图像工具箱实现5*5的均值滤波
img1 = imfilter(img, fspecial('average', [5 5]));
% 自己实现3*3均值滤波
h = ones(3) / 9;
img2 = conv2(img, h, 'same');
% 将两个滤波结果相减
img_diff = img1 - img2;
% 显示三张图像
subplot(1, 3, 1), imshow(img1), title('5*5均值滤波');
subplot(1, 3, 2), imshow(img2), title('3*3均值滤波');
subplot(1, 3, 3), imshow(img_diff), title('两者差别');
```
上述代码中,`imread` 函数用于读取图像,`imfilter` 函数用于实现5*5的均值滤波,`fspecial` 函数生成指定大小的特殊滤波器,`ones` 函数生成全部为1的矩阵,`conv2` 函数用于实现2D卷积运算,`same` 参数表示输出与原图像相同大小的图像。最后使用 `imshow` 函数显示图像。
阅读全文