【问题标题】:Image Compression Algorithm - Breaking an Image Into Squares By Color图像压缩算法 - 按颜色将图像分成正方形
【发布时间】:2011-09-29 08:07:23
【问题描述】:

我正在尝试开发一个移动应用程序,我想知道将图像转换为文本文件的最简单方法,然后能够稍后在内存中重新创建它说文本。有问题的图像将包含不超过 16 种颜色,因此可以正常工作。

基本上,暴力破解此解决方案需要我将每个人的像素颜色数据保存到文件中。但是,这将导致一个巨大的文件。 我知道有更好的方法 - 例如,如果图像的很大一部分由相同的颜色组成,则将该区域分成更小的正方形和矩形,并将它们的坐标和大小保存到文件中。

这是一个例子。图像应该只是黑/白。大颜色框代表输出文本文件中的理论“数据点”。这些盒子会真正说明它们的来源、大小以及它们应该是什么颜色。

例如,顶盒的原点为 0,0,大小为 359,48,它代表黑色。 保存在文本文件中,数据为 0,0,359,48,0。

这是一种什么样的算法?

注意:我使用的 SDK 无法从 X、Y 坐标返回像素的颜色。但是,我可以将外部信息从文本文件加载到程序中并以这种方式进行操作。我需要导出到文本文件的这些数据将来自不同的实用程序,该实用程序能够从 X、Y 坐标获取像素的颜色。

编辑:添加图片 EDIT2:添加了约束

【问题讨论】:

  • PNG 还是 GIF?您不需要重新发明图像压缩:)
  • 您能否详细说明为什么要将图像(或其部分)保存为纯文本?你不能使用二进制表示吗?此外,如果图像通常具有大量相同颜色的像素的连续运行,您可能需要使用所谓的运行长度编码 (RLE)。或者,可以使用 Lempel-Ziv 压缩算法之一(LZ77、LZ78、LZW)。
  • 问题不在于图像本身,而是我使用的 SDK。我无法从 SDK 中的图像本身获得某个像素的颜色。因此,我需要想出一个解决方案,将所述数据转换为我可以加载到应用程序中并进行操作的文本文件。
  • 这些是您必须在问题中解释的限制。由于图像是用来显示它们的,因此获取某个像素的颜色是一个非常基本的操作,每个人都会认为你可以做到。此外,“将所述数据转换为文本文件”是相同的,但同时适用于所有像素。看起来您正在尝试解决一个您不应该遇到的问题。
  • @Alex,您应该发布您的评论作为答案,因为我为我的问题开发了一个简单的 RLE - 它运行良好并且完美地解决了它!谢谢。

标签: algorithm image colors compression theory


【解决方案1】:

您能否详细说明为什么要将图像(或其部分)保存为纯文本?你不能使用二进制表示吗?此外,如果图像通常具有大量相同颜色的像素的连续运行,您可能需要使用所谓的运行长度编码 (RLE)。或者,可以使用 Lempel-Ziv 压缩算法之一(LZ77、LZ78、LZW)。

【讨论】:

    【解决方案2】:

    将图像压缩成压缩格式(例如 JPEG、PNG、GIF 等),然后将其保存为 .txt 文件或其他格式。要重新创建图像,只需使用适合您特定需求的任何库函数将文件读入您​​的程序即可。

    如果 .txt 文件必须具有某些文本含义,那么您可能会遇到一些麻烦。

    【讨论】:

      【解决方案3】:

      在 cs 中有一种类似空间索引的算法可以递归地将平面细分为 4 个图块。如果单元格具有相同的大小,则它看起来像一个四叉树。如果希望您将平面细分为(颜色)图案,您可以使用这种平铺理念来动态更改单元格的大小。一个好的开始是 z 曲线或希尔伯特曲线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 2015-01-05
        • 2011-07-07
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 2015-02-03
        相关资源
        最近更新 更多