为什么卷积与内核有效?

goo*_*ing 6 c math image image-processing convolution

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

Ret*_*unk 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中,向下滚动到"卷积定理"部分.这为卷积提供了数学背景.这是一个相对较短的步骤,从考虑表达为函数和积分的卷积到将相同原理应用于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点起床的人身上,而是指生物视觉的低级过程:感知基本颜色,强度,边缘等等.在非常低的水平,生物视觉中的边缘检测可以用内核建模.

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

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

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

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

在功能上,你可以在适当大小的图像上抛出3x3,5x5或NxN内核,并且它将"工作",因为操作将被执行并且会有一些结果.但是,计算结果是否有用的能力并不是"作品"的一个很好的定义.

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

家庭作业

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

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

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

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


tem*_*def 8

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

为了从那里得到卷积的想法,你可能需要有傅立叶变换和傅立叶级数的背景.卷积在这个领域是一个完全自然的想法 - 如果你计算两个图像的傅立叶变换并将变换相乘,你最终会计算卷积的变换.数学家已经做了一段时间的工作,可能是通过回答一个非常自然的问题"什么函数具有由另外两个傅立叶变换的乘积定义的傅立叶变换?",从那里发现连接只是时间问题. .由于傅里叶变换已广泛用于计算(例如,在网络中的信号处理中),

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

希望这可以帮助!


Eri*_*hil 7

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

[ 0  0  0]
[ 0  1  0]
[ 0  0  0]
Run Code Online (Sandbox Code Playgroud)

这个说采用原始像素而不是其他任何东西,所以它只产生原始图像.

[-1 -1 -1]
[-1  8 -1]
[-1 -1 -1]
Run Code Online (Sandbox Code Playgroud)

这个说要从原始像素的八倍减去八个邻居.首先考虑在图像的平滑部分发生的事情,其中​​有坚实,不变的颜色.原始像素的八倍等于八个相同邻居的总和,因此差值为零.因此,图像的平滑部分变黑.但是,有变化的部分图像不会变黑.因此,此内核突出显示更改,因此它突出显示一个形状结束而另一个形状开始的位置:图像中对象的边缘.

[ 0  1  0]
[ 1 -4  1]
[ 0  1  0]
Run Code Online (Sandbox Code Playgroud)

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

[ 0 -1  0]
[-1  5 -1]
[0  -1  0]
Run Code Online (Sandbox Code Playgroud)

观察到这只是上面的边缘检测器加上我们看到的第一个滤波器的否定,原始图像的滤波器.所以这个内核都会突出显示边缘并将其添加到原始图像中.结果是具有更多可见边缘的原始图像:锐化效果.

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

[ 1  1  1]
[ 1  1  1]
[ 1  1  1]
Run Code Online (Sandbox Code Playgroud)

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


Pot*_*ter 5

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

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

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

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

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

数学过程非常简单,并且早在有计算机之前就已经研究过了.最常见的操作可以使用18世纪的设备在光学平台上机械地完成.