Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 滤镜在图像处理中是如何工作的?_Image Processing - Fatal编程技术网

Image processing 滤镜在图像处理中是如何工作的?

Image processing 滤镜在图像处理中是如何工作的?,image-processing,Image Processing,我有一个使用此算法的sobel边缘检测器示例 基本上,它通过每个像素,用脉冲函数b改变它的值。脉冲函数中使用的过滤器有: {{-1, 0, 1}, {{-1,-2,-1}, {-2, 0, 2}, { 0, 0, 0}, {-1, 0, 1}} { 1, 2, 1}} 但是为什么它在过滤器的一端使用负数,在另一端使用正数呢?我知道使用2离原点越近,但我不知道负数有什么作用。Sobel filter旨在计算图像的梯度。这意味着它必须计算像素之间的局部差异。这就是得到负系数的方法

我有一个使用此算法的sobel边缘检测器示例

基本上,它通过每个像素,用脉冲函数b改变它的值。脉冲函数中使用的过滤器有:

{{-1, 0, 1},  {{-1,-2,-1},
 {-2, 0, 2},   { 0, 0, 0},
 {-1, 0, 1}}   { 1, 2, 1}}

但是为什么它在过滤器的一端使用负数,在另一端使用正数呢?我知道使用2离原点越近,但我不知道负数有什么作用。

Sobel filter旨在计算图像的梯度。这意味着它必须计算像素之间的局部差异。这就是得到负系数的方法:获得差分。
此外,边缘被检测为梯度绝对值较高的区域。

负数存在,因此滤波器和为零。否则,您将有效地为图像添加一个常量。当它说“脉冲函数也存在于2D空间中……它是单独对每个坐标求和还是将矩阵作为一个整体求和?”时,过滤器将与图像卷积。换句话说,操作将通过图像的每个像素进行步骤,并将过滤器应用于周围区域(在您的特定情况下,为3x3区域)。结果是周围区域中的像素值乘以滤波器中的权重之和。脉冲滤波器的“2D空间域”是“邻域”"周围的像素。我越来越接近理解。我只是注意到原始像素对结果像素没有发言权。结果像素纯粹是根据梯度计算的。但它说脉冲函数是1,其中x和y为零,其他地方为零。我认为这意味着只会使用精确的像素为了得到结果像素,显然这是不对的。你是对的:当前像素在计算其梯度时没有影响。事实上,更精确的方法是计算相邻像素之间的差值(P(i+1)-P(i),而不是P(i+1)-P(i-1)),但这将给出两个像素之间的梯度值(G(i+0.5))因此,为了计算给定位置的梯度并将其存储在同一位置,我们只考虑它的邻域(P(i+1)-P(i-1))。关于狄拉克函数:实际上,这里使用的是2D狄拉克梳(即移位狄拉克函数的总和)。它们被+/-1移位,并被+/-1或+/-2加权。我明白了。b[0,0]是周围的像素,所以它们的值为1。中心像素是b[1,1],所以它的值为0。这太好了。谢谢……也许我不明白。只有当我们在中心像素上时,b[x,y]才会是b[0,0]。因此只有中心像素才会被计数。