gpt4 book ai didi

c - 为什么我的 HSI 色轮看起来很奇怪?

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:37 26 4
gpt4 key购买 nike

我正在尝试在 HSI 色彩空间中绘制色轮。我得到的色轮有很宽的青色、黄色和品红色,看起来不对。我见过的所有其他色轮都具有最宽的波段红色、绿色和蓝色。

HSIColorWheel

这就是 HSI 色轮的样子吗?还是我的数学错了?我已经尝试了我能找到的 HSI 到 RGB 的每个片段,并在书中查找了方程式。该方程式有很多变化,但当我画圆时,它们都会导致相同的结果。我唯一不同的是在最后夹紧 channel 。我的 Intensity 到处都是 1.0,Hue 是像素的角度(额外旋转了一点),Saturation 是到中心的距离的大小。

这是我将 HSI 转换为 RGB (Objective-C) 的困惑代码:

float r;
float g;
float b;

S = S > 1.0f ? 1.0f : S;
I = I > 1.0f ? 1.0f : I;
H = H > 1.0f ? H - 1.0 : H;
H = H * M_PI * 2.0;
H = fmod(H, M_PI * 2.0);

if(S==0.0f){
r = I;
g = I;
b = I;
} else{
if((H>=0.0) && (H<2.0*M_PI/3.0)){

b = (1.0f-S)/3.0f;
r = (1.0f + S*cosf(H) / cosf(M_PI/3.0-H))/3.0f;
g = 1.0f-r-b;

} else if((H>=2.0*M_PI/3.0) && (H<4.0*M_PI/3.0)){
H = H - 2.0f*M_PI/3.0f;
r = (1.0f-S)/3.0f;
g = (1.0f+S*cosf(H)/cosf(M_PI/3.0 - H))/3.0f;

b = 1.0f-r-g;
} else if ((H>=4.0*M_PI/3.0) && (H<2.0*M_PI)){
H= H-4.0f*M_PI/3.0f;
g = (1.0f-S)/3.0f;
b = (1.0f+S*cosf(H)/cosf(M_PI/3.0-H))/3.0f;

r = 1.0f-b-g;
}
}
if(r<0.0f)
r=0.0f;
if(g<0.0f)
g=0.0f;
if(b<0.0f)
b=0.0f;
float R = 3.0f*I*r;
float G = 3.0f*I*g;
float B = 3.0f*I*b;

if(R>1.0f)
R=1.0f;
if(G>1.0f)
G=1.0f;
if(B>1.0f)
B=1.0f;

最佳答案

阅读评论后,很明显限制 RGB 值会导致 CMY 偏差。降低强度消除了偏差,但仍然存在奇怪的 strip 问题,并且色轮看起来仍然不像其他人的色轮。这个结果在数学上是有道理的,但出于某种原因,没有人在任何有关 HSI 的书籍或在线信息中提及这些问题。人们展示的 HSI 色轮看起来像 HSV/B 色轮,但我仍然不知道他们在转换为 RGB 时如何得到那个结果。

解决方案:我切换到 HSV 颜色空间,事实证明它比 HSI 更符合我的要求。

关于c - 为什么我的 HSI 色轮看起来很奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com