我正在寻找一个掩码Butterworth高通滤波器的C ++实现。
我有一个已被屏蔽的图像,我想应用Butterworth高通滤波器而没有边缘效应,其中图像被屏蔽。
现在我使用vtk来过滤我的图像。
欢迎任何建议:)
你可以用两个概念来做到这一点:
可以使用低通滤波器和一些平凡的算法来获得高通滤波器。例如(在这里使用通用语法,您没有标记任何特定语言):
img = ... (you input image)
lowpass = smooth(img)
highpass = img - lowpass
未经请求的建议:
我没有看到使用巴特沃斯滤波器的重点。如果你只限于因果滤波器(如在电子电路中实时处理信号),这是一个很棒的设计,但对于图像来说这是一个毫无意义的约束。使用Gaussian filter。
当您面对不确定或不完整的数据时(如屏蔽图像的情况:屏蔽的像素被视为未知值),则归一化卷积是可行的方法。
归一化卷积通常如下实现。在这里,我们将mask
视为掩模图像,其中值为1,其中数据是已知的,值为0,其中不是(掩模中的区域在掩码中为0):
out = filter(mask * img) / filter(img)
这里,filter
是任何线性滤波器(卷积),例如上面讨论的高斯平滑或高通滤波器。
out
将在掩盖的区域内提供信息。此信息是从已知数据推断出来的,但您可能不想相信这些信息。然后,您可以再次屏蔽out
以确保不使用这些值:
out = out * mask
注意,乘以掩码意味着屏蔽的像素乘以0,导致0输出,其他值乘以1,因此不受影响。