中值滤波——MATLAB实现
来源:互联网 发布:隔音棉 知乎 编辑:程序博客网 时间:2024/05/22 20:20
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实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 自适应中值滤波及MATLAB实现
- 中值滤波原理及MATLAB算法实现
- 自适应中值滤波及matlab实现
- OpenCV—中值滤波
- 图像平滑-平均滤波、高斯滤波、中值滤波——MATLAB
- matlab中值滤波--medfilt2
- Linux Shell 脚本编程(2)—变量(本地变量&环境变量)和运算符
- 导入导出Excel
- c#窗体相关操作
- java获取当前请求的url地址及各参数
- HDOJ 2083 简易版之最短距离
- 中值滤波——MATLAB实现
- Unicode 和 UTF-8 有何区别?
- 自定义控件画笔画圆
- 如何用construct2制作一个游戏?
- Timer控件相关操作
- HDOJ 2091 空心三角形
- 生产者-消费者模型
- 写给那个茶水妹的《乘风破浪》诞生记
- Linux C编程第二章的10个问题以及解决方案