【问题标题】:How does a convolution matrix work?卷积矩阵是如何工作的?
【发布时间】:2010-02-08 03:25:55
【问题描述】:

我知道这与编程不太相关,但我需要知道卷积矩阵如何用于 PHP GD 函数。我在 Google 上搜索了很多,但找不到任何可以很好地解释它的内容。

【问题讨论】:

标签: php graphics matrix convolution


【解决方案1】:

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

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

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

【讨论】:

  • 像素的“值”是什么? x/y 坐标,还是颜色值?
  • Hussain,值总是一些颜色空间中的颜色表示,如灰度、RGB等。在后者中,每个像素有三个“值”,每个通道一个。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我不知道具体是针对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];
    

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

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

    【讨论】:

    • 我曾经看到它们被用于交通规划......这把我吓坏了。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多