我需要将平均去除滤波器应用于卷积图像。
内核是:
-1 -1 -1 k11 k12 k13
-1 9 -1 (coord) k21 k22 k23
-1 -1 -1 k31 k32 k33Factor = 1, Offset = 0
如果我的矩阵坐标是
m11 m12 m13
m21 m22 m23
m31 m32 m331.为了计算得到的像素(从矩阵的中心),公式不应该这样吗?
pixel = m11 * k11 + m12 * k12 + m13 * k13
+ m21 * k21 + m22 * k22 + m23 * k23
+ m31 * k31 + n32 * k32 + m33 * k33
pixel /= factor
pixel += offset图像看起来很好,但是如果我将过滤后的图像与使用diff的其他程序过滤的图像进行比较,则会有细微的变化。
2.新的像素值应该返回到输入矩阵中,以便用于计算下一个像素?
3.还提出了一个额外的问题:如果像素数相同,如何使滤波后的图像具有不同的大小?
发布于 2018-01-12 21:12:46
卷积被定义为
问题1

F是你的形象,g是你的内核(或者相反,真的不重要)。二维情形相似,t和τ为2-向量,采用双积分.注意,在计算f和g时,τ的符号不同,这意味着两者中的一个被对应于另一个。
所以你的方程式是完全错误的。您使用的是对称内核,所以在镜像方面没有什么不同,但是方程应该是
pixel = m11 * k33 + m12 * k32 + m13 * k31
+ m21 * k23 + m22 * k22 + m23 * k21
+ m31 * k13 + n32 * k12 + m33 * k11offset值在卷积中不起作用,factor可以与核值kxx混合。
pixel = ( m11*k33 + m12*k32 + m13*k31 ) * factor是相同的
pixel = m11*k33*factor + m12*k32*factor + m13*k31*factor所以,在计算卷积之前,你可以先用因子对所有的kxx进行乘法。
问题2
不,新的像素值应该写入新的图像。如果将其写回输入图像,则在计算下一个像素的结果时将使用该值,因此您将得到一个错误的结果。
问题3
图像边缘像素的卷积运算结果为“超出边界”。它需要读取图像外部像素的值。您可以选择在那里读取0,或者以其他方式填充值。相反,一些软件选择不计算这些像素,从而产生一个较小的输出图像。有些软件实际上会计算更多的像素,如果你用零扩展图像,那么图像外部像素的卷积结果就会读取图像边缘的一些像素。
函数采用一个可选的参数,即'full'、'same'或'valid'中的一个。默认情况下,'full'做最后一件事,它在图像像素有一定影响的所有位置计算卷积。输出将是size(f)+size(g)-1。'valid'生成一个较小的图像,它不需要在图像域之外读取。'same'生成与输入图像大小相同的图像。
https://stackoverflow.com/questions/48199263
复制相似问题