写在前面:用深度学习的方法调了一波参数,改了一波网络结构,回过头,最想做的事情,当然是好好补一补计算机视觉的基础,弥补一下对传统计算机视觉理解的薄弱部分。所以,接下来,开始补习计算机视觉的基础。供自己以后复习,看客仅供参考。
图像底层特征提取是计算机视觉的基本步骤。那么,接下来,就从what,why,how几个方面,来一一解答。
一,什么是图像底层特征?
图像底层特征指的是:轮廓和边缘。
1.边缘和轮廓能反映图像内容;
2.如果能对边缘和关键点可靠提取的话,很多视觉问题就基本上得到了解决。
二,边缘的物理意义
1.图像边缘的产生
物体的边界,表面方向的改变,不同的颜色,光照明暗的变化,都会产生图像边缘。如图1。
2.图像边缘的定义
-“边缘时图像中亮度突然变化的区域。”
-“图像灰度构成的曲面上的陡峭区域。“
-”像素灰度存在跃阶变化或屋脊状变化的像素的集合。”
3.图像边缘的类型
图像边缘的类型包括:阶梯状边缘,屋脊状边缘和线条状边缘。以灰度图像为例,灰度图像中边缘的类型如图2。
4.为什么要提取边缘?
-边缘是最基本的图像特征之一;
-可以表达物体的特征;
-边缘特征对于图像的变化(几何变化,灰度变化,光照方向变化)不敏感;
-可以为物体检测提供有用的信息;
-是一种典型的图像预处理过程。
三,如何提取边缘?
对于灰度图像的边缘提取而言,主要的思想包括:
-抑制噪声(低通滤波,平滑,去噪,模糊)
-边缘特征增强(高通滤波,锐化)
-边缘定位
流程如下:
原始图像->抑制噪声 or 增强边缘 -> 中间结果 -> 边缘定位 -> 图像边缘
具体来说,也就是通过图像微分算子来实现。
包括:
-一阶微分算子(梯度算子,prewitt, sobel),通过检测最大值来实现;
-二阶微分算子(laplacian),通过检测过零点来实现。
个人体会:边缘定位->通过计算图像梯度来实现->近似一节微分运算->通过高通滤波(卷积)来实现。
附录:卷积与滤波
要了解什么是滤波,首先要知道什么是波。
图像原本只是一种随时间推移的波形图,也就是图像一开始处于时域状态,而我们并不能从时域图像中看出什么东西(除了一堆突起),而伟大的傅里叶公式让图像从时域中转换到的频域中。
图像由不同频率的波长组成,存在着高频部分和低频部分,当然这之间没有明确界限,我们需要知道的是高频部分和低频部分到底代表着什么。
高频部分其实就是代表着这幅图像的边缘信息,也就是锐度。
低频部分刚好相反,代表的是这幅图像的灰度变化信息,也就是内容。
那么我们把高频部分的波称作为高频波,低频部分的则称为低频波。这就是波。
那么什么是滤波呢,顾名思义,就是将某一部分波过滤掉。
卷积的运用很广泛,在数据结构中也有相对应的卷积,而在图像处理中,卷积就更加有用了。
通俗的讲,卷积其实就是加权求和,卷积模板就是权值。
比如 下面这幅图
我们挑选这点(2,2)的周围(3*3)区域作为卷积对象,首先,我们要设定卷积模板(当然模板也要3*3)
首先 我们假定这3*3区域内的灰度值为 (3,3,3;2,2,1;1,2,3);
那么我们假定一个卷积模板为(1,2,1;0,0,0,-1,-2,-1);
则我们做卷积运算,对应加权求和: sum=1*3+3*2+3*1+0*2+0*2+0*1+(-1)*1+(-2)*2+(-1)*3;
算下来为sum=4;
我们把灰度值4作为(2,2)点的新灰度,就完成了这次卷积运算。
了解过卷积以后,我们就懂了一个新的名词————滤波器,滤波器就是一个特定的公式导出的一个特定的卷积模板。
高通滤波器就是让图像高频波通过,滤掉低频波部分,保留边缘信息。
我们常见的高通滤波器有:sobel,Laplacian等
Sobel算子,就是对图像求导(一阶导数),x方向 y方向对应着两个不同的算子
x方向(1,0,-1;2,0,-2,;1,0,-1);
y方向(1,2,1;0,0,0;-1,-2,-1);
Laplacian算子 这个算子是对图像求二阶导数,就一个算子
(0,1,0;1,-4,1;0,1,0);
为了亮度归一化 算子求和一般为0。
低通滤波器就是将高频部分滤掉,保留低频部分,其实就是模糊,降噪。
通常低通滤波器有高斯滤波器等。
高斯滤波就是利用了正态分布方程作为卷积模板的建立方程,所能去除的是高斯噪声。
函数实现起来也很简单 和上面的滤波一样 只是卷积模板要通过高斯方程求解一下而已。
opencvAPI也就一句话 GaussianBlur,这个函数利用了高斯方程的高阶可分离性,将二位的卷积计算转化为两次一维运算,大大减少运行时间。
简而言之,高频滤波器的作用是对图像进行锐化,保留边缘信息。低频滤波器的作用是对图像进行模糊,降噪。
滤波器通常用在预处理图像上,就比如我刚刚想要用拉普拉斯算子做二阶边缘提取,我先是用了高斯模糊去除了高斯噪声,因为拉普拉斯算子对噪声非常敏感。很多时候,一个好的预处理可以将一个算法提高到一个新的效果。滤波就担任着这样的职责。
附录来自博客:https://blog.csdn.net/cyhbrilliant/article/details/52526221