【问题标题】:Colour Difference DeltaE 2000色差 DeltaE 2000
【发布时间】:2016-08-05 21:03:03
【问题描述】:

我正在尝试根据DE2000 Formula 计算 CIE 色差 DeltaE 2000。我已经按照网站上提供的公式完成了,但我得到了奇怪的 delta E 值。我很困惑我哪里出错了。我检查了很多次,但我找不到错误。有人可以告诉我代码的哪一部分有问题。

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

【问题讨论】:

标签: algorithm matlab image-processing colors rgb


【解决方案1】:

你的计算有一些问题:

a) if ((h1_dash - h2_dash) > radtodeg(pi)) : 你不需要这个腹肌吗?

b) 20*radtodeg(cos(4*H_bar_dash + 63) : 你需要 -63

c) 我假设您的 if-else 结构正确处理了这三种情况;您可能需要检查:

....否则 DE_h_dash = h2_dash - h1_dash - radtodeg(2*pi)

d) sin 不是度数,不是弧度,所以这里不需要转换:

radtodeg(sin(DE_h_dash/2))

e) 此处相同:radtodeg(sin(2 * DE_angle))

f) 我假设 cos/sin 取度数;你们很多人需要仔细检查什么是度数,什么是弧度。

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 2010-10-15
    • 2021-05-27
    • 2023-03-18
    • 1970-01-01
    • 2023-03-13
    • 2022-01-15
    • 2015-06-09
    相关资源
    最近更新 更多