1、空间滤波原理

空间滤波,就是在原图像上,用一个固定尺寸的模板去做卷积运算,得到的新图像就是滤波结果。滤波,就是过滤某种信号的意思。过滤哪种信号取决于模板设计,如果是锐化模板,处理后就保留高频信号,如果是平滑模板,处理后就保留低频信号。

(1)模板运算

图像处理中模板能够看作是n*n(n通常是奇数)的窗体。模板连续地运动于整个图像中,对模板窗体范围内的像素做相应处理。

模板运算主要分为:

①模板卷积。模板卷积是把模板内像素的灰度值和模板中相应的灰度值相乘,求平均值赋给当前模板窗体的中心像素。作为它的灰度值;

②模板排序。模板排序是把模版内像素的灰度值排序,取某个顺序统计量作为模板中心像素灰度值。

Matlab中做模版卷积十分高效,取出模版内子矩阵和模版权重点乘求平均就可以,已图示为例,3X3的模板在图像上滑动,原图像f(x,y) 经过模板处理后变成了g(x,y)。

(2)边界处理

处理边界有非常多种做法:

①重复图像边缘上的行和列。

②卷绕输入图像(假设第一列紧接着最后一列)。

③在输入图像外部填充常数(例如零)。

④去掉不能计算的行列。仅对可计算的像素计算卷积。

(3)空间域滤波

把模板运算运用于图像的空间域增强的技术称为空间域滤波。依据滤波频率空间域滤波分为平滑滤波(减弱和去除高频分量)和锐化滤波(减弱和去除低频分量),依据滤波计算特点又分为线性滤波和非线性滤波。

因此空间域滤波可分为:

分类     线性       非线性

平滑   线性平滑   非线性平滑

锐化   线性锐化   非线性锐化

2、平滑滤波器

(1)添加噪声

噪声主要分类为两类,高斯噪声和椒盐噪声。

高斯噪声在每个像素上都会出现,赋值服从高斯分布。

椒盐噪声出现位置随机,所以可以控制椒盐噪声的密度,椒盐噪声的幅度确定,椒噪声偏暗,盐噪声偏亮。

Image = mat2gray( imread('original_pattern.jpg') ,[0 255]);
noiseIsp=imnoise(Image,'salt & pepper',0.1);  %添加椒盐噪声,密度为0.1
imshow(noiseIsp,[0 1]); title('椒盐噪声图像');
noiseIg=imnoise(Image,'gaussian'); %添加高斯噪声,默认均值为0,方差为0.01
figure;imshow(noiseIg,[0 1]); title('高斯噪声图像');  

(2)平滑滤波器

平滑滤波器可以去除图像的噪声,使图像变得模糊。包括:中值滤波、均值滤波、高斯滤波。

高斯滤波、均值滤波去除高斯噪声。

(3)均值滤波

Image=imread('Letters-a.jpg');
noiseI=imnoise(Image,'gaussian');                %添加高斯噪声
subplot(221),imshow(Image),title('原图');
subplot(222),imshow(noiseI),title('高斯噪声图像');
result1=filter2(fspecial('average',3),noiseI);                %3×3均值滤波
result2=filter2(fspecial('average',7),noiseI);                % 7×7均值滤波
subplot(223),imshow(uint8(result1)),title('3×3均值滤波');
subplot(224),imshow(uint8(result2)),title('7×7均值滤波');

(4)中值滤波

Image=rgb2gray(imread('lotus.bmp'));
noiseI=imnoise(Image,'salt & pepper',0.1);
result=medfilt2(noiseI);                                 %3×3中值滤波
subplot(121),imshow(noiseI),title('椒盐噪声图像');
subplot(122),imshow(uint8(result)),title('3×3中值滤波');

(5)自编程实现高斯滤波

Image=imread('Letters-a.jpg');
sigma1=0.6; sigma2=10; r=3;  % 高斯模板的参数
NoiseI= imnoise(Image,'gaussian'); %加噪
gausFilter1=fspecial('gaussian',[2*r+1 2*r+1],sigma1);
gausFilter2=fspecial('gaussian',[2*r+1 2*r+1],sigma2);
result1=imfilter(NoiseI,gausFilter1,'conv');
result2=imfilter(NoiseI,gausFilter2,'conv');
subplot(231);imshow(Image);title('原图');
subplot(232);imshow(NoiseI);title('高斯噪声图像');
subplot(233);imshow(result1);title('sigma1 =0.6高斯滤波');
subplot(234);imshow(result2);title('sigma2 =10高斯滤波');
%imwrite(uint8(NoiseI),'gr.bmp');
%imwrite(uint8(result1),'gr1.bmp');
%imwrite(uint8(result2),'gr2.bmp');
%编写高斯滤波函数实现
[height,width]=size(NoiseI);
for x=-r:rfor y=-r:rH(x+r+1,y+r+1)=1/(2*pi*sigma1^2).*exp((-x.^2-y.^2)/(2*sigma1^2));end
end
H=H/sum(H(:));  %归一化高斯模板H
result3=zeros(height,width);            %滤波后图像
midimg=zeros(height+2*r,width+2*r);    %中间图像
midimg(r+1:height+r,r+1:width+r)=NoiseI;
for ai=r+1:height+r  for aj=r+1:width+r  temp_row=ai-r; temp_col=aj-r;  temp=0;  for bi=1:2*r+1 for bj=1:2*r+1 temp= temp+(midimg(temp_row+bi-1,temp_col+bj-1)*H(bi,bj));  end  end  result3(temp_row,temp_col)=temp;  end
end
subplot(235);imshow(uint8(result3));title('myself高斯滤波'); 

