为什么卷积与内核有效?

时间:2013-09-24 00:04:34

标签: c image math image-processing convolution

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

5 个答案:

答案 0 :(得分:10)

我不明白某人是如何想出一个叫做内核的简单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中,向下滚动到" The Convolution Theorem。"这为卷积提供了数学背景。从将相同原理表示的卷积思想应用于2D图像中的灰度(或颜色)数据的离散世界,这是一个相对较短的步骤。

您会注意到许多内核/运算符与名称相关联:Sobel,Prewitt,Laplacian,Gaussian等。这些名称有助于表明,数学发展和图像处理研究的历史 - 实际上已有相当长的历史 - 导致了当今常用的大量内核。

高斯和拉普拉斯早在我们面前就已经存在了,但他们的数学工作已逐渐渗透到我们可以用于图像处理的形式中。他们没有在图像处理的内核上工作,但是他们开发的数学技术可以直接应用并且通常用于图像处理。其他内核专门用于处理图像。

如果维基百科是正确的,那么Prewitt算子(内核)与Sobel算子非常相似,于1970年出版。

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/

您还会看到拉普拉斯内核的一种形式被简单地命名为"边缘发现"您引用的维基百科条目中的内核。

有多个边缘寻找内核,每个都有它的位置。 Laplacian,Sobel,Prewitt,Kirsch和Roberts内核都会产生不同的结果,并且适用于不同的目的。

人们是如何提出这些内核的(反复试验?)?

核心是由不同的人根据各种研究途径开发的。

一些内核(对我的记忆)是专门为早期视觉的过程建模而开发的。"早期的视力不仅仅发生在早期人类身上,也不仅限于早上4点起床的人,而是指生物视觉的低级过程:感知基本颜色,强度,边缘等等。事情。在非常低的水平,生物视觉中的边缘检测可以用内核建模。

其他内核,如拉普拉斯算子和高斯,是数学函数的近似值。只需稍加努力,您就可以自己派生内核。

图像编辑和图像处理软件包通常允许您定义自己的内核。例如,如果要识别图像中的形状小到足以由几个连接的像素定义,则可以定义与要检测的图像特征的形状匹配的内核。使用自定义内核来检测对象太粗糙,无法在大多数实际应用程序中使用,但有时候有理由为特定目的创建一个特殊内核,有时需要一点试验和错误才能找到一个好的内核。 / p>

正如用户templatetypedef指出的那样,你可以直观地思考内核,并在相当短的时间内形成对每个内容的感觉。

是否有可能证明它始终适用于所有图像?

在功能上,您可以将3x3,5x5或NxN内核放在适当大小的图像上,并且它可以工作"在某种意义上说,将执行操作并且会有一些结果。但是,计算结果是否有用的能力并不是一个很好的定义。"

内核"是否有效的一个信息定义"是否使用该内核卷积图像会产生您觉得有用的结果。如果您在Photoshop或GIMP中操作图像,并且如果您发现某个特定的增强内核并不能满足您的需求,那么您可能会说内核在您的上下文中不起作用特定图像和您想要的最终结果。在用于计算机视觉的图像处理中存在类似的问题:我们必须选择一个或多个内核和其他(通常是非基于内核的)算法,这些算法将按顺序操作以执行某些有用的操作,例如识别面部,测量汽车的速度,或在装配任务中引导机器人。

<强>作业

如果您想了解如何将数学概念转换为内核,那么自己派生内核会有所帮助。即使你知道派生的最终结果应该是什么,为了理解内核和卷积的概念,它有助于从数学函数中自己,在纸上和(最好)从内存中派生出一个内核。

尝试从数学函数中导出3x3高斯核。

http://en.wikipedia.org/wiki/Gaussian_function

自己获取内核,或者至少找到一个在线教程并仔细阅读,将会非常有启发性。如果你不愿意做这项工作,那么你可能不会理解某种数学表达方式的翻译方式&#34; 3x3矩阵中的一堆数字。但那没关系!如果你对普通内核的一般意义是有用的,如果你观察两个相似的内核如何产生稍微不同的结果,那么你就会对它们产生良好的感觉。

答案 1 :(得分:8)

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

要从那里得到卷积的概念,你可能需要有傅里叶变换和傅立叶级数的背景。卷积在这个领域是一个完全自然的想法 - 如果你计算两个图像的傅立叶变换并将变换相乘,你最终会计算卷积的变换。数学家已经做了一段时间的工作,可能是通过回答一个非常自然的问题“什么函数具有由另外两个傅立叶变换的乘积定义的傅立叶变换?”,从那里发现连接只是时间问题。 。由于傅立叶变换已广泛用于计算(例如,在网络中的信号处理中),我的猜测是有傅立叶级数背景的人注意到他们需要将核K应用于图像I,然后认识到这是在频率空间完成时,方式更简单,计算效率更高。

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

希望这有帮助!

答案 2 :(得分: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]

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

答案 3 :(得分:5)

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

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

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

内核通常通过进行频域变换,然后仅保留高频部分并在空间域中表达来生成。这只能针对某些转换算法进行。你可以计算理想的内核来模糊,锐化,选择某些类型的线等,它会直观地工作,但看起来很神奇,因为我们没有真正的“像素算术”。

当你拥有内核时,当然,根本不需要进入频域。从概念上和计算上完成了这项艰苦的工作。卷积对所有参与者都非常友好,你很少进一步简化。当然,较小的内核更友好。有时大型内核可以表示为小子内核的卷积,这是数学和软件意义上的一种因素。

数学过程非常简单,并且早在有计算机之前就已经研究过了。最常见的操作可以使用18世纪的设备在光具座上进行机械加工。

答案 4 :(得分:2)

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

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

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

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

根据所涉及的数学来回转换,理论上应用你必须使每个输出样本成为每个输入样本的加权和。在现实世界中,你需要权衡利弊。你使用9个样本的总和。与使用99个样本相比,这可以减少延迟并降低处理成本。但它也会给你一个不太准确的过滤器。

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