最近在学习OpenCV计算机视觉库的使用,其中很多算法都谈到了一个“kernel"的限定,很难理解。
查阅了相关资料后,觉得这个”内核“其实很简单,不过我们平时都习惯在中文里学习,所以很多东西看似复杂实则简单。
这里的kernel是线性代数中的一个基本概念,看维基百科的解释:
http://en.wikipedia.org/wiki/Kernel_(linear_operator)
In linear algebra and functional analysis, the kernel of a linear operator L is the set of all operands v for which L(v) = 0. That is, if L: V → W, then
where 0 denotes the null vector in W. The kernel of L is a linear subspace of the domain V.
上面是说,在线性代数和泛函数分析中,线性函数(线性映射)L的“内核”是其(定义域中)的一些值(操作数),而这些值满足L(v)的值为0。
图像处理是对每一个像素点进行运算,这些像素点的颜色值就是L的操作数,只有满足L(v)==0的像素点才属于特定像素点的内核,参加处理和运算。
比如Normalized Box Filter(归一框选滤波),简单来说,这个算法是制定一个大小的矩形框,计算在这个框中的所有像素点的平均值作为处理后的结果,其内核此设定好的矩形框。
总上所述,计算机视觉里面的“内核”就是用来圈定用来计算某一个像素的新值所用到的其周围像素点的一个框(圆,或者任意形状)。
Update:内核除了一个框外,另外还有一个值是其锚点,用来代表的像素点在内核中的位置,通常就是在内核的中心。