gpt4 book ai didi

arrays - 从 4096 个元素的 int 数组到 0 到 1 之间的 float

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:18:00 25 4
gpt4 key购买 nike

我目前正在做一个项目,我需要处理图像。但是,我的图像是 64*64 大小的,所以当我加载一个图像时,我有一个 4096 int 数组。

我想将此数组转换为介于 0 和 1 之间的 float (当然,我将需要需要从 float 构建图像的函数)。

你有什么想法或建议吗?因为我需要做一个算法,但我真的不知道如何进行。

致以最诚挚的问候,谢谢。

最佳答案

  1. 唯一有意义的方法是图像是否为二进制(每像素 1 位)

    但即便如此,无损天真转换仍需要 64x64 32bit远不是什么位float可以做。所以缺少一些信息。为了使这成为可能,您需要引入某种压缩,但即使这样也不够,除非使用有损压缩。无论如何,您应该添加一些示例图像,以便我们了解您在处理什么。

    恐怕唯一可用的压缩方法是对完整图像使用 DCT(如 JPEG)。因此对图像进行 DCT 并仅存储前几个系数。例如如果 4使用的位系数然后你可以存储32/4=8系数可能足够但很难说如果 4位足以重建图像。

  2. 在类似情况下使用视觉哈希

    但您无法将它们恢复为原始图像。它们与哈希几乎相同,但它们的二进制表示在视觉上与图像相似。

  3. float这真的不是一个好方法

    由于精度/舍入问题。如果仅使用整数类型,那么您将丢失更多位。是的,您可以使用 integer类型存储为 float为整数格式,但结果为 float如果用作常规 float,值可能会乱码并可能抛出异常.

    如果目标float应该在 <0.0,1.0> 范围内那么不会发生异常,但您不能使用指数或符号进行存储,将可用位限制为仅 23来自原始32 .

如果在没有附加信息的情况下将所有内容放在一起,我会:

  1. 64x64 进行 DCT图像矩阵
  2. 仅使用 1x4bit + 6*3bit左上角矩阵单元格
  3. 通过连接编码成尾数位

    mantissa = coeff0+coeff1<<4+coef2<<7+coef3<<10+...
  4. 设置符号和指数以将范围设置为 <0.0,1.0>

    如果我没记错的话 sign=0exponent=-1 + 32bit_float_bias

  5. 输入 float 的整数部分到 float 值

    union x { float f; DWORD dw; }
    DWORD sign=...,mantisa=...,exponent=...;
    x.dw=sign<<31;
    x.dw|=exponent<<23;
    x.dw|=mantisa;
    return x.f;

要取回图像(至少是接近它的图像),请反转这些步骤。你可以通过引入一些过滤器来提高质量,以更接近原始图像。但是,如果没有真正看到它们中的任何一个,就很难说出使用哪一个,或者如果可能的话……

关于arrays - 从 4096 个元素的 int 数组到 0 到 1 之间的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38122799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com