2013-05-20 7 views
-1

Этот вопрос о данном руководстве http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html#smoothingПонимание OpenCV Сглаживание изображений

В этом коде все методы сглаживания работает внутри цикла для MAX_KERNEL_LENGTH раз. Что это за ядро? Я действительно не понимаю. Пожалуйста помоги.

+0

Это ядро ​​линейного фильтра. Взгляните на цифровую обработку сигнала – Andrew

ответ

3

Для вычисления сглаживания, например, среднее значение вычисляется для ближайших пикселей. Какое и сколько пикселей задано этим ядром. Ядро также содержит информацию о взвешивании пикселей.

Ядро чаще всего представлено в виде матрицы (и в этом случае также), которая центрируется на каждом пикселе, который является средним для caluclated. Калуцировка выглядит так в псевдо-C++-коде.

for(int i=0;i<src.rows;i++){ 
    for (int j=0;j<src.cols;j++){ 
     dst[i][j]=0; 
     for(int kernal_i=0;i<kernal.rows;i++){ 
      for (int kernal_j=0;j<kernal.cols;j++){ 
        dst[i-kernal.rows+kernal_i][j-kernal.cols+kernal_j]+= 
         src[i-kernal.rows+kernal_i][j-kernal.cols+kernal_j]* 
         kernal[kernal_i][kernal_j]; 
      } 
     } 
    } 
} 

varible упоминается как MAX_KERNAL_LENGTH просто самый большой размер матрицы, создающей одно такое ядро.

+0

ahh! Большой! Спасибо :) –

+0

hmm, Можете ли вы объяснить ядро ​​еще более простым способом, пожалуйста? –

+0

см. [Link] (http://en.wikipedia.org/wiki/Kernel_ (image_processing)) – Xale

0

MAX_KERNEL_LENGTH определяется как константа (31) в коде. Он используется для изменения размера ядра от 1x1 до 31x31, чтобы показать влияние разных размеров ядра в разных алгоритмах размытия, используемых в учебнике.