卷积矩阵如何工作?

时间:2010-02-08 03:25:56

标签: php graphics matrix convolution

我知道这与编程无关,但我需要知道卷积矩阵如何用于PHP GD函数。我在谷歌上搜索了很多,但找不到任何可以解释它的东西。

4 个答案:

答案 0 :(得分:4)

该操作用每个像素周围像素的加权平均值替换每个像素,其中权重由矩阵给出。这是一个卷积矩阵示例:

1 1 1
1 1 1
1 1 1

这样做是将每个像素替换为以该像素为中心的3x3块的平均值。这是另一个:

0 0 0
0 1 0
0 0 0

这个矩阵没有做任何事情,它给你原始的背部。

权重也可以是负数。该矩阵减去像素旁边的像素的平均值:

 0 -1  0
-1  4 -1
 0 -1  0

卷积矩阵允许您进行微调模糊和锐化效果。如果滤波器矩阵足够大,您可以使用卷积矩阵调整滤波器的方向性和频率响应。但是,它通常用于快速模糊和锐化。

答案 1 :(得分:3)

我在这里讨论了卷积滤波器背后的理论:

How do I gaussian blur an image without using any in-built gaussian functions?

答案 2 :(得分:1)

我不是专门针对PHP的,但通常使用卷积矩阵来实现某些类型的图像处理效果。

从GD http://www.php.net/manual/en/function.imageconvolution.php上的PHP手册中获取的一个简单示例:

假设你有一个像这样的矩阵:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

将卷积矩阵应用于图像时,对于位于图像中(x,y)的每个像素,输出中的相应像素变为:

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

换句话说,卷积矩阵用于计算每个结果像素,作为源像素及其周围像素的线性组合。

divisor参数用于将整个结果除以某物(这通常是矩阵中所有值的总和),并且偏移量用于向最终输出值添加常数项。

答案 3 :(得分:0)

卷积矩阵独立地作用于图像像素的每个通道 所以你必须首先了解channels 然后,如果您有Photoshop,则可以交互式地“播放”此矩阵:转到菜单Filters-> Other-> Custom。矩阵的中心项表示当前像素,所有其他项表示周围像素。不要忘记底部的“比例”值 我想,你可以很容易地理解这个矩阵的工作方式 你可以看看这件事here。它也描述了卷积矩阵。