首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卷积图像滤波器实现公式

卷积图像滤波器实现公式
EN

Stack Overflow用户
提问于 2018-01-11 03:16:55
回答 1查看 698关注 0票数 1

我需要将平均去除滤波器应用于卷积图像。

内核是:

代码语言:javascript
复制
-1 -1 -1           k11 k12 k13 
-1  9 -1   (coord) k21 k22 k23
-1 -1 -1           k31 k32 k33

Factor = 1, Offset = 0

如果我的矩阵坐标是

代码语言:javascript
复制
m11 m12 m13
m21 m22 m23
m31 m32 m33

1.为了计算得到的像素(从矩阵的中心),公式不应该这样吗?

代码语言:javascript
复制
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.还提出了一个额外的问题:如果像素数相同,如何使滤波后的图像具有不同的大小?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 21:12:46

卷积被定义为

问题1

F是你的形象,g是你的内核(或者相反,真的不重要)。二维情形相似,t和τ为2-向量,采用双积分.注意,在计算f和g时,τ的符号不同,这意味着两者中的一个被对应于另一个。

所以你的方程式是完全错误的。您使用的是对称内核,所以在镜像方面没有什么不同,但是方程应该是

代码语言:javascript
复制
pixel = m11 * k33 + m12 * k32 + m13 * k31
      + m21 * k23 + m22 * k22 + m23 * k21
      + m31 * k13 + n32 * k12 + m33 * k11

offset值在卷积中不起作用,factor可以与核值kxx混合。

代码语言:javascript
复制
pixel = ( m11*k33 + m12*k32 + m13*k31 ) * factor

是相同的

代码语言:javascript
复制
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'生成与输入图像大小相同的图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48199263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档