3、锐化滤波器

(1)梯度算子

Image=im2double(rgb2gray(imread('lotus.jpg')));
subplot(131),imshow(Image),title('原图像');
[h,w]=size(Image);
edgeImage=zeros(h,w);
for x=1:w-1for y=1:h-1edgeImage(y,x)=abs(Image(y,x+1)-Image(y,x))+abs(Image(y+1,x)-Image(y,x));end
end
subplot(132),imshow(edgeImage),title('梯度图像');
sharpImage=Image+edgeImage;
subplot(133),imshow(sharpImage),title('锐化图像');

(2)Robert算子

Image=im2double(rgb2gray(imread('lotus.jpg')));
subplot(221),imshow(Image),title('原图像');
BW= edge(Image,'roberts');
subplot(222),imshow(BW),title('边缘检测');
H1=[1 0; 0 -1];
H2=[0 1;-1 0];
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
edgeImage=abs(R1)+abs(R2);
subplot(223),imshow(edgeImage),title('Robert梯度图像');
sharpImage=Image+edgeImage;
subplot(224),imshow(sharpImage),title('Robert锐化图像');

(3)Sobel算子

Image=im2double(rgb2gray(imread('lotus.jpg')));
subplot(221),imshow(Image),title('原图像');
BW= edge(Image,'sobel');
subplot(222),imshow(BW),title('边缘检测');
H1=[-1 -2 -1;0 0 0;1 2 1];
H2=[-1 0 1;-2 0 2;-1 0 1];
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
edgeImage=abs(R1)+abs(R2);
subplot(223),imshow(edgeImage),title('Sobel梯度图像');
sharpImage=Image+edgeImage;
subplot(224),imshow(sharpImage),title('Sobel锐化图像');

(4)多个模板边缘检测

clear,clc,close all;
Image=im2double(rgb2gray(imread('lotus.jpg')));
H1=[-1 -1 -1;0 0 0;1 1 1];
H2=[0 -1 -1;1 0 -1; 1 1 0];
H3=[1 0 -1;1 0 -1;1 0 -1];
H4=[1 1 0;1 0 -1;0 -1 -1];
H5=[1 1 1;0 0 0;-1 -1 -1];
H6=[0 1 1;-1 0 1;-1 -1 0];
H7=[-1 0 1;-1 0 1;-1 0 1];
H8=[-1 -1 0;-1 0 1;0 1 1];
R1=imfilter(Image,H1);
R2=imfilter(Image,H2);
R3=imfilter(Image,H3);
R4=imfilter(Image,H4);
R5=imfilter(Image,H5);
R6=imfilter(Image,H6);
R7=imfilter(Image,H7);
R8=imfilter(Image,H8);
edgeImage1=abs(R1)+abs(R7);
sharpImage1=edgeImage1+Image;
f1=max(max(R1,R2),max(R3,R4));
f2=max(max(R5,R6),max(R7,R8));
edgeImage2=max(f1,f2);
sharpImage2=edgeImage2+Image;
subplot(221),imshow(edgeImage1),title('两个模板边缘检测');
subplot(222),imshow(edgeImage2),title('八个模板边缘检测');
subplot(223),imshow(sharpImage1),title('两个模板边缘锐化');
subplot(224),imshow(sharpImage2),title('八个模板边缘锐化');

(5)Laplacian算子

Image=im2double(rgb2gray(imread('lotus.jpg')));
subplot(131),imshow(Image),title('原图像');
H=fspecial('laplacian',0);
R=imfilter(Image,H);
edgeImage=abs(R);
subplot(132),imshow(edgeImage),title('Laplacian梯度图像');
H1=[0 -1 0;-1 5 -1;0 -1 0];
sharpImage=imfilter(Image,H1);
subplot(133),imshow(sharpImage),title('Laplacian锐化图像');

