【问题标题】:Encode complex number as RGB pixel and back将复数编码为 RGB 像素并返回
【发布时间】:2023-03-05 09:51:02
【问题描述】:

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

可能(对数)一个绝对值用于亮度,一个参数用于色调。

去饱和像素应该在反向转换中接收随机参数。

就像是: 0 -> (0,0,0) 1 -> (255,0,0) -1 -> (0,255,255) 0.5 -> (128,0,0) 我 -> (255,255,0) -i -> (255,0,255) (0,0,0) -> 0 (255,255,255) -> e^(i * 随机) (128,128,128) -> 0.5 * e^(i *随机) (0,128,128) -> -0.5

有现成的公式吗?

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

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

如果(hsv.sat == 0){ hsv.hue = 0; // ! 返回hsv; }

我不想要 0。我想要随机。不仅是hsv.sat==0,而是它应该低于它(“应该”是指最大饱和度,即从复数转换后的饱和度)。

【问题讨论】:

  • 本周早些时候我正在读一些关于这个主题的东西,但我现在找不到它 - 虽然你在正确的轨道上 - 幅度 -> 亮度,相位 -> 色调。使用 HSV 模型,然后转换为 RGB。

标签: language-agnostic math graphics complex-numbers


【解决方案1】:

你会遇到很多问题:

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

假设您的复数集是有限且离散的,我认为 RGB 系统的最佳方法是这样的:
笛卡尔轴:

极轴:

我认为它会是独一无二的并且有点语义化:比如计数器网格和地理地图的着色以及医学图像分析。

您可以改用 HSL 系统和极轴:

你想用这个编码做什么?

【讨论】:

  • 我正在将声音转换为图片并返回。声音被分成相交的片段,每个片段都经过 FFT,结果数字是对数的。灰度变体已经起作用并且听起来(参数只是在转换为图片时被丢弃,并在从图片转换时随机化)。它有效,但听起来很模糊。我想以像素颜色保存参数信息,因为两者都是圆形的。
  • @Vi:你是不是想实现一个声音图?我很确定,但这可能会有所帮助:faculty.washington.edu/dillon/PhonResources/javoice/… 阅读它的算法。
  • @vi:你将哪种编码结构转换为图像?
  • 什么是“编码结构”?当前链是声音 -> 块 -(FFT)-> 复数数组 -> 图像行 -> 图像。我只想为图像添加颜色(以及复数数组的参数)。
【解决方案2】:

首先就您的问题提出几个问题:

  • 1+i -> (510,255,0) ?
  • 'brightness' 和 'hue' 通常是 HSV 颜色模型的组成部分 而不是 RGB

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

但是,为了回答您的问题,我从未遇到过任何现成的解决方案来解决您的问题。

我们等待向 SO 学习。

【讨论】:

  • 幅度是有限的(如果超过,对数将被裁剪为上限或下限)。是的,我使用极坐标形式。我正在寻找 RGB-HSV-RGB 转换器(可能已经找到它)。我只需要知道我应该在反向转换中添加多少随机部分。
  • 好吧,如果你问你想要什么,你会得到更多有用的答案。
【解决方案3】:

似乎 OP 有一个不同的问题......但无论如何,这是一个合并的地方。它是 GPL 代码,因此您可以根据需要使用它。

Sage 的 complex_to_rgb 函数使用 Numpy 和 Python 来完成此操作。 Mathematica 有如此复杂的情节(事实上,Sage 的灵感来自于它们),所以大概它内部也有类似的东西,尽管可能不是代码。

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2011-02-24
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多