Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void RGB2LAB4Pix(Vec3b* dst, Vec3b* src)
- {
- // RGB —> XYZ //
- double var_R = ( (double)src->val[2] / 255 ); //R from 0 to 255
- double var_G = ( (double)src->val[1] / 255 ) ; //G from 0 to 255
- double var_B = ( (double)src->val[0] / 255 ) ; //B from 0 to 255
- if ( var_R > 0.04045 )
- var_R = pow(( ( var_R + 0.055 ) / 1.055 ), 2.4);
- else
- var_R = var_R / 12.92;
- if ( var_G > 0.04045 )
- var_G = pow(( ( var_G + 0.055 ) / 1.055 ), 2.4);
- else
- var_G = var_G / 12.92;
- if ( var_B > 0.04045 )
- var_B = pow(( ( var_B + 0.055 ) / 1.055 ), 2.4);
- else
- var_B = var_B / 12.92;
- var_R = var_R * 100;
- var_G = var_G * 100;
- var_B = var_B * 100;
- //Observer. = 2°, Illuminant = D65
- double X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805;
- double Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722;
- double Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505;
- // XYZ —> CIE-L*ab //
- double var_X = X / 95.047; //ref_X = 95.047 Observer= 2°, Illuminant= D65
- double var_Y = Y / 100.000; //ref_Y = 100.000
- double var_Z = Z / 108.883; //ref_Z = 108.883
- if ( var_X > 0.008856 )
- var_X = pow(var_X, double(0.333333));
- else
- var_X = ( 7.787 * var_X ) + ( 16 / 116 );
- if ( var_Y > 0.008856 )
- var_Y = pow(var_Y, double(0.333333));
- else
- var_Y = ( 7.787 * var_Y ) + ( 16 / 116 );
- if ( var_Z > 0.008856 )
- var_Z = pow(var_Z, double(0.333333));
- else
- var_Z = ( 7.787 * var_Z ) + ( 16 / 116 );
- double CIEL = ( 116 * var_Y ) - 16;
- double CIEa = 500 * ( var_X - var_Y );
- double CIEb = 200 * ( var_Y - var_Z );
- dst->val[2] = (uchar)CIEL;
- dst->val[1] = (uchar)CIEa;
- dst->val[0] = (uchar)CIEb;
- }
- void TaskG()
- {
- Mat Image = imread("lena.jpg");
- Mat ImageLab;
- Mat ImageLabCV;
- Image.copyTo(ImageLab);
- cvtColor(Image, ImageLabCV, CV_RGB2Lab);
- imwrite("LenaLabCV.jpg", ImageLabCV);
- //Попиксельно переводим RGB -> LAB
- for(int y = 0; y < Image.rows; ++y)
- {
- for(int x = 0; x < Image.cols; ++x)
- {
- RGB2LAB4Pix(&ImageLab.at<Vec3b>(y, x), &Image.at<Vec3b>(y, x));
- }
- }
- Mat LabDifference;
- LabDifference = abs(ImageLabCV - ImageLab);
- imwrite("LenaLabDifference.jpg", LabDifference);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement