Lokalna normalizacja w OpenCV
Próbuję zaimplementować w OpenCV lokalny algorytm normalizacji, aby zmniejszyć różnicę oświetlenia na obrazie. ZnalazłemFunkcja MATLABi zaimplementowałem to w OpenCV. Jednak wynik, który otrzymuję, jest inny niż wynik podany przez funkcję MATLAB.
To jest mój kod:
Mat localNorm(Mat image, float sigma1, float sigma2)
{
Mat floatGray, blurred1, blurred2, temp1, temp2, res;
image.convertTo(floatGray, CV_32FC1);
floatGray = floatGray/255.0;
int blur1 = 2*ceil(-NormInv(0.05, 0, sigma1))+1;
cv::GaussianBlur(floatGray, blurred1, cv::Size(blur1,blur1), sigma1);
temp1 = floatGray-blurred1;
cv::pow(temp1, 2.0, temp2);
int blur2 = 2*ceil(-NormInv(0.05, 0, sigma2))+1;
cv::GaussianBlur(temp2, blurred2, cv::Size(blur2,blur2), sigma2);
cv::pow(blurred2, 0.5, temp2);
floatGray = temp1/temp2;
floatGray = 255.0*floatGray;
floatGray.convertTo(res, CV_8UC1);
return res;
}
FunkcjaNormInv
to implementacja C ++ podana przez Euan Dean wten post.
Poniżej przedstawiono wynik, który otrzymuję i wynik teoretyczny dla tych samych wartościsigma1
isigma2
(Odpowiednio 2,0 i 20,0)
Próbowałem użyć różnych wartości dlasigma1
isigma2
, ale żaden z nich nie działa. Próbowałem też to robićblur1=0
iblur2=0
w funkcji Gaussa, ale też nie działa.
Każda pomoc byłaby doceniana. Z góry dziękuję.