我正在寻找一个掩模巴特沃斯高通滤波器的C++实现。
我有一个已经被蒙住的图像,我想应用巴特沃斯高通滤波器,而不具有边缘效应的图像被蒙住。
目前,我正在使用vtk过滤我的图像。
欢迎任何建议:)
发布于 2018-03-05 10:40:46
您可以使用两个概念来完成这一任务:
高通滤波
利用低通滤波器和一些平凡的算法可以得到高通滤波器.例如(在这里使用泛型语法,没有标记任何特定语言):
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,因此不受影响。
https://stackoverflow.com/questions/49113328
复制相似问题