Java 如何将多维向量转换为RGB值以进行说明?

Java 如何将多维向量转换为RGB值以进行说明?,java,arrays,rgb,som,Java,Arrays,Rgb,Som,对不起。我是新来的。我正在使用自组织映射(SOM),它处理在2D平面中投影高维数据的问题,该平面中的每个“节点”或框包含的权重值相对较小,范围为0到1 下面是一个我想用RGB值着色的晶格或矩阵的示例 例如,图中的框包含权重,如 [0.000124, 0.000000004, 0.999923, 0.119999220, 0.999311, 0.000552, 0.00000001223, 0.00045, 0.00001132, 0.99999998211, 0.000000000000000

对不起。我是新来的。我正在使用自组织映射(SOM),它处理在2D平面中投影高维数据的问题,该平面中的每个“节点”或框包含的权重值相对较小,范围为0到1

下面是一个我想用RGB值着色的晶格或矩阵的示例

例如,图中的框包含权重,如

[0.000124, 0.000000004, 0.999923, 0.119999220, 0.999311, 0.000552, 0.00000001223, 0.00045, 0.00001132, 0.99999998211, 0.00000000000000008821]

我的算法只尝试考虑前三个值

this.setNodeColor(new Color((int)this.getDoubleElementAt(0) * 255,(int)(this.getDoubleElementAt(1)*255),(int)(this.getDoubleElementAt(2)*255))) 
这个算法产生了上面的例子

晶格中的每个框都有自己的权重,就像我上面发布的一样。 现在考虑上面给出的向量。这是晶格中第一个长方体第0行第0列的值

也许你想知道为什么它是蓝色的。 原因是,当您插入矢量的前三个值(大约为RGB上的(0,0,1))时,它会产生一种蓝色,即0.999923 x 255=254,看起来是(0,0,254)

现在我确实想利用节点的所有权重为长方体生成一种颜色,这样它就可以生成如下所示的颜色变化

我也意识到,我认为,这些值太小了,我需要一些标准化

我想问一下关于如何做的任何想法 -标准化值 -使用所有权重生成用于绘制节点的颜色。(更重要)


多谢各位。请随时要求进一步澄清。

要规范化这些值,您可以缩放到大于255的数字。您可以将提供的示例转换为

int normalization = 10;
int r = (int)this.getDoubleElementAt(0) * 255 * normalization;
int g = (int)this.getDoubleElementAt(1) * 255 * normalization;
int b = (int)this.getDoubleElementAt(2) * 255 * normalization;
this.setNodeColor(new Color((r > 255) ? 255 : r,
                            (g > 255) ? 255 : g,
                            (b > 255) ? 255 : b));

这将使您的淡色组件亮度提高10倍。明亮的成分会饱和,但无论如何,它们已经接近饱和了。饱和分量将被三元运算符
?:

尝试乘以2550而不是255,然后用类似
(x>255)的值剪裁到255?255:x您有11个权重。也许有某种合理的方法可以将前9个矩阵组织成3x3矩阵,然后找到特征向量或特征值。任何一个都可以用于rgb矢量。问题是,权重实际上是变化的。我的意思是,有时候它有11个权重,有时候,20,有时候30,等等。你说(x>255)是什么意思?255:x;?有没有关于如何规范化这些值的想法去掉那个代码,它变成了这样,原来的代码是这样的。@James AndrewSarmiento。您应该根据实际数据处理
标准化的值。我没有访问权限,因此我无法为您执行此操作。看起来10号对你的案子来说不够大。另外,如果每个通道的值范围是一致的,则考虑使用每个通道的单独标准化。例如,看起来您总是希望红色的标准化程度高于绿色和蓝色的标准化程度。