<s> """<STR_LIT>""" <EOL> from __future__ import division <EOL> import numpy as np <EOL> from . . color . colorconv import lab2lch , _cart2polar_2pi <EOL> def deltaE_cie76 ( lab1 , lab2 ) : <EOL> """<STR_LIT>""" <EOL> lab1 = np . asarray ( lab1 ) <EOL> lab2 = np . asarray ( lab2 ) <EOL> L1 , a1 , b1 = np . rollaxis ( lab1 , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> L2 , a2 , b2 = np . rollaxis ( lab2 , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> return np . sqrt ( ( L2 - L1 ) ** <NUM_LIT:2> + ( a2 - a1 ) ** <NUM_LIT:2> + ( b2 - b1 ) ** <NUM_LIT:2> ) <EOL> def deltaE_ciede94 ( lab1 , lab2 , kH = <NUM_LIT:1> , kC = <NUM_LIT:1> , kL = <NUM_LIT:1> , k1 = <NUM_LIT> , k2 = <NUM_LIT> ) : <EOL> """<STR_LIT>""" <EOL> L1 , C1 = np . rollaxis ( lab2lch ( lab1 ) , - <NUM_LIT:1> ) [ : <NUM_LIT:2> ] <EOL> L2 , C2 = np . rollaxis ( lab2lch ( lab2 ) , - <NUM_LIT:1> ) [ : <NUM_LIT:2> ] <EOL> dL = L1 - L2 <EOL> dC = C1 - C2 <EOL> dH2 = get_dH2 ( lab1 , lab2 ) <EOL> SL = <NUM_LIT:1> <EOL> SC = <NUM_LIT:1> + k1 * C1 <EOL> SH = <NUM_LIT:1> + k2 * C1 <EOL> dE2 = ( dL / ( kL * SL ) ) ** <NUM_LIT:2> <EOL> dE2 += ( dC / ( kC * SC ) ) ** <NUM_LIT:2> <EOL> dE2 += dH2 / ( kH * SH ) ** <NUM_LIT:2> <EOL> return np . sqrt ( dE2 ) <EOL> def deltaE_ciede2000 ( lab1 , lab2 , kL = <NUM_LIT:1> , kC = <NUM_LIT:1> , kH = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> lab1 = np . asarray ( lab1 ) <EOL> lab2 = np . asarray ( lab2 ) <EOL> unroll = False <EOL> if lab1 . ndim == <NUM_LIT:1> and lab2 . ndim == <NUM_LIT:1> : <EOL> unroll = True <EOL> if lab1 . ndim == <NUM_LIT:1> : <EOL> lab1 = lab1 [ None , : ] <EOL> if lab2 . ndim == <NUM_LIT:1> : <EOL> lab2 = lab2 [ None , : ] <EOL> L1 , a1 , b1 = np . rollaxis ( lab1 , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> L2 , a2 , b2 = np . rollaxis ( lab2 , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> Cbar = <NUM_LIT:0.5> * ( np . hypot ( a1 , b1 ) + np . hypot ( a2 , b2 ) ) <EOL> c7 = Cbar ** <NUM_LIT:7> <EOL> G = <NUM_LIT:0.5> * ( <NUM_LIT:1> - np . sqrt ( c7 / ( c7 + <NUM_LIT> ** <NUM_LIT:7> ) ) ) <EOL> scale = <NUM_LIT:1> + G <EOL> C1 , h1 = _cart2polar_2pi ( a1 * scale , b1 ) <EOL> C2 , h2 = _cart2polar_2pi ( a2 * scale , b2 ) <EOL> Lbar = <NUM_LIT:0.5> * ( L1 + L2 ) <EOL> tmp = ( Lbar - <NUM_LIT:50> ) ** <NUM_LIT:2> <EOL> SL = <NUM_LIT:1> + <NUM_LIT> * tmp / np . sqrt ( <NUM_LIT:20> + tmp ) <EOL> L_term = ( L2 - L1 ) / ( kL * SL ) <EOL> Cbar = <NUM_LIT:0.5> * ( C1 + C2 ) <EOL> SC = <NUM_LIT:1> + <NUM_LIT> * Cbar <EOL> C_term = ( C2 - C1 ) / ( kC * SC ) <EOL> h_diff = h2 - h1 <EOL> h_sum = h1 + h2 <EOL> CC = C1 * C2 <EOL> dH = h_diff . copy ( ) <EOL> dH [ h_diff > np . pi ] -= <NUM_LIT:2> * np . pi <EOL> dH [ h_diff < - np . pi ] += <NUM_LIT:2> * np . pi <EOL> dH [ CC == <NUM_LIT:0.> ] = <NUM_LIT:0.> <EOL> dH_term = <NUM_LIT:2> * np . sqrt ( CC ) * np . sin ( dH / <NUM_LIT:2> ) <EOL> Hbar = h_sum . copy ( ) <EOL> mask = np . logical_and ( CC != <NUM_LIT:0.> , np . abs ( h_diff ) > np . pi ) <EOL> Hbar [ mask * ( h_sum < <NUM_LIT:2> * np . pi ) ] += <NUM_LIT:2> * np . pi <EOL> Hbar [ mask * ( h_sum >= <NUM_LIT:2> * np . pi ) ] -= <NUM_LIT:2> * np . pi <EOL> Hbar [ CC == <NUM_LIT:0.> ] *= <NUM_LIT:2> <EOL> Hbar *= <NUM_LIT:0.5> <EOL> T = ( <NUM_LIT:1> - <EOL> <NUM_LIT> * np . cos ( Hbar - np . deg2rad ( <NUM_LIT:30> ) ) + <EOL> <NUM_LIT> * np . cos ( <NUM_LIT:2> * Hbar ) + <EOL> <NUM_LIT> * np . cos ( <NUM_LIT:3> * Hbar + np . deg2rad ( <NUM_LIT:6> ) ) - <EOL> <NUM_LIT> * np . cos ( <NUM_LIT:4> * Hbar - np . deg2rad ( <NUM_LIT> ) ) <EOL> ) <EOL> SH = <NUM_LIT:1> + <NUM_LIT> * Cbar * T <EOL> H_term = dH_term / ( kH * SH ) <EOL> c7 = Cbar ** <NUM_LIT:7> <EOL> Rc = <NUM_LIT:2> * np . sqrt ( c7 / ( c7 + <NUM_LIT> ** <NUM_LIT:7> ) ) <EOL> dtheta = np . deg2rad ( <NUM_LIT:30> ) * np . exp ( - ( ( np . rad2deg ( Hbar ) - <NUM_LIT> ) / <NUM_LIT> ) ** <NUM_LIT:2> ) <EOL> R_term = - np . sin ( <NUM_LIT:2> * dtheta ) * Rc * C_term * H_term <EOL> dE2 = L_term ** <NUM_LIT:2> <EOL> dE2 += C_term ** <NUM_LIT:2> <EOL> dE2 += H_term ** <NUM_LIT:2> <EOL> dE2 += R_term <EOL> ans = np . sqrt ( dE2 ) <EOL> if unroll : <EOL> ans = ans [ <NUM_LIT:0> ] <EOL> return ans <EOL> def deltaE_cmc ( lab1 , lab2 , kL = <NUM_LIT:1> , kC = <NUM_LIT:1> ) : <EOL> """<STR_LIT>""" <EOL> L1 , C1 , h1 = np . rollaxis ( lab2lch ( lab1 ) , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> L2 , C2 , h2 = np . rollaxis ( lab2lch ( lab2 ) , - <NUM_LIT:1> ) [ : <NUM_LIT:3> ] <EOL> dC = C1 - C2 <EOL> dL = L1 - L2 <EOL> dH2 = get_dH2 ( lab1 , lab2 ) <EOL> T = np . where ( np . logical_and ( np . rad2deg ( h1 ) >= <NUM_LIT> , np . rad2deg ( h1 ) <= <NUM_LIT> ) , <EOL> <NUM_LIT> + <NUM_LIT> * np . abs ( np . cos ( h1 + np . deg2rad ( <NUM_LIT> ) ) ) , <EOL> <NUM_LIT> + <NUM_LIT> * np . abs ( np . cos ( h1 + np . deg2rad ( <NUM_LIT> ) ) ) <EOL> ) <EOL> c1_4 = C1 ** <NUM_LIT:4> <EOL> F = np . sqrt ( c1_4 / ( c1_4 + <NUM_LIT> ) ) <EOL> SL = np . where ( L1 < <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT> * L1 / ( <NUM_LIT:1.> + <NUM_LIT> * L1 ) ) <EOL> SC = <NUM_LIT> + <NUM_LIT> * C1 / ( <NUM_LIT:1.> + <NUM_LIT> * C1 ) <EOL> SH = SC * ( F * T + <NUM_LIT:1> - F ) <EOL> dE2 = ( dL / ( kL * SL ) ) ** <NUM_LIT:2> <EOL> dE2 += ( dC / ( kC * SC ) ) ** <NUM_LIT:2> <EOL> dE2 += dH2 / ( SH ** <NUM_LIT:2> ) <EOL> return np . sqrt ( dE2 ) <EOL> def get_dH2 ( lab1 , lab2 ) : <EOL> """<STR_LIT>""" <EOL> lab1 = np . asarray ( lab1 ) <EOL> lab2 = np . asarray ( lab2 ) <EOL> a1 , b1 = np . rollaxis ( lab1 , - <NUM_LIT:1> ) [ <NUM_LIT:1> : <NUM_LIT:3> ] <EOL> a2 , b2 = np . rollaxis ( lab2 , - <NUM_LIT:1> ) [ <NUM_LIT:1> : <NUM_LIT:3> ] <EOL> C1 = np . hypot ( a1 , b1 ) <EOL> C2 = np . hypot ( a2 , b2 ) <EOL> term = ( C1 * C2 ) - ( a1 * a2 + b1 * b2 ) <EOL> return <NUM_LIT:2> * term </s>
