我们不生产水,我们只是大自然的搬用工。 仅供自我学习参考
三种线性滤波 :方框滤波,均值滤波,高斯滤波
两种非线性滤波:中值滤波,双边滤波
七种图像处理形态学:腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽、黑帽
漫水填充
图像缩放
图像金字塔
阀值化
滤波中概念 :
平滑处理:也称模糊处理,是一种简单且使用频率很高的图像处理方法。(在涉及到降低图像分辨率时,平滑处理是好方法)
图像滤波:指在尽量保留图像细节特征的条件下对目标图像的噪声进行压制。
(消除图像中的噪声成分叫做图像的平滑化或滤波操作)
(图像滤波)目的:(1)抽出对象特征作为图像识别的特征模式
(2)为适应图像处理要求,消除图像数字化时所混入的噪声
(滤波处理) 要求: (1) 不能损坏图像的轮廓及边缘等重要信息
(2)使图像清晰视觉效果好
平滑滤波是低频增强的空间域滤波技术,它的目的有两类:模糊,消除噪音
(滤波器:相当于包含加权系数的窗口,当使用时,就把窗口放到图像上,透过窗口看图像 )
滤波是将信号中特定波段频率滤除操作,是抑制和防止干扰的一项重要措施
高斯滤波为例,滤波可分为低通滤波和高通滤波两种,低通滤波就是模糊 ,高通滤波就是锐化 (高斯模糊就是高斯低通滤波)
邻域算子与线性邻域滤波:(一种加权和方法)------Opencv中就3种【方框滤波 ,均值滤波 ,高斯滤波】
邻域算子(局部算子)是利用给定的像素周围的像素值决定此像素的最终输出值,而线性邻域滤波就是一种常用的邻域算子
方框滤波:
void boxFilter(源图,目的图,图像深度,内核大小---Size(w,h),锚点--即被平滑的点,是否被归一化---默认值 true)
均值滤波:(方框滤波归一化后的特殊情况) 缺陷:不能很好的保护图像细节,去噪的同时破坏了图像的细节,图像变得模糊
主要方法为邻域平均法,即用一片图像区域的各个图像的均值代替原图像中的各个像素值
void blur(源图,目的图,核大小,锚点)
高斯滤波:线性平滑滤波 ,可以消除高斯噪声,广泛用于图像减噪过程 。(对抑制服从正态分布的噪声非常有效)
(对整幅图像 进行加权平均的过程)每一个像素点都由其本身和邻域内的其他像素经过加权平均后得到。
具体操作:用一个模板(或称卷积、掩膜)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去代 替模板中心像素点的值
void GaussianBlur(源图像,目的图,高斯内核,X方向标准偏差,Y方向标准偏差)
FilterEngine类 是OpenCV图像滤波功能的核心引擎,各种滤波函数如blur,GaussianBlur,其实就是在函数末尾处定义了一个 Ptr
非线性滤波:有时使用非线性滤波会得到更好效果,如噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大的值时,用高斯滤波器对图像进行模糊,噪声不会被去除,而是转换为更柔和但仍可见的散粒。
中值滤波:典型非线性滤波技术,基本思想用像素点邻域灰度值的的中值来代替像素点的灰度值。---基于排序统计理论
(用该点的一个邻域中各点值的中值代替,让周围像素接近真实值,从而消除孤立的噪声点)
(如在去除脉冲噪声,椒盐噪声的同时又能保留图像的边缘细节)
void medianBlur(源图,目的图,ksize孔径的线性尺寸----必须是大于1的奇数,如3、5、7、9)
中值和均值滤波器的比较:
优势:均值滤波器中,由于噪声成分被放入平均计算,故输出受到噪声的影响
中值滤波器中,噪声成分很难悬赏,故输出几乎不会受到影响
劣势:中值滤波的花费的时间是均值滤波的5倍以上
双边滤波:结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。
比高斯滤波多了一个高斯方差 sigma - d ,基于空间分布的高斯滤波函数,所以在边缘附近,离得较远的像素不会对边缘上的像素值影响太多,这样就保证了边缘附近像素值的保存,由于保存过多高频信息,对于彩色图像高频噪声,双边滤波器不能干净的滤掉,只能对低频信息进行较好地滤波。
void bilateralFilter (源图,目的图,int d---过滤过程种每个像素邻域的直径,double sigmaColor ---颜色空间滤波器的sigma值,double sigmaSpace---坐标空间种滤波器的sigma值,坐标空间的标注方差,int borderType)
特点:简单、非迭代、局部
好处:做边缘保存 ( 以往用维纳滤波或者高斯滤波降噪,但二者会明显模糊边缘,对高频细节的保护效果不明显 )
形态学滤波:
图像处理中的形态学,往往指的是数学形态学,其基本运算包括:二值腐蚀和膨胀、二值开闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度。简单来说就是基于形状的一系列图像处理操作
膨胀和腐蚀功能:【 膨胀和腐蚀是针对的白色部分(高亮部分),而不是黑色部分 】
(1)消除噪声
(2)分割出独立的图像元素,在图像中链接相邻的元素
(3)寻找图像中的明显的极大值区域或极小值区域
(4)求出图像的梯度
(膨胀) (腐蚀)
膨胀:求局部最大值操作。(数学角度:将图像或图像部分区域A与核B进行卷积)
【核B与图形卷积:即计算核B覆盖的区域的像素点的最大值,并把最大值赋值给参考点指定的像素,这样高亮区域逐渐增长】
void dilate(源图 ,目的图,kernel---膨胀操作的核) //后面的4个参数都有默认值,一般情况不用管
腐蚀:求局部最小值的操作
void erode(源图,目的图,kernel--腐蚀操作的核) //后面的4个参数都有默认值,一般情况不用管
(腐蚀和膨胀两种基本的形态学操作,运用这两个基本操作可以实现闭运算、形态学梯度、顶帽、黑帽等)
(可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积)
(看上去将两个细微连接的图块封闭在一起)
(开运算带来的结果是放大了裂缝和局部低亮度的区域,因此原图减去开运算,得到效果图突出了比原图轮廓周围的区域更明亮的区域,且这操作与选择的核的大小相关)
(1)常用来分离比邻近点亮一些的斑块
(2)微小物品比较有规律的情况下,也可以用顶帽运算进行背景提取
(突出了比原图轮廓周围的区域更暗的区域,且这操作与选择的核的大小相关)
(1)常用来分离比邻近点暗一些的斑块,效果图有非常完美的轮廓
漫水填充:用特定的颜色填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。
简单来说就是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色。
int floodFill (源图,mask,seedPoint--漫水填充算法的起点,Scalar 类型的newval---像素被染色的值,即重绘区域像素的新值,Rect* rect---重绘区域的最小边界矩阵区域,loDiff,upDiff,flags)
图像金字塔与图片尺寸缩放:
如果要放大或者缩小图片的尺寸,笼统来说可以使用如下2中方法:
( 1 )resize 函数
( 2 )pyrUp () 对图像进行向上采样
pyrDown() 对图像进行向下采样操作 //二者不为逆操作
有两种类型的图像金字塔常常出现在文献和实际运用中:
(1) 高斯金字塔---用来向下采样,主要的图像金字塔。
(2)拉普拉斯金字塔---用来从金字塔底层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对 图像进行最大程度还原,配合高斯金字塔一起使用。
高斯金字塔:
对图像的向下采样:(为了获取层级为G i+1 的金字塔图像)
(1)对图像G i 进行高斯内核卷积
(2) 将所有偶数行和列去除
总结:a、得到的G i+1 的图像只有原图的四分之一,通过不断对原图的迭代就能得到整个金字塔。
b、向下取样会逐渐丢失图像的信息
对图像的向下采样:(为了获取层级为G i-1 的金字塔图像)
(1)将图像在每个方向都扩大为原来的两倍,新增的行和列以0填充
(2) 使用先前同样的内核(乘以4)与放大后的图像卷积,获得"新增像素"的近似值
总结:a、放大后图与原图相比会发觉比较模糊,因为缩放过程中丢失了一些信息。
(缩小和方法过程中减少信息丢失,这些数据就i形成了拉普拉斯金字塔)
拉普拉斯金字塔就是记录高斯金字塔每一级下采样后再上采样与下采样前的差异
size()函数 (插值方式的选择,对经过多次放大缩小的图片最终效果是有很大的影响)
缩小图像,最好用CV_INTER_AREA
放大图像,可以用CV_INTER_CUBIC (效率不高、慢、不推荐 )
最好用CV_INTER_LINEAR (效率较高、快 、推荐使用)
阈值化:图形处理操作过程中,我们常常需要对图像中的像素做出取舍与决策,直接剔除一些低于或者高于一定值的像素
(阈值可以被视作最简单的图像分割方法----像素级分割)
分割方法:基于图像中物体与背景之间的灰度差异
基于opencv的边缘检测
霍夫变换
重映射
仿射变换
直方图均衡化
基于opencv的边缘检测:
边缘检测的各种算子和滤波器:Canny算子、Sobel算子、Laplacian算子以及Scharr滤波器
边缘检测的一般步骤: (加粗三种是带方向的)
(1)滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,但倒数对噪声很敏感,因此必须 采用滤波器来改善和 噪声有关的边缘检测器的性能
(2)增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的 点凸显出来,编程时,通过计算梯度幅值来确定
(3)检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,在特定应用中,这些点不是要找的边缘点,所以 应该采用阈值化方法来对这些点进行取舍。
Canny算子:
Canny边缘检测的步骤 :
(1)消除噪声:高斯平滑滤波器卷积降噪
(2)计算梯度幅值和方向:
(3)非极大值抑制:排除非边缘像素,仅仅保留了一些细线条(候选边缘)
(4)滞后阈值:(滞后阈值需要两个阈值---高阈值和低阈值)
a、若某一个像素位置的幅值超过高阈值,该像素被保留位边缘像素
b、若某一个像素位置的幅值小于低阈值,该像素被排除
c、若某一个像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留
Mat dstImage,edge,grayImage; // 【1】创建与src同类型和大小的矩阵(dst) dstImage.create( srcImage1.size(), srcImage1.type() ); // 【2】将原图像转换为灰度图像 cvtColor( srcImage1, grayImage, COLOR_BGR2GRAY ); // 【3】先用使用 3x3内核来降噪 blur( grayImage, edge, Size(3,3) ); // 【4】运行Canny算子 Canny( edge, edge, 3, 9,3 ); //【5】将g_dstImage内的所有元素设置为0 dstImage = Scalar::all(0); //【6】使用Canny算子输出的边缘图g_cannyDetectedEdges作为掩码,来将原图g_srcImage拷到目标图g_dstImage中 srcImage1.copyTo( dstImage, edge); //【7】显示效果图 imshow("【效果图】Canny边缘检测2", dstImage); waitKey(0);
sobel算子:主要用于边缘检测的离散微分算子(结合高斯平滑和微分求导,来计算图像灰度函数的近似梯度)
sobel算子的计算过程:
Laplacian算子:
scharr滤波器:一般称scharr为滤波器而不是算子,他在Opencv中是配合Sobel算子运算而存在的
霍夫变换:图像处理中的一种特征提取技术,如快速准确地检测出直线或者圆
(在使用霍夫变换之前,首先要对图像进行边缘检测处理 ,即霍夫变换的直接输入只能是边缘二值图像)
Opencv中霍夫线变换有三种:
(1) 标准霍夫变换: 由HoughLines函数调用
(2) 多尺度霍夫变换: 由HoughLines函数调用
(3)累计概率霍夫变换: 由HoughLinesP函数调用
霍夫变换的原理:
一条直线在图像二维空间可由两个变量表示,有以下两种情况:
霍夫梯度法:解决霍夫圆变换的问题
重映射:把一副图像中某位置的像素放置到另一个图片指定位置的过程
仿射变换:又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。
注意:它保持了二维图形的"平直性"和"平行性".
(二维图形相对位置关系不变,直线经过变换依旧是直线,平行线依旧是平行先,且直线上点的位置顺序不变)
直方图均衡化:直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。
均衡化处理后的图像只能是近似均匀分布,均衡化图像的动态范围扩大了,但本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的像素处理后可能变得相同,形成一片相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓。
图像均衡化步骤:
(1) 计算输入图像的直方图 H
(2) 进行直方图归一化,直方图的组距的和为255
如何查找并绘制轮廓
如何寻找物体的凸包
如何使用多边形逼近物体
认识图像的矩
如何利用Opencv进行图像修复
查找并绘制轮廓:
findContours() 函数常用于二值图像中寻找轮廓
寻找物体的凸包:凸包就是将最外层的点连接起来构成的凸多边型,它是能包含点集中所有点的。
整个凸多边型就是凸包,白色的格子组成的区域就是凸包的各个" 缺陷 "
图像的矩:在图像分析中有广泛的应用,如模式识别、目标分类、目标识别与方位估计、图像编码与重构等
从一幅数字图像中计算出来的矩集,通常描述了该图像形状的全局特征,如大小、位置、方向以及形状
分水岭算法:基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,像素中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域成为集水盆,而水盆边界则形成分水岭。
分水岭计算过程: (分两个步骤)---分水岭变换得到的是输入图像的集水盆图像,集水盆之间的边界点,即为分水岭
(1)一个是排序过程:对每个像素的灰度级进行从低到高的排序
(2)一个是淹没过程:从低到高实现淹没过程,对每一个局部极小值在 h 阶高度的影响采用先进先出结构 进行判断和标注。
(显然分水岭表示的是输入图像的极大值点)
图像修复:(图像常常被噪声腐蚀,可能是镜头上的灰尘或者水滴,或者是旧照片的划痕,或者图像部分本身已经损坏)
利用已经被破坏区域的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中。
什么是直方图
直方图的计算和绘制
如何进行直方图的对比
方向投影技术
模板匹配技术
什么是直方图:直方图就是对数据进行统计的一种方法,并将统计值组织到一系列事先定义好的bin中
直方图的意义:
(1)直方图是图像中像素强度分布的图形表达方式
(2)它统计了每一个强度值所具有的像素个数
直方图的术语和细节:
直方图对比:一个不可或缺的工具便是用某些具体的标准来比较两个直方图的相似度
反向投影:
反向投影的作用:定位模板图像出现再输入图像的位置
反向投影的结果:反向投影的结果包含了以每个输入图像为起点的直方图对比结果
模板匹配 :
概念: 在一幅图像中寻找与另一幅模板图像最匹配( 相似 )部分的技术
什么是角点
角点检测概念
用Opencv实现 Harris角点检测
用Opencv实现Shi-Tomasi角点检测
亚像素级角点检测
什么是角点
角点检测简介:(又称特征点检测)计算机器获取图像特征的一种方法,用于运动检测、图像匹配 、视频跟踪、三维建 模和目标识别
角点:通常被定义为两条边的交点,如果某点在任意方向的微小变动都会引起灰度很大变化,那么我们就把它称为角点
角点检测概念
角点检测算法: (1) 基于灰度图像的角点检测
a. 基于梯度
b. 基于模板
1 )Kitchen-Rosenfeld角点检测算法
2 ) Harris 角点检测算法
3 ) KLT角点检测算法
4 ) SUSAN角点检测算法
c. 基于模板梯度组合
(2) 基于二值图像的角点检测
(3) 基于轮廓曲线的角点检测
Harris角点检测:
Shi-Tomasi角点检测:是Harris算法的改进
亚像素级角点检测:
FAST
STAR
SIFI
ORB
MSER
GFTT
HARRIS
Dense
SimpleBlob