2013-05-16 5 views
0

Я не понимаю код гамма-коррекции в hog.cpp в OpenCV, я прошел через некоторые ссылки, которые here Doesnt матч с кодом в OpenCV hog.cppгамма-коррекция в OpenCV hog.cpp

Mat_<float> _lut(1, 256); 

const float* lut = &_lut(0,0); 

if(gammaCorrection) 
    for(i = 0; i < 256; i++) 
     _lut(0,i) = std::sqrt((float)i); 
else 
    for(i = 0; i < 256; i++) 
     _lut(0,i) = (float)i; 

Все, что я понял из кода, это создание 2-мерного массива 1x256, если гамма-коррекция верна, он вычислит квадратный корень данных. Я пытался отлаживать все файлы, связанные с этим кодом, но понял. Может кто-нибудь коротко рассказать, что происходит здесь.

Пожалуйста, помогите
Заранее спасибо.

ответ

5

Все, что вы делаете, создает таблицу поиска; вы знаете, что входящие данные являются символами, поэтому все пиксели могут иметь только значения от 0 до 255, поэтому, если вы выполняете гамма-коррекцию, вы предварительно вычисляете квадратный корень. Это используется позже, внутри вычисления градиента на пиксель. Позже в computeGradients(), вы получите указатель строки:

const uchar* imgPtr = img.data + img.step*ymap[y]; 

Затем индекс в таблице поиска, чтобы получить значения пикселов для градиентов [-1 0 1]:

 for(x = 0; x < width; x++) 
     { 
      int x1 = xmap[x]; 

      dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]); 
      dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]); 
     } 
+0

спасибо много это простое и четкое объяснение. – SharathNaidu

+0

@Sharath Пожалуйста, подумайте о том, чтобы принять это как правильный ответ, если он решил вашу проблему, щелкнув маленький маркер проверки слева. – Sipty

Смежные вопросы