中值滤波——MATLAB实现
2017-10-07 19:26
295 查看
1、原理
中值滤波能有效抑制噪声。主要采用灰度值排序,把数字图像中一点的值用该点的一个邻域中各点值的中值代替,依次取代像素中心点的灰度值,让原本与周围像素灰度值相差比较大的像素更改为与周围的像素值比较接近的值,从而消除孤立的噪声点。它可以保护图像边缘的同时去除噪声。
实现代码
clear all;
clc;
%图像进行中值滤波,并显示图像
%读进图像
[filename, pathname] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'}, '选择原图片');
%没有图像
if filename == 0
return;
end
picture = imread([pathname, filename]);
[m, n, z] = size(picture);
%转换为灰度图
if z>1
picture = rgb2gray(picture);
end
%给图像加高斯噪声
J=imnoise(picture,'gaussian',0,0.01);
%给图像加椒盐噪声
H = imnoise(picture,'salt & pepper',0.02);
%调用 median_filter( ) 进行处理
result = median_filter(picture, 3);
% 显示处理后的结果
figure(1)
subplot(1,4,1);
imshow(picture);
title('原图片');
subplot(1,4,2);
imshow(J);
title('高斯噪声后的图片');
subplot(1,4,3);
imshow(H);
title('椒盐噪声后的图片');
subplot(1,4,4);
imshow(result);
title('中值滤波后');
//代码保存为 median_filter.m
function [ img ] = median_filter( picture, m )
%中值滤波
%输入:picture:原图,m:模板的大小3*3的模板,此时m=3
%输出:img:中值滤波处理后的图像
n = m;
[ height, width ] = size(picture);
x1 = double(picture);% 将图象中的数据类型从uint8转换存储为double型
x2 = x1;
for i = 1: height-n+1
for j = 1:width-n+1
mb = x1( i:(i+n-1), j:(j+n-1) );%取出模板元素
mb = mb(:);%矩阵的元素以一列输出
mm = median(mb);%取向量中值
x2( i+(n-1)/2, j+(n-1)/2 ) = mm;%对中心元素赋值
end
end
img = uint8(x2);% 将图象中的数据类型从double型转换存储为unit8型
end
3、实验结果
1、原理
中值滤波能有效抑制噪声。主要采用灰度值排序,把数字图像中一点的值用该点的一个邻域中各点值的中值代替,依次取代像素中心点的灰度值,让原本与周围像素灰度值相差比较大的像素更改为与周围的像素值比较接近的值,从而消除孤立的噪声点。它可以保护图像边缘的同时去除噪声。
实现代码
clear all;
clc;
%图像进行中值滤波,并显示图像
%读进图像
[filename, pathname] = uigetfile({'*.jpg'; '*.bmp'; '*.gif'}, '选择原图片');
%没有图像
if filename == 0
return;
end
picture = imread([pathname, filename]);
[m, n, z] = size(picture);
%转换为灰度图
if z>1
picture = rgb2gray(picture);
end
%给图像加高斯噪声
J=imnoise(picture,'gaussian',0,0.01);
%给图像加椒盐噪声
H = imnoise(picture,'salt & pepper',0.02);
%调用 median_filter( ) 进行处理
result = median_filter(picture, 3);
% 显示处理后的结果
figure(1)
subplot(1,4,1);
imshow(picture);
title('原图片');
subplot(1,4,2);
imshow(J);
title('高斯噪声后的图片');
subplot(1,4,3);
imshow(H);
title('椒盐噪声后的图片');
subplot(1,4,4);
imshow(result);
title('中值滤波后');
//代码保存为 median_filter.m
function [ img ] = median_filter( picture, m )
%中值滤波
%输入:picture:原图,m:模板的大小3*3的模板,此时m=3
%输出:img:中值滤波处理后的图像
n = m;
[ height, width ] = size(picture);
x1 = double(picture);% 将图象中的数据类型从uint8转换存储为double型
x2 = x1;
for i = 1: height-n+1
for j = 1:width-n+1
mb = x1( i:(i+n-1), j:(j+n-1) );%取出模板元素
mb = mb(:);%矩阵的元素以一列输出
mm = median(mb);%取向量中值
x2( i+(n-1)/2, j+(n-1)/2 ) = mm;%对中心元素赋值
end
end
img = uint8(x2);% 将图象中的数据类型从double型转换存储为unit8型
end
3、实验结果
相关文章推荐
- 均值滤波、中值滤波的matlab实现
- 自适应中值滤波及matlab实现
- 均值滤波、中值滤波的matlab实现
- 中值滤波 matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- Matlab、ISE联合开发实例之中值滤波(二)FPGA硬件架构实现
- Matlab、ISE联合开发实例之中值滤波(一)Matlab实现
- 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
- 中值滤波原理及MATLAB算法实现
- [图像]中值滤波(Matlab实现)
- 自适应中值滤波及MATLAB实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 用matlab实现中值滤波
- 均值滤波、中值滤波的matlab实现
- 施密特正交化(GS)相位提取算法-----MATLAB实现
- PCA检测人脸的简单示例_matlab实现
- C++和Matlab最常用的编程技能,实现复杂算法的基础