首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >星B-V颜色索引到表观RGB颜色

星B-V颜色索引到表观RGB颜色
EN

Stack Overflow用户
提问于 2014-02-24 10:18:46
回答 8查看 11.2K关注 0票数 24

我正在尝试将明星的B-V color index转换为明显的RGB颜色。除了查找表格和色带之外,似乎还没有众所周知的算法来做到这一点。

什么是B-V颜色索引?

这是天文学家分配给一颗恒星的一个数字,用来表示它的表观颜色。热星(低B-V)是蓝色/紫色,冷星(高B-V)是红色,中间是白色/橙色。

初始算法

B-V到开尔文

代码语言:javascript
复制
var t = 4600 * ((1 / ((0.92 * bv) + 1.7)) +(1 / ((0.92 * bv) + 0.62)) );

开尔文到xyY

如果将一颗恒星建模为黑体,则可以使用Planckian locus的数值近似值来计算xy坐标(CIE色度)

代码语言:javascript
复制
// t to xyY
var x, y = 0;

if (t>=1667 && t<=4000) {
  x = ((-0.2661239 * Math.pow(10,9)) / Math.pow(t,3)) + ((-0.2343580 * Math.pow(10,6)) / Math.pow(t,2)) + ((0.8776956 * Math.pow(10,3)) / t) + 0.179910;
} else if (t > 4000 && t <= 25000) {
  x = ((-3.0258469 * Math.pow(10,9)) / Math.pow(t,3)) + ((2.1070379 * Math.pow(10,6)) / Math.pow(t,2)) + ((0.2226347 * Math.pow(10,3)) / t) + 0.240390;
}

if (t >= 1667 && t <= 2222) {
  y = -1.1063814 * Math.pow(x,3) - 1.34811020 * Math.pow(x,2) + 2.18555832 * x - 0.20219683;
} else if (t > 2222 && t <= 4000) {
  y = -0.9549476 * Math.pow(x,3) - 1.37418593 * Math.pow(x,2) + 2.09137015 * x - 0.16748867;
} else if (t > 4000 && t <= 25000) {
  y = 3.0817580 * Math.pow(x,3) - 5.87338670 * Math.pow(x,2) + 3.75112997 * x - 0.37001483;
}

xyY to XYZ (Y = 1)

代码语言:javascript
复制
// xyY to XYZ, Y = 1
var Y = (y == 0)? 0 : 1;
var X = (y == 0)? 0 : (x * Y) / y;
var Z = (y == 0)? 0 : ((1 - x - y) * Y) / y;

XYZ to RGB

代码语言:javascript
复制
var r = 0.41847 * X - 0.15866 * Y - 0.082835 * Z;
var g = -0.091169 * X + 0.25243 * Y + 0.015708 * Z;
var b = 0.00092090 * X - 0.0025498 * Y + 0.17860 * Z;

问题

我用B-V颜色指数运行这个算法: 1.2,1.0,0.59,0.0,-0.29。这是我得到的输出。

为什么我会得到这种奇怪的输出?的热星是蓝色的,而冷星是棕色的,而且似乎没有白色/橙色的中间恒星。

更新

Ozan的评论之后,我似乎使用了一个错误的矩阵来将XYZ转换为RGB。由于sRGB是web上的默认颜色空间(或者是吗?),我现在使用正确的矩阵,后跟一个伽马校正函数(a = 0.055)。

我现在得到了这个漂亮的色带,

但末端还是没有红色/紫色。

演示

现在还有一个fiddle可以让你玩了。

更新2

如果使用0.5的gamma,并将B-V颜色指数的范围从4.7扩展到-0.5,我会在一个极端得到红色,但仍然没有紫色。这是更新后的fiddle

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21977786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档