From aa621d6f3c3fa89b965ae33d8d84734196de0717 Mon Sep 17 00:00:00 2001 From: Rostislav Vasilikhin Date: Thu, 6 Jul 2017 00:23:58 +0300 Subject: [PATCH] magic constants explained --- modules/imgproc/src/color.cpp | 4 ++++ modules/imgproc/src/opencl/cvtcolor.cl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/modules/imgproc/src/color.cpp b/modules/imgproc/src/color.cpp index f8cd0cb..b40726d 100644 --- a/modules/imgproc/src/color.cpp +++ b/modules/imgproc/src/color.cpp @@ -7011,6 +7011,8 @@ struct RGB2Luv_b const float* _whitept, bool _srgb ) : srccn(_srccn), cvt(3, blueIdx, _coeffs, _whitept, _srgb) { + //0.72033 = 255/(220+134), 96.525 = 134*255/(220+134) + //0.9732 = 255/(140+122), 136.259 = 140*255/(140+122) #if CV_NEON v_scale_inv = vdupq_n_f32(1.f/255.f); v_scale = vdupq_n_f32(2.55f); @@ -7211,6 +7213,8 @@ struct Luv2RGB_b const float* _whitept, bool _srgb ) : dstcn(_dstcn), cvt(3, blueIdx, _coeffs, _whitept, _srgb ) { + // 1.388235294117647 = (220+134)/255 + // 1.027450980392157 = (140+122)/255 #if CV_NEON v_scale_inv = vdupq_n_f32(100.f/255.f); v_coeff1 = vdupq_n_f32(1.388235294117647f); diff --git a/modules/imgproc/src/opencl/cvtcolor.cl b/modules/imgproc/src/opencl/cvtcolor.cl index 7c2e519..3fd1ad1 100644 --- a/modules/imgproc/src/opencl/cvtcolor.cl +++ b/modules/imgproc/src/opencl/cvtcolor.cl @@ -2035,7 +2035,9 @@ __kernel void BGR2Luv(__global const uchar * src, int src_step, int src_offset, float v = L*fma(2.25f, Y*d, -_vn); dst[0] = SAT_CAST(L * 2.55f); + //0.72033 = 255/(220+134), 96.525 = 134*255/(220+134) dst[1] = SAT_CAST(fma(u, 0.72033898305084743f, 96.525423728813564f)); + //0.9732 = 255/(140+122), 136.259 = 140*255/(140+122) dst[2] = SAT_CAST(fma(v, 0.9732824427480916f, 136.259541984732824f)); ++y; @@ -2137,7 +2139,9 @@ __kernel void Luv2BGR(__global const uchar * src, int src_step, int src_offset, { float d, X, Y, Z; float L = src[0]*(100.f/255.f); + // 1.388235294117647 = (220+134)/255 float u = fma(convert_float(src[1]), 1.388235294117647f, -134.f); + // 1.027450980392157 = (140+122)/255 float v = fma(convert_float(src[2]), 1.027450980392157f, - 140.f); if(L >= 8) { -- 2.7.4