@@ -5852,7 +5852,6 @@ enum
5852
5852
trilinear_shift = 8 - lab_lut_shift + 1 ,
5853
5853
TRILINEAR_BASE = (1 << trilinear_shift)
5854
5854
};
5855
- static int16_t *RGB2LabLUT_s16;
5856
5855
static int16_t trilinearLUT[TRILINEAR_BASE*TRILINEAR_BASE*TRILINEAR_BASE*8 ];
5857
5856
static ushort LabToYF_b[256 *2 ];
5858
5857
static const int minABvalue = -8145 ;
@@ -5861,15 +5860,19 @@ static const int *abToXZ_b;
5861
5860
static const bool enableRGB2LuvInterpolation = true ;
5862
5861
static const bool enablePackedRGB2Luv = true ;
5863
5862
static const bool enablePackedLuv2RGB = true ;
5864
- static int16_t *RGB2LuvLUT_s16;
5865
5863
static const softfloat uLow (-134 ), uHigh(220 ), uRange(uHigh-uLow);
5866
5864
static const softfloat vLow (-140 ), vHigh(122 ), vRange(vHigh-vLow);
5867
5865
5866
+ static struct LABLUVLUT_s16_t {
5867
+ const int16_t *RGB2LabLUT_s16;
5868
+ const int16_t *RGB2LuvLUT_s16;
5869
+ } LABLUVLUTs16 = {0 , 0 };
5870
+
5868
5871
static struct LUVLUT_T {
5869
5872
const int *LuToUp_b;
5870
5873
const int *LvToVp_b;
5871
5874
const long long int *LvToVpl_b;
5872
- } LUVLUT;
5875
+ } LUVLUT = { 0 , 0 , 0 } ;
5873
5876
5874
5877
#define clip (value ) \
5875
5878
value < 0 .0f ? 0 .0f : value > 1 .0f ? 1 .0f : value;
@@ -5881,6 +5884,12 @@ static const softdouble gammaLowScale = softdouble(323)/softdouble(25);
5881
5884
static const softdouble gammaPower = softdouble(12 )/softdouble(5 ); // 2.4
5882
5885
static const softdouble gammaXshift = softdouble(11 )/softdouble(200 ); // 0.055
5883
5886
5887
+ static const softfloat lthresh = softfloat(216 ) / softfloat(24389 ); // 0.008856f = (6/29)^3
5888
+ static const softfloat lscale = softfloat(841 ) / softfloat(108 ); // 7.787f = (29/3)^3/(29*4)
5889
+ static const softfloat lbias = softfloat(16 ) / softfloat(116 );
5890
+ static const softfloat f255 (255 );
5891
+
5892
+
5884
5893
static inline softfloat applyGamma (softfloat x)
5885
5894
{
5886
5895
// return x <= 0.04045f ? x*(1.f/12.92f) : (float)std::pow((double)(x + 0.055)*(1./1.055), 2.4);
@@ -5902,7 +5911,6 @@ static inline softfloat applyInvGamma(softfloat x)
5902
5911
static LUVLUT_T initLUTforLUV (int BASE, const softfloat &un, const softfloat &vn)
5903
5912
{
5904
5913
const softfloat oneof4 = softfloat::one ()/softfloat (4 );
5905
- const softfloat f255 (255 );
5906
5914
int *LuToUp_b = cv::allocSingleton<int >(256 *256 );
5907
5915
int *LvToVp_b = cv::allocSingleton<int >(256 *256 );
5908
5916
long long int *LvToVpl_b = cv::allocSingleton<long long int >(256 *256 );
@@ -5957,16 +5965,135 @@ static int * initLUTforABXZ(int BASE)
5957
5965
return res;
5958
5966
}
5959
5967
5968
+ inline void fill_one (int16_t *LAB, const int16_t *LAB_prev, int16_t *LUV, const int16_t *LUV_prev, int p, int q, int r, int _p, int _q, int _r)
5969
+ {
5970
+ do {
5971
+ int idxold = 0 ;
5972
+ idxold += min (p+(_p), (int )(LAB_LUT_DIM-1 ))*3 ;
5973
+ idxold += min (q+(_q), (int )(LAB_LUT_DIM-1 ))*LAB_LUT_DIM*3 ;
5974
+ idxold += min (r+(_r), (int )(LAB_LUT_DIM-1 ))*LAB_LUT_DIM*LAB_LUT_DIM*3 ;
5975
+ int idxnew = p*3 *8 + q*LAB_LUT_DIM*3 *8 + r*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 +4 *(_p)+2 *(_q)+(_r);
5976
+ LAB[idxnew] = LAB_prev[idxold];
5977
+ LAB[idxnew+8 ] = LAB_prev[idxold+1 ];
5978
+ LAB[idxnew+16 ] = LAB_prev[idxold+2 ];
5979
+ LUV[idxnew] = LUV_prev[idxold];
5980
+ LUV[idxnew+8 ] = LUV_prev[idxold+1 ];
5981
+ LUV[idxnew+16 ] = LUV_prev[idxold+2 ];
5982
+ } while (0 );
5983
+ }
5984
+
5985
+ static LABLUVLUT_s16_t initLUTforLABLUVs16 (const softfloat & un, const softfloat & vn)
5986
+ {
5987
+ int i;
5988
+ softfloat scaledCoeffs[9 ], coeffs[9 ];
5989
+
5990
+ // RGB2Lab coeffs
5991
+ softdouble scaleWhite[] = { softdouble::one ()/D65[0 ],
5992
+ softdouble::one (),
5993
+ softdouble::one ()/D65[2 ] };
5994
+
5995
+ for (i = 0 ; i < 3 ; i++ )
5996
+ {
5997
+ coeffs[i*3 +2 ] = sRGB2XYZ_D65 [i*3 +0 ];
5998
+ coeffs[i*3 +1 ] = sRGB2XYZ_D65 [i*3 +1 ];
5999
+ coeffs[i*3 +0 ] = sRGB2XYZ_D65 [i*3 +2 ];
6000
+ scaledCoeffs[i*3 +0 ] = sRGB2XYZ_D65 [i*3 +2 ] * scaleWhite[i];
6001
+ scaledCoeffs[i*3 +1 ] = sRGB2XYZ_D65 [i*3 +1 ] * scaleWhite[i];
6002
+ scaledCoeffs[i*3 +2 ] = sRGB2XYZ_D65 [i*3 +0 ] * scaleWhite[i];
6003
+ }
6004
+
6005
+ softfloat S0 = scaledCoeffs[0 ], S1 = scaledCoeffs[1 ], S2 = scaledCoeffs[2 ],
6006
+ S3 = scaledCoeffs[3 ], S4 = scaledCoeffs[4 ], S5 = scaledCoeffs[5 ],
6007
+ S6 = scaledCoeffs[6 ], S7 = scaledCoeffs[7 ], S8 = scaledCoeffs[8 ];
6008
+ softfloat C0 = coeffs[0 ], C1 = coeffs[1 ], C2 = coeffs[2 ],
6009
+ C3 = coeffs[3 ], C4 = coeffs[4 ], C5 = coeffs[5 ],
6010
+ C6 = coeffs[6 ], C7 = coeffs[7 ], C8 = coeffs[8 ];
6011
+
6012
+ // u, v: [-134.0, 220.0], [-140.0, 122.0]
6013
+ static const softfloat lld (LAB_LUT_DIM - 1 ), f116 (116 ), f16 (16 ), f500 (500 ), f200 (200 );
6014
+ static const softfloat f100 (100 ), f128 (128 ), f256 (256 ), lbase ((int )LAB_BASE);
6015
+ // 903.3f = (29/3)^3
6016
+ static const softfloat f9033 = softfloat (29 *29 *29 )/softfloat (27 );
6017
+ static const softfloat f9of4 = softfloat (9 )/softfloat (4 );
6018
+ static const softfloat f15 (15 ), f3 (3 );
6019
+
6020
+ AutoBuffer<int16_t > RGB2Labprev (LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 );
6021
+ AutoBuffer<int16_t > RGB2Luvprev (LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 );
6022
+ for (int p = 0 ; p < LAB_LUT_DIM; p++)
6023
+ {
6024
+ for (int q = 0 ; q < LAB_LUT_DIM; q++)
6025
+ {
6026
+ for (int r = 0 ; r < LAB_LUT_DIM; r++)
6027
+ {
6028
+ int idx = p*3 + q*LAB_LUT_DIM*3 + r*LAB_LUT_DIM*LAB_LUT_DIM*3 ;
6029
+ softfloat R = softfloat (p)/lld;
6030
+ softfloat G = softfloat (q)/lld;
6031
+ softfloat B = softfloat (r)/lld;
6032
+
6033
+ R = applyGamma (R);
6034
+ G = applyGamma (G);
6035
+ B = applyGamma (B);
6036
+
6037
+ // RGB 2 Lab LUT building
6038
+ {
6039
+ softfloat X = R*S0 + G*S1 + B*S2;
6040
+ softfloat Y = R*S3 + G*S4 + B*S5;
6041
+ softfloat Z = R*S6 + G*S7 + B*S8;
6042
+
6043
+ softfloat FX = X > lthresh ? cbrt (X) : mulAdd (X, lscale, lbias);
6044
+ softfloat FY = Y > lthresh ? cbrt (Y) : mulAdd (Y, lscale, lbias);
6045
+ softfloat FZ = Z > lthresh ? cbrt (Z) : mulAdd (Z, lscale, lbias);
6046
+
6047
+ softfloat L = Y > lthresh ? (f116*FY - f16 ) : (f9033*Y);
6048
+ softfloat a = f500 * (FX - FY);
6049
+ softfloat b = f200 * (FY - FZ);
6050
+
6051
+ RGB2Labprev[idx] = (int16_t )(cvRound (lbase*L/f100));
6052
+ RGB2Labprev[idx+1 ] = (int16_t )(cvRound (lbase*(a + f128 )/f256));
6053
+ RGB2Labprev[idx+2 ] = (int16_t )(cvRound (lbase*(b + f128 )/f256));
6054
+ }
6055
+
6056
+ // RGB 2 Luv LUT building
6057
+ {
6058
+ softfloat X = R*C0 + G*C1 + B*C2;
6059
+ softfloat Y = R*C3 + G*C4 + B*C5;
6060
+ softfloat Z = R*C6 + G*C7 + B*C8;
6061
+
6062
+ softfloat L = Y < lthresh ? mulAdd (Y, lscale, lbias) : cbrt (Y);
6063
+ L = L*f116 - f16 ;
6064
+
6065
+ softfloat d = softfloat (4 *13 )/max (X + f15 * Y + f3 * Z, softfloat (FLT_EPSILON));
6066
+ softfloat u = L*(X*d - un);
6067
+ softfloat v = L*(f9of4*Y*d - vn);
6068
+
6069
+ RGB2Luvprev[idx ] = (int16_t )cvRound (lbase*L/f100);
6070
+ RGB2Luvprev[idx+1 ] = (int16_t )cvRound (lbase*(u-uLow)/uRange);
6071
+ RGB2Luvprev[idx+2 ] = (int16_t )cvRound (lbase*(v-vLow)/vRange);
6072
+ }
6073
+ }
6074
+ }
6075
+ }
6076
+
6077
+ int16_t *RGB2LabLUT_s16 = cv::allocSingleton<int16_t >(LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 );
6078
+ int16_t *RGB2LuvLUT_s16 = cv::allocSingleton<int16_t >(LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 );
6079
+ for (int p = 0 ; p < LAB_LUT_DIM; p++)
6080
+ for (int q = 0 ; q < LAB_LUT_DIM; q++)
6081
+ for (int r = 0 ; r < LAB_LUT_DIM; r++)
6082
+ for (int p_ = 0 ; p_ < 2 ; ++p_)
6083
+ for (int q_ = 0 ; q_ < 2 ; ++q_)
6084
+ for (int r_ = 0 ; r_ < 2 ; ++r_)
6085
+ fill_one (RGB2LabLUT_s16, RGB2Labprev, RGB2LuvLUT_s16, RGB2Luvprev, p, q, r, p_, q_, r_);
6086
+ LABLUVLUT_s16_t res;
6087
+ res.RGB2LabLUT_s16 = RGB2LabLUT_s16;
6088
+ res.RGB2LuvLUT_s16 = RGB2LuvLUT_s16;
6089
+ return res;
6090
+ }
6091
+
5960
6092
static void initLabTabs ()
5961
6093
{
5962
6094
static bool initialized = false ;
5963
6095
if (!initialized)
5964
6096
{
5965
- static const softfloat lthresh = softfloat (216 ) / softfloat (24389 ); // 0.008856f = (6/29)^3
5966
- static const softfloat lscale = softfloat (841 ) / softfloat (108 ); // 7.787f = (29/3)^3/(29*4)
5967
- static const softfloat lbias = softfloat (16 ) / softfloat (116 );
5968
- static const softfloat f255 (255 );
5969
-
5970
6097
softfloat f[LAB_CBRT_TAB_SIZE+1 ], g[GAMMA_TAB_SIZE+1 ], ig[GAMMA_TAB_SIZE+1 ];
5971
6098
softfloat scale = softfloat::one ()/softfloat (LabCbrtTabScale);
5972
6099
int i;
@@ -6062,125 +6189,8 @@ static void initLabTabs()
6062
6189
static const bool calcLUT = enableRGB2LabInterpolation || enableRGB2LuvInterpolation;
6063
6190
if (calcLUT)
6064
6191
{
6065
- softfloat scaledCoeffs[9 ], coeffs[9 ];
6066
-
6067
- // RGB2Lab coeffs
6068
- softdouble scaleWhite[] = { softdouble::one ()/D65[0 ],
6069
- softdouble::one (),
6070
- softdouble::one ()/D65[2 ] };
6071
-
6072
- for (i = 0 ; i < 3 ; i++ )
6073
- {
6074
- coeffs[i*3 +2 ] = sRGB2XYZ_D65 [i*3 +0 ];
6075
- coeffs[i*3 +1 ] = sRGB2XYZ_D65 [i*3 +1 ];
6076
- coeffs[i*3 +0 ] = sRGB2XYZ_D65 [i*3 +2 ];
6077
- scaledCoeffs[i*3 +0 ] = sRGB2XYZ_D65 [i*3 +2 ] * scaleWhite[i];
6078
- scaledCoeffs[i*3 +1 ] = sRGB2XYZ_D65 [i*3 +1 ] * scaleWhite[i];
6079
- scaledCoeffs[i*3 +2 ] = sRGB2XYZ_D65 [i*3 +0 ] * scaleWhite[i];
6080
- }
6081
-
6082
- softfloat S0 = scaledCoeffs[0 ], S1 = scaledCoeffs[1 ], S2 = scaledCoeffs[2 ],
6083
- S3 = scaledCoeffs[3 ], S4 = scaledCoeffs[4 ], S5 = scaledCoeffs[5 ],
6084
- S6 = scaledCoeffs[6 ], S7 = scaledCoeffs[7 ], S8 = scaledCoeffs[8 ];
6085
- softfloat C0 = coeffs[0 ], C1 = coeffs[1 ], C2 = coeffs[2 ],
6086
- C3 = coeffs[3 ], C4 = coeffs[4 ], C5 = coeffs[5 ],
6087
- C6 = coeffs[6 ], C7 = coeffs[7 ], C8 = coeffs[8 ];
6088
6192
6089
- // u, v: [-134.0, 220.0], [-140.0, 122.0]
6090
- static const softfloat lld (LAB_LUT_DIM - 1 ), f116 (116 ), f16 (16 ), f500 (500 ), f200 (200 );
6091
- static const softfloat f100 (100 ), f128 (128 ), f256 (256 ), lbase ((int )LAB_BASE);
6092
- // 903.3f = (29/3)^3
6093
- static const softfloat f9033 = softfloat (29 *29 *29 )/softfloat (27 );
6094
- static const softfloat f9of4 = softfloat (9 )/softfloat (4 );
6095
- static const softfloat f15 (15 ), f3 (3 );
6096
- AutoBuffer<int16_t > RGB2Labprev (LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 );
6097
- AutoBuffer<int16_t > RGB2Luvprev (LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 );
6098
- for (int p = 0 ; p < LAB_LUT_DIM; p++)
6099
- {
6100
- for (int q = 0 ; q < LAB_LUT_DIM; q++)
6101
- {
6102
- for (int r = 0 ; r < LAB_LUT_DIM; r++)
6103
- {
6104
- int idx = p*3 + q*LAB_LUT_DIM*3 + r*LAB_LUT_DIM*LAB_LUT_DIM*3 ;
6105
- softfloat R = softfloat (p)/lld;
6106
- softfloat G = softfloat (q)/lld;
6107
- softfloat B = softfloat (r)/lld;
6108
-
6109
- R = applyGamma (R);
6110
- G = applyGamma (G);
6111
- B = applyGamma (B);
6112
-
6113
- // RGB 2 Lab LUT building
6114
- {
6115
- softfloat X = R*S0 + G*S1 + B*S2;
6116
- softfloat Y = R*S3 + G*S4 + B*S5;
6117
- softfloat Z = R*S6 + G*S7 + B*S8;
6118
-
6119
- softfloat FX = X > lthresh ? cbrt (X) : mulAdd (X, lscale, lbias);
6120
- softfloat FY = Y > lthresh ? cbrt (Y) : mulAdd (Y, lscale, lbias);
6121
- softfloat FZ = Z > lthresh ? cbrt (Z) : mulAdd (Z, lscale, lbias);
6122
-
6123
- softfloat L = Y > lthresh ? (f116*FY - f16 ) : (f9033*Y);
6124
- softfloat a = f500 * (FX - FY);
6125
- softfloat b = f200 * (FY - FZ);
6126
-
6127
- RGB2Labprev[idx] = (int16_t )(cvRound (lbase*L/f100));
6128
- RGB2Labprev[idx+1 ] = (int16_t )(cvRound (lbase*(a + f128 )/f256));
6129
- RGB2Labprev[idx+2 ] = (int16_t )(cvRound (lbase*(b + f128 )/f256));
6130
- }
6131
-
6132
- // RGB 2 Luv LUT building
6133
- {
6134
- softfloat X = R*C0 + G*C1 + B*C2;
6135
- softfloat Y = R*C3 + G*C4 + B*C5;
6136
- softfloat Z = R*C6 + G*C7 + B*C8;
6137
-
6138
- softfloat L = Y < lthresh ? mulAdd (Y, lscale, lbias) : cbrt (Y);
6139
- L = L*f116 - f16 ;
6140
-
6141
- softfloat d = softfloat (4 *13 )/max (X + f15 * Y + f3 * Z, softfloat (FLT_EPSILON));
6142
- softfloat u = L*(X*d - un);
6143
- softfloat v = L*(f9of4*Y*d - vn);
6144
-
6145
- RGB2Luvprev[idx ] = (int16_t )cvRound (lbase*L/f100);
6146
- RGB2Luvprev[idx+1 ] = (int16_t )cvRound (lbase*(u-uLow)/uRange);
6147
- RGB2Luvprev[idx+2 ] = (int16_t )cvRound (lbase*(v-vLow)/vRange);
6148
- }
6149
- }
6150
- }
6151
- }
6152
- RGB2LabLUT_s16 = new int16_t [LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 ];
6153
- RGB2LuvLUT_s16 = new int16_t [LAB_LUT_DIM*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 ];
6154
- for (int p = 0 ; p < LAB_LUT_DIM; p++)
6155
- {
6156
- for (int q = 0 ; q < LAB_LUT_DIM; q++)
6157
- {
6158
- for (int r = 0 ; r < LAB_LUT_DIM; r++)
6159
- {
6160
- #define FILL (_p, _q, _r ) \
6161
- do {\
6162
- int idxold = 0 ;\
6163
- idxold += min (p+(_p), (int )(LAB_LUT_DIM-1 ))*3 ;\
6164
- idxold += min (q+(_q), (int )(LAB_LUT_DIM-1 ))*LAB_LUT_DIM*3 ;\
6165
- idxold += min (r+(_r), (int )(LAB_LUT_DIM-1 ))*LAB_LUT_DIM*LAB_LUT_DIM*3 ;\
6166
- int idxnew = p*3 *8 + q*LAB_LUT_DIM*3 *8 + r*LAB_LUT_DIM*LAB_LUT_DIM*3 *8 +4 *(_p)+2 *(_q)+(_r);\
6167
- RGB2LabLUT_s16[idxnew] = RGB2Labprev[idxold];\
6168
- RGB2LabLUT_s16[idxnew+8 ] = RGB2Labprev[idxold+1 ];\
6169
- RGB2LabLUT_s16[idxnew+16 ] = RGB2Labprev[idxold+2 ];\
6170
- RGB2LuvLUT_s16[idxnew] = RGB2Luvprev[idxold];\
6171
- RGB2LuvLUT_s16[idxnew+8 ] = RGB2Luvprev[idxold+1 ];\
6172
- RGB2LuvLUT_s16[idxnew+16 ] = RGB2Luvprev[idxold+2 ];\
6173
- } while (0 )
6174
-
6175
- FILL (0 , 0 , 0 ); FILL (0 , 0 , 1 );
6176
- FILL (0 , 1 , 0 ); FILL (0 , 1 , 1 );
6177
- FILL (1 , 0 , 0 ); FILL (1 , 0 , 1 );
6178
- FILL (1 , 1 , 0 ); FILL (1 , 1 , 1 );
6179
-
6180
- #undef FILL
6181
- }
6182
- }
6183
- }
6193
+ LABLUVLUTs16 = initLUTforLABLUVs16 (un, vn);
6184
6194
6185
6195
for (int16_t p = 0 ; p < TRILINEAR_BASE; p++)
6186
6196
{
@@ -6506,7 +6516,7 @@ struct RGB2Lab_f
6506
6516
v_uint16x8 uibvec = v_reinterpret_as_u16 (ibvec);
6507
6517
6508
6518
v_uint16x8 ui_lvec, ui_avec, ui_bvec;
6509
- trilinearPackedInterpolate (uirvec, uigvec, uibvec, RGB2LabLUT_s16, ui_lvec, ui_avec, ui_bvec);
6519
+ trilinearPackedInterpolate (uirvec, uigvec, uibvec, LABLUVLUTs16. RGB2LabLUT_s16 , ui_lvec, ui_avec, ui_bvec);
6510
6520
v_int16x8 i_lvec = v_reinterpret_as_s16 (ui_lvec);
6511
6521
v_int16x8 i_avec = v_reinterpret_as_s16 (ui_avec);
6512
6522
v_int16x8 i_bvec = v_reinterpret_as_s16 (ui_bvec);
@@ -6547,7 +6557,7 @@ struct RGB2Lab_f
6547
6557
6548
6558
int iR = cvRound (R*LAB_BASE), iG = cvRound (G*LAB_BASE), iB = cvRound (B*LAB_BASE);
6549
6559
int iL, ia, ib;
6550
- trilinearInterpolate (iR, iG, iB, RGB2LabLUT_s16, iL, ia, ib);
6560
+ trilinearInterpolate (iR, iG, iB, LABLUVLUTs16. RGB2LabLUT_s16 , iL, ia, ib);
6551
6561
float L = iL*1 .0f /LAB_BASE, a = ia*1 .0f /LAB_BASE, b = ib*1 .0f /LAB_BASE;
6552
6562
6553
6563
dst[i] = L*100 .0f ;
@@ -8127,8 +8137,8 @@ struct RGB2Luvinterpolate
8127
8137
trilinearInterpolate(R, G, B, RGB2LuvLUT_s16, L, u, v);
8128
8138
*/
8129
8139
v_uint16x8 l80, u80, v80, l81, u81, v81;
8130
- trilinearPackedInterpolate (r80, g80, b80, RGB2LuvLUT_s16, l80, u80, v80);
8131
- trilinearPackedInterpolate (r81, g81, b81, RGB2LuvLUT_s16, l81, u81, v81);
8140
+ trilinearPackedInterpolate (r80, g80, b80, LABLUVLUTs16. RGB2LuvLUT_s16 , l80, u80, v80);
8141
+ trilinearPackedInterpolate (r81, g81, b81, LABLUVLUTs16. RGB2LuvLUT_s16 , l81, u81, v81);
8132
8142
8133
8143
/*
8134
8144
dst[i] = saturate_cast<uchar>(L/baseDiv);
@@ -8154,7 +8164,7 @@ struct RGB2Luvinterpolate
8154
8164
R = R*baseDiv, G = G*baseDiv, B = B*baseDiv;
8155
8165
8156
8166
int L, u, v;
8157
- trilinearInterpolate (R, G, B, RGB2LuvLUT_s16, L, u, v);
8167
+ trilinearInterpolate (R, G, B, LABLUVLUTs16. RGB2LuvLUT_s16 , L, u, v);
8158
8168
8159
8169
dst[i] = saturate_cast<uchar>(L/baseDiv);
8160
8170
dst[i+1 ] = saturate_cast<uchar>(u/baseDiv);
@@ -8182,7 +8192,6 @@ struct RGB2Luv_b
8182
8192
&& enableBitExactness
8183
8193
&& enableRGB2LuvInterpolation);
8184
8194
8185
- static const softfloat f255 (255 );
8186
8195
#if CV_NEON
8187
8196
v_scale_inv = vdupq_n_f32 (softfloat::one ()/f255);
8188
8197
v_scale = vdupq_n_f32 (f255/softfloat (100 ));
@@ -8235,7 +8244,6 @@ struct RGB2Luv_b
8235
8244
int i, j, scn = srccn;
8236
8245
float CV_DECL_ALIGNED (16 ) buf[3 *BLOCK_SIZE];
8237
8246
8238
- static const softfloat f255 (255 );
8239
8247
#if CV_SSE2
8240
8248
__m128 v_coeffs = _mm_set_ps (f255/softfloat (100 ), f255/vRange, f255/uRange, f255/softfloat (100 ));
8241
8249
__m128 v_res = _mm_set_ps (0 .f , -vLow*f255/vRange, -uLow*f255/uRange, 0 .f );
@@ -8625,7 +8633,6 @@ struct Luv2RGB_b
8625
8633
uchar alpha = ColorChannel<uchar>::max ();
8626
8634
float CV_DECL_ALIGNED (16 ) buf[3 *BLOCK_SIZE];
8627
8635
8628
- static const softfloat f255 (255 );
8629
8636
static const softfloat fl = softfloat (100 )/f255;
8630
8637
static const softfloat fu = uRange/f255;
8631
8638
static const softfloat fv = vRange/f255;
0 commit comments