Lokale Normalisierung in OpenCV

Ich versuche, in OpenCV einen lokalen Normalisierungsalgorithmus zu implementieren, um den Beleuchtungsunterschied in einem Bild zu verringern. Ich habe eine gefundenMATLAB-Funktion, und ich habe es in OpenCV implementiert. Das Ergebnis, das ich erhalte, unterscheidet sich jedoch von dem, das die MATLAB-Funktion liefert.

Das ist mein Code:

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;
}

Die FunktionNormInv ist die C ++ - Implementierung von Euan Dean indieser Beitrag.

Das Folgende zeigt das Ergebnis, das ich erhalte, und das theoretische Ergebnis für die gleichen Werte vonsigma1 undsigma2 (2,0 bzw. 20,0)

Ich habe versucht, verschiedene Werte für zu verwendensigma1 undsigma2, aber keiner von ihnen scheint zu funktionieren. Ich habe es auch versuchtblur1=0 undblur2=0 in der Gauß-Funktion, aber es funktioniert auch nicht.

Jede Hilfe wäre dankbar. Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage