1.建立个人的文件夹,将实验所需图片素材放置于文件夹之中。2. 打开matlab, 新建一个m文件,保存于个人文件夹当中,文件名形如’medianfilter.m’。 3. 在新建的m文件中编写图像边缘延拓处理代码(函 数) ,实现对图像边缘延拓。 4. 在新建的m文件中编写中值提取代码(函数),实现提取一个数字序列的中值功能。 编写图像中值滤波函数,输入参数:(I,m,n), 输出参数:IO 6. 新建测试代码文件,如’Exam2.m’,读取一张有椒盐噪声的图像,调用中值滤波函数,输出降噪后的图像,显示原始图像和降噪后的图像。 7. 改变中值滤波窗口大小,使用不同的窗口分别调用中值滤波函数, 观察对比降噪效果。
时间: 2024-03-31 10:36:29 浏览: 77
在文件中查找和替换:对 MATLAB .m 文件的文件夹结构执行查找和替换操作。-matlab开发
以下是matlab代码实现:
% 图像边缘延拓处理函数
function img_ext = imageExtension(img, ext_size)
% 获取图像尺寸
[rows, cols] = size(img);
% 创建新的图像矩阵,用于存储扩展后的图像
img_ext = zeros(rows+2*ext_size, cols+2*ext_size);
% 将原始图像复制到新的图像矩阵中心位置
img_ext(ext_size+1:rows+ext_size, ext_size+1:cols+ext_size) = img;
% 处理左、右两列
img_ext(ext_size+1:rows+ext_size, 1:ext_size) = img(:,1:ext_size);
img_ext(ext_size+1:rows+ext_size, cols+ext_size+1:end) = img(:,end-ext_size+1:end);
% 处理上、下两行
img_ext(1:ext_size, :) = img_ext(ext_size+1,:);
img_ext(rows+ext_size+1:end, :) = img_ext(rows+ext_size,:);
end
% 中值提取函数
function median = medianFilter(data)
% 获取数据长度
n = length(data);
% 对数据进行排序
data = sort(data);
% 如果数据长度为偶数,取中间两个数的平均值
if mod(n, 2) == 0
median = (data(n/2) + data(n/2+1)) / 2;
% 如果数据长度为奇数,取中间数
else
median = data((n+1)/2);
end
end
% 图像中值滤波函数
function IO = medianFilterImage(I, m, n)
% 获取图像尺寸
[rows, cols] = size(I);
% 创建新的图像矩阵,用于存储滤波后的图像
IO = zeros(rows, cols);
% 对图像进行边缘延拓
I_ext = imageExtension(I, floor(n/2));
% 遍历图像像素
for i = 1:rows
for j = 1:cols
% 提取滤波窗口内的像素值
window = I_ext(i:i+m-1, j:j+n-1);
% 对窗口内的像素值进行排序并取中间值
median = medianFilter(window(:));
% 将中值赋值给当前像素
IO(i,j) = median;
end
end
end
% 测试代码
% 读取有椒盐噪声的图像
I = imread('lena_salt_and_pepper.png');
% 显示原始图像
subplot(1,2,1);
imshow(I);
title('Original Image');
% 调用中值滤波函数
IO = medianFilterImage(I, 3, 3);
% 显示降噪后的图像
subplot(1,2,2);
imshow(IO);
title('Denoised Image');
以上代码中,中值滤波函数使用边缘延拓后的图像进行滤波操作,遍历图像像素时提取滤波窗口内的像素值,对其进行排序并取中间值,并将中值赋值给当前像素。测试代码读取有椒盐噪声的图像,调用中值滤波函数进行降噪操作,并显示原始图像和降噪后的图像。可以通过改变中值滤波窗口大小,使用不同的窗口分别调用中值滤波函数,观察对比降噪效果。
阅读全文