如何在OpenCV中进行3D高斯滤波?

时间:2014-08-15 21:56:35

标签: c++ opencv image-processing filtering

我有一个多维矩阵,我不仅要在xy的2D中进行高斯平滑处理,而且我还希望在3D中对通道进行平滑处理。我怎么能在OpenCV中做到这一点?

我知道有一个名为 GaussianBlur 的函数可以在2D中应用高斯滤波器,但3D怎么样?你可以调用它的方式如下所示:

GaussianBlur(frame, frame2, Size(sigma, sigma), 0, 0);

1 个答案:

答案 0 :(得分:2)

本地不支持OpenCV。但是,由于高斯过滤是可分离的,因此您可以单独过滤每个维度。

使用BaseRowFilterhttp://docs.opencv.org/modules/imgproc/doc/filtering.html#BaseRowFilterBaseColumnFilterhttp://docs.opencv.org/modules/imgproc/doc/filtering.html#BaseColumnFilter的组合,并将高斯内核指定为1D。

使用getGaussianKernelhttp://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=gauss#getgaussiankernel来帮助您计算一维高斯内核,而无需亲自动手。

现在,对于第三个维度,这将是棘手的。您必须将特定行/列过滤器应用于特定空间位置的每个3D切片。例如,如果您有5个切片的体积,并且一个图像的大小为10 x 10,则3D中的最终过滤结果是您必须提取100个大小为5的1D信号,然后在每个1D上应用内核信号分开。

请查看此帖子以获取更多信息:How to do a Gaussian filtering in 3D。其他人过去曾试图这样做。

祝你好运!