0

我正在寻找掩码巴特沃斯高通滤波器的 C++ 实现。

我有一张被蒙版的图像,我想在图像被蒙版的地方应用巴特沃斯高通滤波器,而不会产生边缘效应。

现在我正在使用 vtk 过滤我的图像。

欢迎任何建议:)

4

1 回答 1

0

你可以用两个概念来做到这一点:

高通滤波

可以使用低通滤波器和一些简单的算术来获得高通滤波器。例如(在这里使用通用语法,您没有标记任何特定语言):

img = ... (you input image)
lowpass = smooth(img)
highpass = img - lowpass

不请自来的建议

我看不出使用巴特沃斯滤波器的意义。如果您仅限于因果过滤器(例如在实时处理信号的电子电路中),这是一个绝妙的设计,但对于图像来说,这是一个毫无意义的约束。使用高斯滤波器

归一化卷积

当您面临不确定或不完整的数据时(就像蒙版图像的情况:被蒙版的像素被认为是未知值),那么归一化卷积是可行的方法。

归一化卷积的简单实现如下。在这里,我们认为mask是掩码图像,其值为 1 表示数据已知,值为 0 表示不知道(掩码中的区域为 0):

out = filter(mask * img) / filter(img)

这里,filter是任何线性滤波器(卷积),例如上面讨论的高斯平滑或高通滤波器。

out将隐藏区域内的信息。此信息是从已知数据中推断出来的,但您可能不想相信这一点。然后,您可以再次屏蔽out以确保不使用这些值:

out = out * mask

请注意,乘以掩码意味着被屏蔽的像素乘以 0,导致输出 0,而其他值乘以 1,因此不受影响。

于 2018-03-05T18:40:46.357 回答