从4096个元素的int数组到0到1之间的浮点数

时间:2016-06-30 12:14:34

标签: arrays algorithm

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

我想将此数组转换为0到1之间的浮点数(当然我需要从浮点数构建图像的函数)。

您对如何操作有任何想法或建议吗? 因为我需要制作一个算法,但我真的不知道如何继续。

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

1 个答案:

答案 0 :(得分:1)

  1. 唯一可以理解的方法是图像是二进制(每像素1位)

    但即便如此,无损的幼稚转换也需要64x64位,这与单32bit float所能做的相差甚远。所以缺少一些信息。为了实现这一点,您需要引入某种压缩,但即使这样也可能是不够的,除非使用有损压缩。无论如何你应该添加一些样本图像,以便我们看到你在处理什么。

    我担心唯一可用的压缩是在完整图像上使用 DCT (如 JPEG )。因此,对图像执行 DCT 并仅存储前几个系数。例如,如果使用4位系数,那么您可以存储32/4=8系数,这些系数可能已足够但很难说4位是否足以重新构建图像。

    < / LI>
  2. 在类似情况下使用视觉哈希

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

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

    由于精度/舍入问题。如果只使用整数类型,那么你会丢失更多的位。是的,您可以使用整数格式存储为integer的{​​{1}}类型,但生成的float值可能是乱码,如果用作常规float则可能会抛出异常。

    如果目标float应在float范围内,则不会发生异常,但您不能使用指数或签名存储,将可用位限制为原始{<0.0,1.0> 23 1}}。

  4. 如果将所有内容放在一起而没有其他信息,我会:

    1. 32图片矩阵上执行DCT
    2. 仅使用64x64左上角矩阵单元格
    3. 通过连接

      编码成mantisa位
      1x4bit + 6*3bit
    4. 设置符号和指数以将范围设置为mantissa = coeff0+coeff1<<4+coef2<<7+coef3<<10+...

      如果我没有误认为<0.0,1.0>sign=0

    5. exponent=-1 + 32bit_float_bias的整数部分设为浮动值

      float
    6. 要获取图像(至少接近它的图像),请反转步骤。通过引入一些过滤器来接近原始图像,Yo可以提高质量。但实际上没有看到它们中的任何一个很难分辨哪个使用或者甚至可能......