首页 > 编程知识 正文

matlab实现滤波功能,matlab一维中值滤波

时间:2023-05-03 16:16:34 阅读:156856 作者:2904

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日搬到这里!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。