1

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

4

4 回答 4

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

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

于 2010-02-08T03:37:50.427 回答
3

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

如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊?

于 2010-02-08T16:28:12.103 回答
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 参数用于将整个结果除以某个值(这通常是矩阵中所有值的总和),offset 用于在最终输出值上添加一个常数项。

于 2010-02-08T03:38:23.503 回答
0

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

于 2010-02-08T08:57:25.570 回答