Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Retinex Color Restoration

I want to restore the colour of MSR(Multi-scale Retinex) using the following equation.

MSRCR(x, y) = G [C(x,y)*MSR(x, y) - b]

I tried to implement from this paper . 1: http://www.ipol.im/pub/art/2014/107/article.pdf

//Colour Restoration Steps
Mat msrcrB, msrcrG, msrcrR;
multiply(crb, msrb, msrcrB); // For Blue Channel // crb, crg, crr are color restoration functions
multiply(crg, msrg, msrcrG); // For Green Channel
multiply(crr, msrr, msrcrR); // For Red Channel

msrcrB = (msrcrB + b); // G/O blue channel
msrcrG = (msrcrG + b); // G/O green channel
msrcrR = (msrcrR + b); // G/O red channel
msrcrB = G * msrcrB ; // G/O blue channel
msrcrG = G * msrcrG ; // G/O green channel
msrcrR = G * msrcrR ; // G/O red channel

minMaxLoc(msrcrB, &minb, &maxb);
minMaxLoc(msrcrG, &ming, &maxg);
minMaxLoc(msrcrR, &minr, &maxr);

Mat NORMmsrcrB, NORMmsrcrG, NORMmsrcrR;
normalize(msrcrB, NORMmsrcrB, 255, 0, NORM_MINMAX);
normalize(msrcrG, NORMmsrcrG, 255, 0, NORM_MINMAX);
normalize(msrcrR, NORMmsrcrR, 255, 0, NORM_MINMAX);

Mat msrcrCh[3] = { NORMmsrcrB, NORMmsrcrG, NORMmsrcrR };
Mat MSRCR;
merge(msrcrCh, 3, MSRCR);
convertScaleAbs(MSRCR, MSRCR);
namedWindow("MSRCR", WINDOW_FREERATIO);
imshow("MSRCR", MSRCR);
waitKey(0);

I want to get the final color restoration image. But I got a nonlinear output image.

MSR image and MSRCR image

In the above image, the MSR image correct and the MSRCR image is not correct.