数字图像处理之平滑滤波

数字图像处理之平滑滤波

                                         by方阳

版权声明:本文为博主原创文章,转载请标出转载地址

http://www.cnblogs.com/fydeblog/p/6590343.html

1.相关知识

今天介绍平滑滤波的一些知识!

相关知识:均值模板和中值滤波

例如,3X3均值模板(取图像相邻区域的像素求和取平均代替中心像素,更高次类似)

[ 1 1 1

  1 1 1

  1 1 1]

然后说说中值滤波,还是以3X3来说,将3X3区域内的像素按大小值进行排列,取中间的值代替模板中心的值。

好了,基础说完了,来实际操作吧!

2.内容代码

2.1 选择一副具有大小尺寸的物体图像,分别选择 3×3,7×7,25×25 等平均模板进行均值滤波模糊处理,并对不同尺寸的滤波器模板操作后的图像进行比较。

参考代码:

I=imread('fig620.jpg');
I1=fy_Mean_filter(I,3);
I2=fy_Mean_filter(I,7);
I3=fy_Mean_filter(I,25);
figure;
subplot(1,3,1);
imshow(I1);
title('3X3');
subplot(1,3,2);
imshow(I2);
title('7X7');
subplot(1,3,3);
imshow(I3);
title('25X25');

 fy_Mean_filter函数参考代码:

%实现均值滤波器
%image_in为输入图像,N选择几乘几的算子,image_out为输出图像
%  by 方阳
function image_out=fy_Mean_filter(image_in,N)
[m,n]=size(image_in);
N=ones(N);
[a,b]=size(N);
 n=n/3;%由于我的灰度图像是314x323x3的,所以除了3,你们如果是PxQ的,就不要加了
 A=zeros(m+2*(a-1),n+2*(b-1));%构造矩阵(0填充)
 B=A;%用来存放均值后A的值
 C=zeros(m,n);%存最后的输出结果
 for i=a:m+a-1
     for j=b:n+b-1
        A(i,j)= image_in(i-a+1,j-b+1);%填充图像到A
     end
 end
 [L,T]=size(A);
 %以下是实现均值相关运算
 for i=1:L-a+1
     for j=1:T-b+1
         for p=1:a
             for q=1:b
             B(i+(a-1)/2,j+(b-1)/2)=B(i+(a-1)/2,j+(b-1)/2)+A(p+i-1,q+j-1);
             end
         end
     end
 end
B=uint8(B/(a*b));
 %对运算完的B进行剪切,恢复出均值后的图像
 for x=a:m+a-1
     for y=b:n+b-1
     C(x-a+1,y-b+1)=B(x,y);
     end
 end
image_out=uint8(C);

 运行结果:

可见模板越大,图像越平滑,但也越模糊。

2.2 选择一副图像,对图像加入椒盐噪声,检验两种滤波模板(3×3 平均模板和 3×3 中值滤波器)对噪声的滤波效果。

参考代码:

I4=imread('lena.bmp');
I5=imnoise(I4,'salt & pepper',0.02);
I6=fy_Mean_filter(I5,3);
I7=fy_Mid_Filter(I5,3);
figure;
subplot(2,2,1);
imshow(I4);
title('原图');
subplot(2,2,2);
imshow(I5);
title('加椒盐噪声后的图像');
subplot(2,2,3);
imshow(I6);
title('均值滤波后的图像');
subplot(2,2,4);
imshow(I7);
title('中值滤波后的图像');

 fy_Mid_Filter函数的参考代码(与fy_Mean_filter类似):

%该函数实现中值滤波
function image_out=fy_Mid_Filter(image_in,N)
[m,n]=size(image_in);
n=n/3;
A=zeros(m+2*(N-1),n+2*(N-1));%构造矩阵
B=A;%用来存放均值后A的值
C=zeros(m,n);%存最后的输出结果
 for i=N:m+N-1
     for j=N:n+N-1
        A(i,j)= image_in(i-N+1,j-N+1);%填充图像到A
     end
 end
  [L,T]=size(A);
  for i=1:L-N+1
     for j=1:T-N+1
         c=A(i:i+(N-1),j:j+(N-1));
         e=c(1,:);      %是c矩阵的第一行  
        for u=2:N  
            e=[e,c(u,:)];     %将c矩阵变为一个行矩阵      
        end  
        mm=median(e);      %mm是中值  
        B(i+(N-1)/2,j+(N-1)/2)=mm;
     end
  end
 for x=N:m+N-1
     for y=N:n+N-1
     C(x-N+1,y-N+1)=B(x,y);
     end
 end
 image_out=uint8(C);

 实验结果:

由此可见,在滤除椒盐噪声方面,中值滤波要比均值滤波要好!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

CNN之卷积层

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 卷积神经网络在深度学习领域是一...

3547
来自专栏量化投资与机器学习

深度学习Matlab工具箱代码注释之cnnbp.m

%%========================================================================= %...

2275
来自专栏SIGAI学习与实践平台

动手训练模型系列:过拟合与训练集规模

loss值采用Cross_entropy计算,表征训练/测试样本与实际训练/测试分类结果的总误差。

1312
来自专栏IT派

机器学习算法KNN简介及实现

KNN(K近邻算法)是一种不需要学习任何参数同时也非常简单的机器学习算法,既可以用来解决分类问题也可以用来解决回归问题。直观解释这个算法就是'近朱者赤,近墨者黑...

1200
来自专栏青青天空树

趣味问题:画图(c++实现)

描述:在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。下图给出了一...

1084
来自专栏机器学习算法工程师

干货|(DL~2)一看就懂的卷积神经网络

文章来自:https://leonardoaraujosantos.gitbooks.io 作者:Leonardo Araujo dos Santos

981
来自专栏技术随笔

深度学习 — 反向传播(BP)理论推导"BP" Math Principle前向传播反向传播应用实例Reference

5036
来自专栏文武兼修ing——机器学习与IC设计

基于Pytorch的MLP实现基于Pytorch的MLP实现

基于Pytorch的MLP实现 目标 使用pytorch构建MLP网络 训练集使用MNIST数据集 使用GPU加速运算 要求准确率能达到92%以上 保存模型 实...

48511
来自专栏Petrichor的专栏

深度学习: 参数初始化

好的开始是成功的一半。 为了让你的模型跑赢在起跑线 ε=ε=ε=(~ ̄▽ ̄)~ ,请慎重对待参数初始化。

3453
来自专栏null的专栏

简单易学的机器学习算法——Mean Shift聚类算法

一、Mean Shift算法概述 Mean Shift算法,又称为均值漂移算法,Mean Shift的概念最早是由Fukunage在1975年提出的,在后来由Y...

7555

扫码关注云+社区

领取腾讯云代金券