我有一个多维矩阵,我不仅要在x
和y
的2D中进行高斯平滑处理,而且我还希望在3D中对通道进行平滑处理。我怎么能在OpenCV中做到这一点?
我知道有一个名为 GaussianBlur 的函数可以在2D中应用高斯滤波器,但3D怎么样?你可以调用它的方式如下所示:
GaussianBlur(frame, frame2, Size(sigma, sigma), 0, 0);
答案 0 :(得分:2)
本地不支持OpenCV。但是,由于高斯过滤是可分离的,因此您可以单独过滤每个维度。
使用BaseRowFilter
:http://docs.opencv.org/modules/imgproc/doc/filtering.html#BaseRowFilter和BaseColumnFilter
:http://docs.opencv.org/modules/imgproc/doc/filtering.html#BaseColumnFilter的组合,并将高斯内核指定为1D。
使用getGaussianKernel
:http://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。其他人过去曾试图这样做。
祝你好运!