对不起。我是stackoverflow的新人。我正在使用自组织映射(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)))
并且此算法生成上图。
格子中的每个方框都有自己的权重,就像我上面发布的那样。 现在考虑上面给出的向量。这是晶格中第一个BOX第0行,第0列的值。
也许你想知道为什么它有蓝色。 原因是当你在RGB上插入向量的大约(0,0,1)的3个第一个值时,它会产生蓝色,为0.999923 x 255 = 254,所以它看起来像是(0,0,254)。
现在我想利用节点的所有权重为BOX生成一种颜色,以便它产生如下颜色的变化。
我也知道,我认为,这些值太小了,我需要一些正常化。
我想问一下如何做 - NORMALIZE值 - 使用所有权重来绘制颜色来绘制NODE。 (更重要的)
谢谢。请随时要求进一步澄清。
答案 0 :(得分:0)
要标准化值,您可以缩放到大于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倍。明亮的组件会饱和,但无论如何它们都接近于这样做。饱和分量将被三元运算符?:
限制。