写一个对图像平滑的Matlab程序,不使用库函数
时间: 2024-03-26 17:34:29 浏览: 160
下面是一种基于均值滤波器的图像平滑算法的 Matlab 程序实现,不使用任何库函数:
```matlab
clc; % 清空命令窗口
clear all; % 清空工作空间
% 读取待处理图像
img = imread('lena.png');
figure; imshow(img); title('原始图像');
% 获取图像的行数和列数
[rows, cols] = size(img);
% 定义均值滤波器的大小和权值
filter_size = 3; % 均值滤波器的大小,这里取3x3的大小
filter_weight = ones(filter_size) / filter_size^2; % 均值滤波器的权值
% 将图像转换为双精度型,方便后续计算
img = double(img);
% 对每一个像素点进行均值滤波
for i = 2 : rows-1
for j = 2 : cols-1
% 取出当前像素点周围的filter_size x filter_size个像素点
subimg = img(i-1:i+1, j-1:j+1);
% 利用均值滤波器对子图像进行平滑处理
smoothed_img(i,j) = sum(sum(subimg .* filter_weight));
end
end
% 将平滑后的图像转换为无符号8位整型,方便显示
smoothed_img = uint8(smoothed_img);
% 显示平滑后的图像
figure; imshow(smoothed_img); title('平滑后的图像');
```
该程序首先使用 `imread` 函数读取一张名为 "lena.png" 的图像,然后获取图像的行数和列数。接着,定义了一个 3x3 的均值滤波器,并将其权值设置为所有元素的均值。程序利用两重循环遍历图像中的每一个像素点,对于每一个像素点,取出其周围的 3x3 个像素点,利用均值滤波器对这 9 个像素点进行平滑处理,计算得到该像素点的平滑值。最后,将平滑后的图像转换为无符号8位整型,并使用 `imshow` 函数显示出来。
注意:该程序中的均值滤波器大小和权值可以根据需要进行调整,但应保证权值之和等于1。同时,该程序只能对灰度图像进行平滑处理,如果需要对彩色图像进行平滑处理,需要对每个颜色通道分别进行处理。
阅读全文