6

我不明白有人怎么能想出一个简单的 3x3 矩阵,称为内核,所以当应用于图像时,它会产生一些很棒的效果。示例:http://en.wikipedia.org/wiki/Kernel_(image_processing)。为什么它有效?人们是如何想出这些内核的(反复试验?)?是否有可能证明它始终适用于所有图像?

4

5 回答 5

11

我不明白有人怎么能想出一个简单的 3x3 矩阵,称为内核,所以当应用于图像时,它会产生一些很棒的效果。示例:http://en.wikipedia.org/wiki/Kernel_(image_processing)

如果您想深入了解历史,您需要查看其他一些术语。在有关图像处理的旧教科书中,我们今天所认为的内核更有可能被称为“运算符”。另一个关键术语是卷积。这两个术语都暗示了内核的数学基础。

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 等等。这些名称有助于表明,数学发展和图像处理研究的历史——真的是相当长的历史——导致了当今普遍使用的大量内核。

高斯和拉普拉斯早在我们之前就生活了,但他们的数学工作已经渗透到我们可以在图像处理中使用的形式中。他们没有研究用于图像处理的内核,但他们开发的数学技术可直接应用于图像处理中并常用于图像处理。其他内核是专门为处理图像而开发的。

与 Sobel 算子非常相似的 Prewitt 算子(内核)于 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 矩阵中的一堆数字的方式。不过没关系!如果您大致了解通用内核很有用,并且如果您观察两个相似的内核如何产生略有不同的结果,那么您会对它们产生良好的感觉。

于 2013-09-25T01:00:02.493 回答
8

直观地说,图像 I 与内核 K 的卷积会生成一个新图像,该图像是通过计算每个像素的加权和而形成的,该加权和是由 K 中的权重加权的所有附近像素。即使您不知道什么是卷积是的,这个想法似乎仍然很合理。您可以使用它来实现模糊效果(通过使用附近像素的高斯加权)或锐化边缘(通过从相邻像素中减去每个像素并且在其他任何地方不添加权重。)事实上,如果您知道您需要做所有这些操作,尝试编写一个给定 I 和 K 对附近像素进行加权求和的函数,并尝试尽可能积极地优化该函数(因为您可能会经常使用它)是有意义的。

要从那里了解卷积的概念,您可能需要具备傅立叶变换和傅立叶级数的背景。卷积在该领域是一个完全自然的想法——如果你计算两个图像的傅里叶变换并将变换相乘,你最终会计算卷积的变换。数学家不久前就已经解决了这个问题,可能是通过回答一个非常自然的问题“什么函数具有由其他两个傅里叶变换的乘积定义的傅里叶变换?”从那里找到联系只是时间问题. 由于傅里叶变换已广泛用于计算(例如,在网络中的信号处理中),

老实说,我不知道真实的历史是什么,但这是一个非常合理的解释。

希望这可以帮助!

于 2013-09-24T00:12:59.833 回答
7

有很多关于卷积的数学理论,但是您链接到的内核示例很容易直观地解释:

[ 0  0  0]
[ 0  1  0]
[ 0  0  0]

这个说只取原始像素而不是别的,所以它只产生原始图像。

[-1 -1 -1]
[-1  8 -1]
[-1 -1 -1]

这个是说从原始像素的八倍中减去八个邻居。首先考虑在图像的平滑部分会发生什么,那里有纯色、不变的颜色。原始像素的八倍等于八个相同相邻像素的总和,因此差为零。因此,图像的平滑部分变为黑色。但是,有变化的部分图像不会变黑。因此,该内核会突出显示变化,因此它会突出显示一个形状结束而另一个形状开始的地方:图像中对象的边缘。

[ 0  1  0]
[ 1 -4  1]
[ 0  1  0]

这与上面的类似,但调整方式不同。

[ 0 -1  0]
[-1  5 -1]
[0  -1  0]

请注意,这只是上面边缘检测器的否定加上我们看到的第一个过滤器,即原始图像的过滤器。因此,该内核既突出显示边缘,又将其添加到原始图像中。结果是具有更多可见边缘的原始图像:锐化效果。

[ 1  2  1]
[ 2  4  2]
[ 1  2  1]

[ 1  1  1]
[ 1  1  1]
[ 1  1  1]

这两者都将原始像素与其相邻像素混合在一起。所以他们稍微模糊了图像。

于 2013-09-24T00:19:35.090 回答
5

有两种思考(或编码)图像的方式:空间域和频域。空间表示基于像素,因此更熟悉且更容易获得。图像和内核都在空间域中表示。

要进入频域,您需要使用傅里叶或相关变换,这在计算上是昂贵的。但是,一旦您到达那里,许多有趣的操作就会变得更简单。要模糊图像,您可以只剪掉一些高频部分——比如在空间域中裁剪图像。锐化则相反,类似于增加高频信息的对比度。

图像的大部分信息都在高频中,代表细节。最有趣的细节信息是在小范围内的。通过查看相邻像素,您可以做很多事情。模糊基本上是对相邻像素进行加权平均。锐化包括查看像素与其相邻像素之间的差异并增强对比度。

核通常是通过频域变换产生的,然后只保留高频部分并在空间域中表示。这只能用于某些转换算法。您可以计算理想的内核来进行模糊、锐化、选择某些类型的线条等,它可以直观地工作,但在其他方面看起来很神奇,因为我们并没有真正的“像素算法”。

当然,一旦有了内核,就根本不需要进入频域。在概念上和计算上,这项艰苦的工作已经完成。卷积对所有相关人员都非常友好,您很少可以进一步简化。当然,较小的内核更友好。有时,大内核可以表示为小子内核的卷积,这是数学和软件意义上的一种因子。

数学过程非常简单,早在计算机出现之前就已经进行了研究。最常见的操作可以使用 18 世纪的设备在光学平台上以机械方式完成。

于 2013-09-24T00:21:25.643 回答
2

我认为解释它们的最好方法是从 1d 开始讨论z 变换及其逆变换。这从时域切换到频域——从将波描述为采样的定时序列到将其描述为对其有贡献的每个频率的幅度。这两种表示包含相同数量的信息,只是表达方式不同。

现在假设您有一个在频域中描述的波,并且您想对其应用滤波器。您可能想要去除高频。那将是一个模糊。您可能想要删除低频。那将是锐化,或者在极端情况下,边缘检测。

您可以通过强制使用您不想要的频率来做到这一点0——例如,通过将整个范围乘以特定的掩码,其中1是您想要保留0的频率并且是您想要消除的频率。

但是,如果您想在时域中这样做呢?您可以转移到频域,应用掩码,然后转换回来。但这是很多工作。所以你所做的(大约)是将掩码从频域转换到时域。然后,您可以在时域中应用它。

遵循来回转换所涉及的数学运算,理论上要应用,您必须使每个输出样本成为每个输入样本的加权和。在现实世界中,您需要进行权衡。例如,您使用 9 个样本的总和。与使用 99 个样本相比,这为您提供了更短的延迟和更低的处理成本。但它也给你一个不太准确的过滤器。

图形内核是该思路的二维模拟。它们往往很小,因为加工成本随边长的平方而增长,因此很快就会变得昂贵。但是您可以近似任何类型的频域限制滤波器。

于 2013-09-24T00:22:53.770 回答