我正在寻找掩码巴特沃斯高通滤波器的 C++ 实现。
我有一张被蒙版的图像,我想在图像被蒙版的地方应用巴特沃斯高通滤波器,而不会产生边缘效应。
现在我正在使用 vtk 过滤我的图像。
欢迎任何建议:)
我正在寻找掩码巴特沃斯高通滤波器的 C++ 实现。
我有一张被蒙版的图像,我想在图像被蒙版的地方应用巴特沃斯高通滤波器,而不会产生边缘效应。
现在我正在使用 vtk 过滤我的图像。
欢迎任何建议:)
你可以用两个概念来做到这一点:
可以使用低通滤波器和一些简单的算术来获得高通滤波器。例如(在这里使用通用语法,您没有标记任何特定语言):
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,因此不受影响。