-1

这个问题是关于本教程http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html#smoothing

在该代码中,所有平滑方法都在循环中运行了MAX_KERNEL_LENGTH多次。这个内核是什么?

4

2 回答 2

3

例如,为了计算平滑,计算最接近像素的平均值。该内核给出了哪些像素以及多少像素。内核还包含有关像素权重的信息。

内核通常表示为一个矩阵(在这种情况下也是如此),该矩阵以每个像素为中心,计算平均值。计算在伪 C++ 代码中看起来像这样。

 for(int i=0;i<src.rows;i++){
     for (int j=0;j<src.cols;j++){
         dst[i][j]=0;
         for(int kernel_i=0;i<kernel.rows;i++){
             for (int kernel_j=0;j<kernel.cols;j++){
                  dst[i][j]+=
                      src[i-kernel.rows+kernel_i][j-kernel.cols+kernel_j]*
                      kernel[kernel_i][kernel_j];
             }
         }
     }
 }

提到的变量MAX_KERNEL_LENGTH只是创建一个这样的内核的矩阵的最大大小。

于 2013-05-20T15:58:55.443 回答
0

MAX_KERNEL_LENGTH定义为代码中的常量 (31)。它用于将内核大小从 1x1 更改为 31x31,以显示教程中使用的不同模糊算法中不同内核大小的效果。

于 2013-05-20T15:57:21.810 回答