2010-04-02 50 views
1

如何将复数编码为RGB像素,反之亦然?将复数编码为RGB像素并返回

大概(绝对值的对数)变为亮度,参数变为色相。

去饱和像素在逆向变换时应该接受随机参数。

 
Something like: 
0 -> (0,0,0) 
1 -> (255,0,0) 
-1 -> (0,255,255) 
0.5 -> (128,0,0) 
i -> (255,255,0) 
-i -> (255,0,255) 

(0,0,0) -> 0 
(255,255,255) -> e^(i * random) 
(128,128,128) -> 0.5 * e^(i *random) 
(0,128,128) -> -0.5 

有没有现成的公式呢?

编辑:看起来我只需要将RGB转换为HSB并返回。

编辑2:现有的RGB - > HSV转换片段:

 
if (hsv.sat == 0) { 
    hsv.hue = 0; // ! 
    return hsv; 
} 

我不想0.我想随机的。而不仅仅是如果hsv.sat==0,但如果它应该是较低(“应该”意味着最大饱和度,从复数转换后的饱和度)。

+1

本周早些时候,我正在阅读关于这个话题的内容,但现在我找不到它 - 尽管你处于正确的轨道 - 幅度 - >亮度,相位 - >色调。使用HSV模型,然后转换为RGB。 – 2010-04-02 15:13:19

+0

是的,我会用HSV。 – 2010-04-02 15:19:26

回答

4

你将有很多问题:

| RGB | = 2^24| C | =?

假设您的复数集是有限的,离散的,我觉得对于RGB系统最好的方法是这样的:
笛卡尔坐标轴:

alt text

极轴:

alt text

我认为这将是独特的和有点语义:像反格和地理着色al地图和医学图像分析。

可以使用HSL系统和极轴代替:

alt text

你想用这个编码做什么?

+0

我将声音转换为图片并返回。声音被分成相交的片段,每个片段都进行FFT处理,结果数字为对数。灰度变体已经可以工作并发出声音(参数只是在转换为图片时丢弃,随机从图片转换而来)。它可以工作,但听起来很模糊。我想将参数信息保存为像素的颜色,因为两者都是圆形的。 – 2010-04-02 15:34:41

+0

@ Vi:你想要实现一个声音图吗?我很确定,但这可以帮助:http://faculty.washington.edu/dillon/PhonResources/javoice/vowjavoice2.html阅读它的算法。 – 2010-04-02 16:33:10

+0

@ Vi:你正在转换为图像的编码结构? – 2010-04-02 16:37:35

0

首先一对夫妇对你的问题的意见:

  • 1 + I - >(510,255,0)?
  • “亮度”和“色调”通常是HSV色彩模型 而非RGB的 组件

也许你可以使用复数的极坐标的形式,并将它们映射到一个色轮,如HSV采用V固定?由于复数的大小可以是无限的,因此您可能无法将它们映射到任何颜色模型,所有这些(我知道的所有那些)都是有界的。也许你可以使用非欧几里德几何来将复数映射到单位圆。

但是,要回答你的问题,我从来没有遇到任何现成的解决方案,以解决您的问题。

我们等着向SO学习。

+0

幅度有限(如果超过,对数将被裁剪为上限或下限)。是的,我使用极地形式。我正在寻找RGB-HSV-RGB转换器(可能已经找到它)。我只需要知道在逆向变换中应该添加多少随机部分。 – 2010-04-02 15:08:04

+0

好吧,如果你问你想要什么,你会得到更多有用的答案。 – 2010-04-02 15:36:16

0

看来OP似乎有一个不同的问题......但无论如何,这里是一个地方这是合并。这是GPL代码,所以你可以使用它,如果你想。

Sage的complex_to_rgb函数使用Numpy和Python来做到这一点。 Mathematica有这样复杂的情节(事实上,Sage的灵感来自他们),所以大概它内部也有类似的东西,尽管也许不是代码。