我不明白有人怎么能想出一个简单的 3x3 矩阵,称为内核,所以当应用于图像时,它会产生一些很棒的效果。示例:http://en.wikipedia.org/wiki/Kernel_(image_processing)。
如果您想深入了解历史,您需要查看其他一些术语。在旧的图像处理教科书中,我们今天所认为的内核更有可能被称为“operators”。另一个关键术语是卷积。这两个术语都暗示了内核的数学基础。
http://en.wikipedia.org/wiki/Convolution
您可以在 Ballard 和 Brown 的《计算机视觉》教科书中阅读有关数学卷积的内容。这本书可以追溯到 80 年代初,但它仍然相当有用,您可以在线免费阅读:
http://homepages.inf.ed.ac.uk/rbf/BOOKS/BANDB/toc.htm
从 Ballard 和 Brown 书籍的目录中,您可以找到第 2.2.4 节空间属性的 PDF 链接。
http://homepages.inf.ed.ac.uk/rbf/BOOKS/BANDB/LIB/bandb2_2.pdf
在 PDF 中,向下滚动到“卷积定理”部分。这为卷积提供了数学背景。从考虑将卷积表示为函数和积分到将相同原理应用于二维图像中灰度(或颜色)数据的离散世界,这是一个相对较短的步骤。
您会注意到许多内核/运算符与名称相关联:Sobel、Prewitt、Laplacian、Gaussian 等等。这些名称有助于表明,数学发展和图像处理研究的历史——真的是相当长的历史——导致了当今普遍使用的大量内核。
高斯和拉普拉斯早在我们之前就生活了很久,但他们的数学工作已经渗透到我们可以在图像处理中使用的形式中。他们没有研究用于图像处理的内核,但他们开发的数学技术可直接应用于图像处理中并常用于图像处理。其他内核是专门为处理图像而开发的。
Prewitt 算子(内核)与 Sobel 算子非常相似,于 1970 年发布,如果 Wikipedia 正确的话。
http://en.wikipedia.org/wiki/Prewitt_operator
为什么有效?
阅读卷积的数学理论,了解一个函数如何“越过”或“拖动”到另一个函数。这可以解释理论基础。
然后是单个内核为何工作的问题。在您查看图像中从暗到亮的边缘过渡时,如果您在 2D 散点图上绘制像素亮度,您会注意到 Y 轴上的值在图像中的边缘过渡附近迅速增加。该边缘过渡是一个斜坡。可以使用一阶导数找到斜率。多田!近似一阶导数算子的核会找到边。
如果您知道光学中有高斯模糊之类的东西,那么您可能想知道如何将其应用于 2D 图像。从而推导高斯核。
例如,拉普拉斯算子是一个算子,根据维基百科条目的第一句话,“是由欧几里得空间上函数梯度的散度给出的微分算子。”
http://en.wikipedia.org/wiki/Laplacian
嘿男孩。从该定义到内核,这是一个相当大的飞跃。以下页面很好地解释了派生类和内核之间的关系,并且可以快速阅读:
http://www.aishack.in/2011/04/the-sobel-and-laplacian-edge-detectors/
您还会看到,在您引用的 Wikipedia 条目中,一种形式的拉普拉斯内核被简单地命名为“寻边”内核。
有不止一个寻边内核,每一个都有它的位置。 Laplacian、Sobel、Prewitt、Kirsch 和 Roberts 核都产生不同的结果,并且适用于不同的目的。
人们是如何想出这些内核的(反复试验?)?
内核是由不同的人按照不同的研究路径开发的。
一些内核(据我记忆)是专门为模拟“早期视觉”过程而开发的。早期视觉不仅仅发生在早期人类身上,也不仅仅发生在凌晨 4 点起床的人身上,而是指生物视觉的低级过程:感知基本颜色、强度、边缘等等。在非常低的层次上,生物视觉中的边缘检测可以使用内核进行建模。
其他核,例如拉普拉斯核和高斯核,是数学函数的近似值。稍加努力,您就可以自己派生内核。
图像编辑和图像处理软件包通常允许您定义自己的内核。例如,如果您想识别图像中的一个形状,该形状小到可以由几个连接的像素定义,那么您可以定义一个与您要检测的图像特征的形状相匹配的内核。使用自定义内核来检测对象过于粗糙,无法在大多数实际应用程序中工作,但有时有理由为非常特定的目的创建特殊内核,有时需要进行一些试验和错误才能找到一个好的内核。
正如用户 templatetypedef 所指出的,您可以直观地想到内核,并在相当短的时间内了解每个内核会做什么。
是否有可能证明它始终适用于所有图像?
从功能上讲,您可以将 3x3、5x5 或 NxN 内核放在适当大小的图像上,它会“工作”,因为操作将被执行并会产生一些结果。但是,不管结果是否有用,计算结果的能力并不是“有效”的一个很好的定义。
内核是否“工作”的一个信息定义是,将图像与该内核进行卷积是否会产生您认为有用的结果。如果您在 Photoshop 或 GIMP 中处理图像,并且如果您发现特定的增强内核不能产生您想要的效果,那么您可能会说该内核在您的特定图像和最终结果的上下文中不起作用你要。在计算机视觉的图像处理中存在类似的问题:我们必须选择一个或多个内核和其他(通常是非基于内核的)算法,这些算法将按顺序运行以执行一些有用的操作,例如识别面部、测量汽车的速度或引导组装任务中的机器人。
家庭作业
如果您想了解如何将数学概念转化为内核,那么您自己推导出内核会有所帮助。即使您知道推导的最终结果应该是什么,但为了理解核和卷积的概念,您自己、在纸上和(最好)从内存中从数学函数推导出核也是有帮助的。
尝试从数学函数中推导出 3x3 高斯核。
http://en.wikipedia.org/wiki/Gaussian_function
自己派生内核,或者至少找到一个在线教程并仔细阅读,将会很有启发性。如果您不想做这项工作,那么您可能不会欣赏某些数学表达式“转换”为 3x3 矩阵中的一堆数字的方式。不过没关系!如果您大致了解通用内核很有用,并且如果您观察两个相似内核如何产生略有不同的结果,那么您会对它们产生良好的感觉。