数字图像处理之matlab实验(三):空间滤波器相关推荐

  1. 数字图像处理之matlab实验(六):图像分割

    在图像处理领域,我们更关注的是一些关于目标的分析或者描述信息,比如图片里面是否有猫,以及是什么品种的猫?在在做这一步之前,我们需要先把图像中的猫分割出来.可以说图像分割是最基础也是最重要的一步操作,会 ...

  2. 数字图像处理--微分算子为什么也是空间滤波器

    前面我们提到,可以用一阶微分算子和二阶微分算子来增强图像,由于是增强了图像中的物体边缘轮廓,起到了锐化图像的效果,因此这些算子操作可用于图像锐化. 我们在前面的图像模糊中,介绍了使用平滑空间滤波器来模 ...

  3. 数字图像处理之matlab实验(一):基本操作

    1.图像即矩阵. 一幅图像在计算机中是以矩阵的形式存储. 如下图所示:矩阵中的值对应图像中对应像素的亮度,值越大越亮(最亮为白色),值越小越暗(最暗为黑色).下图搞反了,当然此目的只是为了大家看的直观 ...

  4. 数字图像处理之matlab实验(五):形态学图像处理

    常见的形态学处理包括腐蚀.膨胀.开运算.闭运算.不同的操作有不同的作用,同样的操作在不同类型的图片上也有不同效果,具体效果如下表格所示.要求熟练掌握对二值图像的形态学处理. 不同操作对不同类型图像处理 ...

  5. 数字图像处理之matlab大作业:自制图像处理小工具

    学习的过程向来不是容易的,创造一个作品的过程更是不容易的.因此,在文章的最后,提供了两个现成的示例代码,大家直接可以拿来运行.在完成大作业的时候,大家可以在已有作品的基础上,按照自己的需求进行修改,添 ...

  6. 数字图像处理---低高通滤波实验(MATLAB实现)

    数字图像处理-低高通滤波实验(MATLAB实现) [实验目的] 1. 了解图像傅里叶变换的意义和手段: 2. 熟悉理想低通滤波器.巴特沃斯低通滤波器.高斯低通滤波器的基本原理和性质: 3. 熟悉理想高 ...

  7. matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

    数字图像处理课程设计实验报告 数字图像处理课程设计 题 目:数字图像处理及Huufman(或小波变换)编码仿真实现 学生姓名: 学 院:信息工程学院 系 别:电子信息工程系 专 业:电子信息工程 班 ...

  8. 数字图像处理学习笔记(三)——空间分辨率和灰度分辨率、等偏爱曲线

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  9. 图像处理----入门资料,Matlab r2019最新版,r2008a,《数字图像处理》冈萨雷斯 第三版 《数字图像处理 Matlab 版》

    研究生想研究的方向是图像处理,现在离开学还有四个月,希望能稍微入门吧.同时也希望通过博客的形式记录一下学习的进度,学习的心情.目前学习两周,安装了基本的软件,收集书籍,学习了灰度变换,空间滤波,频率滤 ...

最新文章

  1. 杭电1175简单搜索 连连看
  2. android实现华为手机拍照上传_继续引领手机拍照 华为将带来液态镜头
  3. 【PL/SQL的优点】
  4. lucene源代码学习之 lucene的经典打分过程
  5. Android 12正式发布:安卓历史最大设计变化、更流畅了!
  6. PTA 数据结构与算法题目集(中文)
  7. python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
  8. 攻占CNS!4篇Science+2篇Nature+1篇Cell,2019年内地学者开门红
  9. Spring MVC中@Controller和@RequestMapping注解详解
  10. oracle+连接数sessionn,Oracle进程连接数过多时的Statspack分析报告
  11. HTTP之一:http协议简介(3)
  12. 【李宏毅2020 ML/DL】P15 Why Deep-
  13. 《微信背后的产品观》一书
  14. 电路基础和电路模拟——复习
  15. Excel中,编制卡方分布临界值表
  16. 【托福词汇句子语法】100个句子记完7000托福单词
  17. 币优网区块链原理浅析
  18. 清明节,我想起了我的外公
  19. 为什么要考华为云认证?有什么用?
  20. ubuntu22.04安装dde桌面

热门文章

  1. oracle外部表报错ora29400,报错ORA-29913 ORA-29400
  2. Laya-关于预设入门
  3. 鸿蒙开发板hi3861 hispark code 2.0 canary金丝雀版本,gpio如何上拉电阻呢?
  4. 抽奖系统小程序,多方式真实展示抽奖功能
  5. MySQL为什么lsof会看到这么多临时文件
  6. CentOS8 配置记录
  7. 使用TWRP Recovery刷入CM13等第三方ROM教程
  8. [STM32] Stm32f103c8t6+RC522 实现读卡写卡功能(超详细,零基础,小白)
  9. (几何方面:六边形面积)编写程序,提示用户输入六边形的边长,然后输出显示它的面积。 计算六边形面积的公式是:area= s2 这里的s就是边长。下面是一个运行示例: 请输入边长:5.5
  10. 2018 软件学院 AK 杯 题解