2016-04-14 51 views
-1

我想根據DE2000 Formula計算CIE色差DeltaE 2000。我已經按照網站提供的公式完成了,但是我得到了奇怪的delta E值。我很困惑我哪裏出了問題。我檢查了很多次,但我無法找到這個錯誤。有人告訴我,我的代碼的哪個部分有問題。色差DeltaE 2000

function DE_2K = CIEDE2000(Lab1,Lab2) 
labuno=Lab1 
labdos=Lab2 
L1=labuno(1) 
a1=labuno(2) 
b1=labuno(3) 
L2=labdos(1) 
a2=labdos(2) 
b2=labdos(3) 

%******************************************************************* 
%     Definition for CIE DE2000 
%******************************************************************* 
L_bar_dash=(L1+L2)/2; 
C1 = sqrt((a1)^2+(b1)^2) 
C2 = sqrt((a2)^2+(b2)^2) 
C_bar = (C1+C2)/2 
G = (1 -sqrt(((C_bar)^7)/((C_bar)^7+(25)^7))/2) 
a1_dash = a1*(1+G) 
a2_dash = a2*(1+G) 
C1_dash = sqrt((a1_dash)^2+(b1)^2) 
C2_dash = sqrt((a2_dash)^2+(b2)^2) 
C_bar_dash = (C1_dash + C2_dash)/2 

if (radtodeg(atan(b1/a1_dash)) >= 0) h1_dash = radtodeg(atan(b1/a1_dash)) 
else       h1_dash = radtodeg(atan(b1/a1_dash)) + radtodeg(2*pi) 
end 

if (radtodeg(atan(b2/a2_dash)) >= 0) h2_dash = radtodeg(atan(b2/a2_dash)) 
else       h2_dash = radtodeg(atan(b2/a2_dash)) + radtodeg(2*pi) 
end 

if ((h1_dash - h2_dash) > radtodeg(pi)) H_bar_dash = (h1_dash + h2_dash + radtodeg(2*pi))/2 
else       H_bar_dash = (h1_dash + h2_dash)/2 
end 

    T = 1 - 0.17*radtodeg(cos(H_bar_dash-radtodeg(pi/6)))+0.24*radtodeg(cos(2*H_bar_dash))+0.32*radtodeg(cos(3*H_bar_dash + radtodeg(pi/30)))- 0.20*radtodeg(cos(4*H_bar_dash + 63)) 

if ((abs(h2_dash - h1_dash)) <= radtodeg(pi))      DE_h_dash = h2_dash - h1_dash 
elseif(abs(h2_dash - h1_dash) > radtodeg(pi) && h2_dash <= h1_dash) DE_h_dash = h2_dash - h1_dash + radtodeg(2*pi) 
    else                DE_h_dash = h2_dash - h1_dash - radtodeg(2*pi)  
    end 

    DE_L_dash = L2 - L1 
    DE_C_dash = C2_dash - C1_dash 
    DE_H_dash = 2 * sqrt(C1_dash * C2_dash) * radtodeg(sin(DE_h_dash/2)) 

    S_L = 1 + ((0.015 * (L_bar_dash - 50)^2)/sqrt(20 + (L_bar_dash - 50)^2)) 
    S_C = 1 + (0.045 * C_bar_dash) 
    S_H = 1 + (0.015 * C_bar_dash * T) 

    DE_angle = 30 * exp(- ((H_bar_dash - 275)/25)^2) 

    R_C = 2 * sqrt((C_bar_dash)^7/((C_bar_dash)^7 + (25)^7)) 

    R_T = - R_C * radtodeg(sin(2 * DE_angle)) 

    K_L = 1 
    K_C = 1 
    K_H = 1 

    DE_2K = sqrt((DE_L_dash/(K_L * S_L))^2 + (DE_C_dash/(K_C * S_C))^2 + (DE_H_dash/(K_H * S_H))^2 + (R_T * (DE_C_dash/(K_C * S_C)) * (DE_H_dash/(K_H * S_H)))) 

    end 
+0

我們有一個可用於數字檢查的參考Python實現:https://github.com/colour-science/colour/blob/develop/colour/difference/delta_e.py#L162,還有一個Matlab這裏實施:http://www.ece.rochester.edu/~gsharma/ciede2000/dataNprograms/deltaE2000.m –

回答

0

有在計算中的一些問題:

a)如果((h1_dash - h2_dash)> radtodeg(PI)):不,你需要採取的這種腹肌?

B)20 * radtodeg(COS(4 * H_bar_dash + 63):你需要在這裏-63

三)我假設你的if-else結構,正確處理三種情況;您可能需要檢查:

....否則DE_h_dash = h2_dash - h1_dash - radtodeg(2 * PI)

d)罪不在度數,而不是弧度所以無需轉換這裏:

radtodeg(sin(DE_h_dash/2)) 

E)相同的位置:radtodeg(SIN(2 * DE_angle))

F)我假定COS/SIN採取度;你需要仔細檢查什麼是度數什麼是弧度無處不在。