use*_*089 7 c++ opencv filtering image-processing
我有一个多维矩阵,我想不仅在2D一起做高斯平滑x
和y
,但我也想这样做跨在3D频道平滑.我怎么能在OpenCV中做到这一点?
我知道有一个名为GaussianBlur的函数可以在2D中应用高斯滤波器,但3D怎么样?你可以调用它的方式如下所示:
GaussianBlur(frame, frame2, Size(sigma, sigma), 0, 0);
Run Code Online (Sandbox Code Playgroud)
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 Filter in 3D。过去有人尝试过这样做。
祝你好运!