1 .平均滤波
首先创建medfilter.m文件。 代码如下所示。
function [ output ]=means filter (input,radius )
(() ) ) ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 652 )
% input:噪声图像
% r:图像块半径
%
% auther :高正街
% email :3170601003 @ cuit.edu.cn
% Date: 2017-12-19
(() ) ) ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 652 )
[mn]=size(input ); 获取%图像的矩阵维,并分别分配给m和n
output=Zeros(m,n ); 定义m*n的零矩阵,存储去噪结果图像
input_pad=padarray(input,[radius radius],' symmetric ' ); 通过%边界延长,位于图像边缘的像素点也可以形成图像块。
% symmetric对称地重复边界区域(也称为镜像),放大尺寸为(rr ),f为图像块半径
%例如,[2 3]意味着在垂直方向展开2行,在水平方向展开3列
针对%图像中的各像素点,按每行依次进行局部平均去噪处理
for i=1:m %行
for j=1:n %列
确定%延长图像中要修补的点的坐标
x=i radius;
y=j radius;
%确定当前像素点附近或当前点所在的图像块
neighbordhood=input _ pad (x-radius : xradius,y-radius:y radius );
output(I,j )=median(neighbordhood ) : ); %扁平化整个图像块后取中值
结束
结束
要创建test_medfilter.m文件,请执行以下操作:
clc; 清除%命令窗口的内容
clf; 清除%图表
clear %清除原始变量
颜色映射(gray ); 设置%颜色映射。 颜色贴图是m*3矩阵,每个位置的值为0或1
img=imread(Einstein.jpg );
input=imnoise(img,' salt pepper '; %添加椒盐噪声,默认噪声密度为0.05 (噪声密度是包含噪声值的图像区域的百分比() ) )。
output=medfilter(input,1 ); 取%半径为1,即3*3的图像块
output=uint8(output;
%figure %创建新的图形窗口
%colormap(gray ) %是m*3的矩阵,每个位置的值为0或1
clf %清除图表
subplot (2,3,1 )、imagesc (img )、xlabel ) ' img ); %原图
subplot (2,3,2 )、imagesc (input )、xlabel )、' input '; %有杂色的图像
subplot (2,3,3 )、imagesc (input-img )、xlabel )、' realnoise ' ); %计算并显示相加的噪声
subplot (2,3,4 )、imagesc (output )、xlabel (xlabel )、' output ); %处理后的图像
subplot (2,3,5 )、imagesc (input-output )、xlabel )、' residualsnoise ' ); %计算并显示多噪图像,定性比较去噪结果
将这两个文件放在同一个文件夹下,在matlab中运行test_medfilter.m即可。
2 .中值滤波
首先创建meansfilter.m文件。 代码如下所示。
function [ output ]=means filter (input,radius )
(() ) ) ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 652 )
% input:噪声图像
% r:图像块半径
%
% auther :高正街
% email :3170601003 @ cuit.edu.cn
% Date: 2017-12-19
(() ) ) ) ) (() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 652 )
[mn]=size(input ); 获取%图像的矩阵维,并分别分配给m和n
output=Zeros(m,n ); 定义m*n的零矩阵,存储去噪结果图像
input_pad=padarray(input,[radius radius],' symmetric ' ); 通过%边界延长,位于图像边缘的像素点也可以形成图像块。
% symmetric对称地重复边界区域(也称为镜像),放大尺寸为(rr ),f为图像块半径
%例如,[2 3]意味着在垂直方向展开2行,在水平方向展开3列
weight=(2*radius1) ^2; %算术平均滤波中各像素点的权重
针对%图像中的各像素点,按每行依次进行局部平均去噪处理
for i=1:m %行
for j=1:n %列
确定%延长图像中要修补的点的坐标
x=i radius;
y=j radius;
%确定当前像素点附近或当前点所在的图像块
neighbordhood=input _ pad (x-radius : xradius,y-radius:y radius );
output(I,j )=sum(sum ) neighbordhood ) )/weight;
结束
结束
要创建test_medfilter.m文件,请执行以下操作:
clc; 清除%命令窗口的内容
clf; 清除%图表
clear %清除原始变量
颜色映射(gray ); 设置%颜色映射。 颜色贴图是m*3矩阵,每个位置的值为0或1
img=imread(Einstein.jpg );
input=imnoise(img,' gaussian '; 添加%高斯噪声,默认平均值为0,方差为0.01
output=度量过滤器(input,1 ); 取%半径为1,即3*3的图像块
output=uint8(output;
%figure %创建新的图形窗口
%colormap(gray ) %是m*3的矩阵,每个位置的值为0或1
clf %清除图表
subplot (2,3,1 )、imagesc (img )、xlabel ) ' img ); %原图
subplot (2,3,2 )、imagesc (input )、xlabel )、' input '; %有杂色的图像
subplot (2,3,3 )、imagesc (input-img )、xlabel )、' realnoise ' ); %计算并显示相加的噪声
subplot (2,3,4 )、imagesc (output )、xlabel (xlabel )、' output ); %处理后的图像
subplot (2,3,5 )、imagesc (input-output )、xlabel )、' residualsnoise ' ); %计算并显示多噪图像,定性比较去噪结果
将这两个文件放在同一个文件夹下,在matlab中运行test_medfilter.m即可。
附件
本文于2017年12月19日在CSDN首次发表,2017年12月23日搬到这里!