Skip to content

Commit 6c71988

Browse files
committed
RGB2Luv_f: R, G, B limited to [0, 1]
1 parent 82811d0 commit 6c71988

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

modules/imgproc/src/color.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6607,6 +6607,7 @@ struct RGB2Luv_f
66076607
for( ; i <= n - 12; i += 12, src += scn * 4 )
66086608
{
66096609
float32x4x3_t v_src = vld3q_f32(src);
6610+
66106611
if( gammaTab )
66116612
{
66126613
v_src.val[0] = vmulq_f32(v_src.val[0], vdupq_n_f32(gscale));
@@ -6627,6 +6628,15 @@ struct RGB2Luv_f
66276628
for( ; i <= n - 12; i += 12, src += scn * 4 )
66286629
{
66296630
float32x4x4_t v_src = vld4q_f32(src);
6631+
6632+
v_src.val[0] = vmaxq_f32(v_src.val[0], vdupq_n_f32(0));
6633+
v_src.val[1] = vmaxq_f32(v_src.val[1], vdupq_n_f32(0));
6634+
v_src.val[2] = vmaxq_f32(v_src.val[2], vdupq_n_f32(0));
6635+
6636+
v_src.val[0] = vminq_f32(v_src.val[0], vdupq_n_f32(1));
6637+
v_src.val[1] = vminq_f32(v_src.val[1], vdupq_n_f32(1));
6638+
v_src.val[2] = vminq_f32(v_src.val[2], vdupq_n_f32(1));
6639+
66306640
if( gammaTab )
66316641
{
66326642
v_src.val[0] = vmulq_f32(v_src.val[0], vdupq_n_f32(gscale));
@@ -6670,6 +6680,20 @@ struct RGB2Luv_f
66706680
_mm_deinterleave_ps(v_r0, v_r1, v_g0, v_g1, v_b0, v_b1, v_a0, v_a1);
66716681
}
66726682

6683+
v_r0 = _mm_max_ps(v_r0, _mm_setzero_ps());
6684+
v_r1 = _mm_max_ps(v_r1, _mm_setzero_ps());
6685+
v_g0 = _mm_max_ps(v_g0, _mm_setzero_ps());
6686+
v_g1 = _mm_max_ps(v_g1, _mm_setzero_ps());
6687+
v_b0 = _mm_max_ps(v_b0, _mm_setzero_ps());
6688+
v_b1 = _mm_max_ps(v_b1, _mm_setzero_ps());
6689+
6690+
v_r0 = _mm_min_ps(v_r0, _mm_set1_ps(1.f));
6691+
v_r1 = _mm_min_ps(v_r1, _mm_set1_ps(1.f));
6692+
v_g0 = _mm_min_ps(v_g0, _mm_set1_ps(1.f));
6693+
v_g1 = _mm_min_ps(v_g1, _mm_set1_ps(1.f));
6694+
v_b0 = _mm_min_ps(v_b0, _mm_set1_ps(1.f));
6695+
v_b1 = _mm_min_ps(v_b1, _mm_set1_ps(1.f));
6696+
66736697
if ( gammaTab )
66746698
{
66756699
__m128 v_gscale = _mm_set1_ps(gscale);
@@ -6704,6 +6728,9 @@ struct RGB2Luv_f
67046728
for( ; i < n; i += 3, src += scn )
67056729
{
67066730
float R = src[0], G = src[1], B = src[2];
6731+
R = std::min(std::max(R, 0.f), 1.f);
6732+
G = std::min(std::max(G, 0.f), 1.f);
6733+
B = std::min(std::max(B, 0.f), 1.f);
67076734
if( gammaTab )
67086735
{
67096736
R = splineInterpolate(R*gscale, gammaTab, GAMMA_TAB_SIZE);

0 commit comments

Comments
 (0)