为什么在进行RGB到HSI转换时,有一些点的H的值很大?(50分)

  • 主题发起人 主题发起人 kjzx
  • 开始时间 开始时间
K

kjzx

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么在进行RGB到HSI转换时,有一些点的H的值很大?如何避免?
例如:在H的计算公式里,当分子为-183.5,分母为188.34时
I:=(R+G+B)/3;
S:=1-3*min(R,G,B)/(R+G+B);
H:=arccos((((R-G)+(R-B))/2)/sqrt((R-G)*(R-G)+(R-B)*(G-B)));
 
你没说明当时的RGB分别为多少。
在计算HSI中的H时,得根据当时的色相,采用不同的算法。
 
我这里有一篇资料,附带另一种有效算法,需要的话请与我联系,这里不可以粘贴附件吧
zzhe79@tom.com
 
H在0~360之间阿
 
你原来的公式有问题
procedure RGBToHSI(R,G,B:byte;var H,S,I:single);
var R_,G_,B_,MinValue:Single;
begin
R_:=R/MaxR;//MaxR是单色分量的最大值,在当前24位图下其值为255
G_:=G/MaxG;
B_:=B/MaxB;
MinValue:=Min(R_,G_,B_);
I:=1/3*(R_+G_+B_);
S:=1-(3/(R_+G_+B_))*MinValue;
If S=0 then
H:=-1 //表示H无意义
else
H:=arccos(((0.5*((R_-G_)+(R_-B_)))/sqrt(sqr(R_-G_)+(R_-B_)*(G_-B_))));
If (B_/I)>(G_/I) then
H:=2*pi-H;
end;
 
to zzhe79
请给我一份资料,谢谢
lunart@sina.com
 
注意,这里的RGB都已转换为0至1之间的实数
 
后退
顶部