图像平滑处理
原理
Note
以下原理来源于Richard Szeliski 的著作Computer Vision: Algorithms and Applications 以及 Learning OpenCV
平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法。
平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。
平滑处理时需要用到一个 滤波器 。 最常用的滤波器是 线性 滤波器,线性滤波处理的输出像素值 (i.e.
) 是输入像素值 (i.e.
)的加权和 :
称为 核, 它仅仅是一个加权系数。
不妨把 滤波器 想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口滑过图像。
滤波器的种类有很多, 这里仅仅提及最常用的:
归一化块滤波器 (Normalized Box Filter)
最简单的滤波器, 输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等)
核如下:
高斯滤波器 (Gaussian Filter)
最有用的滤波器 (尽管不是最快的)。 高斯滤波是将输入数组的每一个像素点与 高斯内核 卷积将卷积和当作输出像素值。
还记得1维高斯函数的样子吗?
假设图像是1维的,那么观察上图,不难发现中间像素的加权系数是最大的, 周边像素的加权系数随着它们远离中间像素的距离增大而逐渐减小。
Note
2维高斯函数可以表达为 :
其中
为均值 (峰值对应位置),
代表标准差 (变量
和 变量
各有一个均值,也各有一个标准差)
中值滤波器 (Median Filter)
中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的 中值 代替 。
双边滤波 (Bilateral Filter)
目前我们了解的滤波器都是为了 平滑 图像, 问题是有些时候这些滤波器不仅仅削弱了噪声, 连带着把边缘也给磨掉了。 为避免这样的情形 (至少在一定程度上 ), 我们可以使用双边滤波。
类似于高斯滤波器,双边滤波器也给每一个邻域像素分配一个加权系数。 这些加权系数包含两个部分, 第一部分加权方式与高斯滤波一样,第二部分的权重则取决于该邻域像素与当前像素的灰度差值。
详细的解释可以查看链接
源码
本程序做什么?
装载一张图像
使用4种不同滤波器 (见原理部分) 并显示平滑图像
下载代码:点击这里
代码一瞥:
#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"using namespace std;using namespace cv;/// 全局变量int DELAY_CAPTION = 1500;int DELAY_BLUR = 100;int MAX_KERNEL_LENGTH = 31;Mat src; Mat dst;char window_name[] = "Filter Demo 1";/// 函数申明int display_caption( char* caption );int display_dst( int delay );/** * main 函数 */ int main( int argc, char** argv ) { namedWindow( window_name, CV_WINDOW_AUTOSIZE ); /// 载入原图像 src = imread( "../images/lena.jpg", 1 ); if( display_caption( "Original Image" ) != 0 ) { return 0; } dst = src.clone(); if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; } /// 使用 均值平滑 if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; } for ( int i = 1; i = 0 ) { return -1; } return 0; } int display_dst( int delay ) { imshow( window_name, dst ); int c = waitKey ( delay ); if( c >= 0 ) { return -1; } return 0; }
解释
下面看一看有关平滑的OpenCV函数,其余部分大家已经很熟了。
归一化块滤波器:
OpenCV函数blur 执行了归一化块平滑操作。
for ( int i = 1; i
我们输入4个实参 (详细的解释请参考 Reference):
src: 输入图像
dst: 输出图像
Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。
高斯滤波器:
OpenCV函数GaussianBlur 执行高斯平滑 :
for ( int i = 1; i
我们输入4个实参 (详细的解释请参考 Reference):
src: 输入图像
dst: 输出图像
Size(w, h): 定义内核的大小(需要考虑的邻域范围)。
和
必须是正奇数,否则将使用
和
参数来计算内核大小。
: x 方向标准方差, 如果是
则
使用内核大小计算得到。
: y 方向标准方差, 如果是
则
使用内核大小计算得到。.
中值滤波器:
OpenCV函数medianBlur 执行中值滤波操作:
for ( int i = 1; i
我们用了3个参数:
src: 输入图像
dst: 输出图像, 必须与 src 相同类型
i: 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。
双边滤波器
OpenCV函数bilateralFilter 执行双边滤波操作:
for ( int i = 1; i
我们使用了5个参数:
src: 输入图像
dst: 输出图像
d: 像素的邻域直径
: 颜色空间的标准方差
: 坐标空间的标准方差(像素单位)
相关文章
- 205_彪_图像滤波
- 毕业设计论文_人脸识别系统
- 基于MATLAB的减少图像噪声
- 基于Matlab的人脸识别课程设计
- 数字图像处理实验报告
- 自考大纲 30452 数字图像技术
- 基于matlab的图像边缘检测算法研究
- 一个基于尺度空间理论的直方图定性匹配算法
- 空间域处理
杭州师范大学 遥感数字图像处理方法 实验报告 实验名称: 图像滤波 姓 名: 文 学 号:班 级: 老 师: 成 绩: 2016年4月30号 实验五 图像滤波 1 实验目的 熟悉图像滤波,特别是图像的平缓和锐化的基本方法,理解典型卷积核的作 ...
摘要 人脸识别因其在安全验证系统.信用卡验证.医学.档案管理.视频会议.人机 交互.系统公安(罪犯识别等)等方面的巨大应用前景而越来越成为当前模式识别和人工智能领域的一个研究热点. 本文提出了基于24位彩色图像对人脸进行识别的方法,介绍的主 ...
目录 第一章 概述„„„„„„„„„„„„„„„„„„„„ 第2页 第二章 典型噪声介绍„„„„„„„„„„„„„„„„ 第3页 第三章 基于MATLAB 的模拟噪声生成 „„„„„„„„„ 第5页 第四章 均值滤波处理方法„„„„„„„„ ...
摘要 人脸识别因其在安全验证系统.信用卡验证.医学.档案管理.视频会议.人机交互.系统公安(罪犯识别等) 等方面的巨大应用前景而越来越成为当前模式识别和人工智能领域的一个研究热点. 本文提出了基于24位彩色图像对人脸进行识别的方法,介绍的主 ...
实验一:数字图像基本操作及灰度调整 1.实验目的 1) 2) 3) 4) 掌握读.写图像的基本方法. 掌握MATLAB 语言中图像数据与信息的读取方法. 理解图像灰度变换处理在图像增强的作用. 掌握绘制灰度直方图的方法,理解灰度直方图的灰度 ...
高纲 1629 江苏省高等教育自学考试大纲 30452 数字图像技术 南京理工大学编(2016年) 江苏省高等教育自学考试委员会办公室 Ⅰ 课程性质与课程目标 一.课程性质和特点 <数字图像技术>是江苏省高等教育自学考试电子工程 ...
本科毕业设计(论文) 检测算法研究 学 院:信息工程学院 专 业:自动化 学 号: 学生姓名: 指导教师: 二○一 年 五月 二十三日 题 目:基于matlab 的图像边缘 基于matlab 的图像边缘检测算法研究 摘要 图像的边缘检测技术 ...
第 卷第 期 年 月辽宁师范大学学报(自然科学版) ( ) 文章编号:( ) 一个基于尺度空间理论的直方图定性匹配算法 廖士中,李翔鲲,高培焕 (辽宁师范大学计算机与信息技术学院,辽宁大连 ) 摘要:设计并实现基于高斯尺度空间理论的直方图定 ...
空间域图像处理主要分为灰度变换和空间滤波两类.灰度变换在像素上操作,主要以改变对比度和阈值处理为目的.空间滤波涉及改善性能的操作,如对每一个像素的领域处理来平滑或锐化图像.本章的基本处理模型个g(x,y)=T[f(x,y)],f 是输入图像 ...