Merge pull request #14106 from savuor:lab_wide
authorRostislav Vasilikhin <rostislav.vasilikhin@intel.com>
Mon, 20 May 2019 18:10:21 +0000 (21:10 +0300)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Mon, 20 May 2019 18:10:20 +0000 (21:10 +0300)
commite90e0ef9aa25611afc91c7bb42df87817889a811
tree22c97e111bd2fbedefaa24721b199c41b74f8e53
parentbc4b2d521c5eb25496a4e4632cea21cc3110a463
Merge pull request #14106 from savuor:lab_wide

Lab, Luv and XYZ conversions rewritten to wide intrinsics (#14106)

* rgb2xyz<float> re-vectorized

* rgb2xyz_i vectorized for ushort and uchar

* xyz2rgb<float> vectorized

* xyz2rgb_i vectorized for both uchar and ushort

* intermediate conversions (int->float) rewritten

* packed rgb2luv rewritten

* (some) float conversions rewritten

* burnt volatile int _3 and similar

* RGB2Lab_b rewritten

* tests: logging made better

* RGB2Lab_f (LRGB path) rewritten

* Lab2RGBfloat rewritten

* Lab2RGBinteger and Lab2RGB_b rewritten to wide universal intrinsics

* Luv2RGBinteger wide vectorized

* RGB2Lab_b fixed: v_sub_wrap instead of saturated sub

* warnings fixed

* trying to fix compilation on older compilers

* using 16x8 registers for 8-element dot product

* cleanup added

* splineInterpolate: loop unrolled, perf fix for f32x4

* Lab2RGBfloat: grab 2x more data to process on f32x4

* nrepeats for Luv2RGBfloat, +20% perf

* minor

* nrepeats to RGB2Lab_f

* Lab2RGBinteger: no tab for linear BGR

* nrepeats for RGB2Luvfloat

* Luv2RGBinteger: no tab for linear RGB

* +10% more to perf of Luv2RGBfloat

* nrepeats for 256-simd for Lab2RGBfloat

* less warnings

* BOM removed

* CV_SIMD_WIDTH used for lanes number checking

* trilinearPackedInterpolate: 128-bit specialization added

* fix build; no vx_cleanup(), instrumentation instead
modules/imgproc/src/color_lab.cpp
modules/imgproc/test/test_color.cpp