【发布时间】:2010-02-08 03:25:55
【问题描述】:
我知道这与编程不太相关,但我需要知道卷积矩阵如何用于 PHP GD 函数。我在 Google 上搜索了很多,但找不到任何可以很好地解释它的内容。
【问题讨论】:
标签: php graphics matrix convolution
我知道这与编程不太相关,但我需要知道卷积矩阵如何用于 PHP GD 函数。我在 Google 上搜索了很多,但找不到任何可以很好地解释它的内容。
【问题讨论】:
标签: php graphics matrix convolution
该操作将每个像素替换为其周围像素的加权平均值,其中权重由矩阵给出。这是一个示例卷积矩阵:
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
卷积矩阵允许您进行微调的模糊和锐化效果。如果足够大,您可以使用卷积矩阵调整滤波器的方向性和频率响应。但是,它通常用于快速模糊和锐化。
【讨论】:
我在这里深入了解了卷积滤波器背后的理论:
How do I gaussian blur an image without using any in-built gaussian functions?
【讨论】:
我不知道具体是针对PHP的,但是一般来说卷积矩阵是用来实现某种图像处理效果的。
一个简单的例子取自GDhttp://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];
换句话说,卷积矩阵用于将每个结果像素计算为源像素及其周围像素的线性组合。
除数参数用于将整个结果除以某个值(这通常是矩阵中所有值的总和),偏移量用于在最终输出值上添加一个常数项。
【讨论】: