gpt4 book ai didi

image-processing - 卷积理论与实现

转载 作者:行者123 更新时间:2023-12-04 08:30:09 28 4
gpt4 key购买 nike

我学习图像处理中的卷积,因为它是类(class)的一部分,我理解理论和公式,但我对它的实现感到困惑。

公式为:


enter image description here


我的理解

卷积核水平和垂直翻转然后核中的值乘以相应的像素值,结果相加,除以“行x列”得到平均值,最后这个结果就是内核位置中心像素的值。

实现困惑

当我运行类(class) Material 中的示例卷积程序并插入一个 3x3 卷积核作为输入时,其中:

第一行:(0, 1, 0)

第二行:(0, 0, 0)

第三行:(0, 0, 0)

处理后的图像向下移动了一个像素,而我希望它向上移动一个像素。这个结果表明在计算之前没有做水平或垂直翻转(好像在做相关)。

我以为程序可能有问题,所以我环顾四周,发现 Adobe Flex 3Gimp也在这样做。

我不明白,是不是我错过了什么?

感谢任何帮助或反馈。

最佳答案

我猜你试过的程序实现的是相关而不是卷积。

我已经使用 ImageFilter 函数在 Mathematica 中尝试了您的过滤器,结果按预期向上移动:

enter image description here

结果:

enter image description here

我也在 Octave(一个开源的 Matlab 克隆)中尝试过:

imfilter([1,1,1,1,1;
2,2,2,2,2;
3,3,3,3,3;
4,4,4,4,4;
5,5,5,5,5],
[0,1,0;
0,0,0;
0,0,0],"conv")

(“conv”表示卷积 - imfilter 的默认值是相关性)。结果:

   2   2   2   2   2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
0 0 0 0 0

请注意,最后一行不同。那是因为不同的实现使用不同的填充(默认情况下)。 Mathematica 对 ImageConvolve 使用常量填充,对 ListConvolve 不使用填充。 Octave 的 imfilter 使用零填充。

另请注意(如 belisarius 所述)卷积的结果可以小于、等于或大于源图像。 (我在 Matlab 和 IPPI 文档中阅读了术语“有效”、“相同大小”和“完整”卷积,但我不确定这是否是标准术语)。这个想法是可以执行求和

  • 仅在内核完全位于图像内部的源图像像素上。在这种情况下,结果小于源图像。
  • 在每个源像素上。在这种情况下,结果与源图像具有相同的大小。这需要在边界处填充
  • 在内核的任何部分位于源图像内部的每个像素上。在这种情况下,结果图像大于源图像。这也需要在边界处进行填充。

关于image-processing - 卷积理论与实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7457164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com