C ++ Mask Butterworth高通滤波器

时间:2018-03-05 15:01:21

标签: image-processing mask highpass-filter butterworth

我正在寻找一个掩码Butterworth高通滤波器的C ++实现。

我有一个已被屏蔽的图像,我想应用一个Butterworth高通滤波器,而不会在图像被遮挡的情况下产生边缘效应。

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

欢迎提出任何建议:)

1 个答案:

答案 0 :(得分:0)

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

高通滤波

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

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,因此不受影响。