0

我不太确定如何标记这个问题,所以如果您认为它们适用,我想添加标签。

我有一个相当大的矩阵,我被要求绘制并打印出来作为海报。它的尺寸是70K。即,我有一个 70,000 平方的数组,我必须绘制它,将每个元素的值映射到某种颜色。这不是困难的部分,我可以做到。

问题是,如何以合理的方式保存这样的图像?

我意识到这在很大程度上取决于图像的特定属性。我认为这张图片在这方面可能存在问题。它之所以看起来很有趣,是因为它本质上是分形的。很多图像只是白色的,如果这会有所帮助......

然后,如果我确实打印出来,那么即使是 2400dpi,它也会是一平方米,每个矩阵元素只有 1 个像素。它看起来有什么好处吗?还是会看起来像一团可怕的烂摊子?(询问的一个原因是我不能直接去打印看看,因为这可能会浪费 50 英镑!)

4

2 回答 2

1

我不知道您的数据看起来如何,但我可以想到一些好的方法来做到这一点:

  1. 运行长度编码 - 逐行列出交替模式中有多少黑色,多少白色,黑色,白色。
  2. 坐标列表 - 如果您的人口非常稀少,您可以简单地列出填写的坐标。
  3. 白盒 - 这就像一次列出一个位(在您的 70k x 70k 中大约是 4.9b 位),除了它首先列出只有白色的大矩形区域。当这些位被列出时,它会跳过初始框列表中的任何内容。当它们被读入时,它也知道跳过框中的内容。这里有 12 个字节(每个坐标 3 个),可能会表示 20 x 20 的框(400 位)或更大。那将是大约 10% 的压缩。如果你能得到一个 200x200 的盒子,你就会看到 1% 的压缩率。

对于 RLE,假设您使用 16 位作为样本大小。因此,如果您的某一行开始是这样的:1245 white, 2 black, 100 white, 1 black, 834 white您可以对其进行编码(以十六进制表示)04dd0002006400010342(请注意,004d 是十六进制的 1245,等等...)。现在使用 80 位并表示 2182 位,或大约 3.6% 的压缩率。

但不要自己动手......我建议,如果可以的话,只使用...... PNG!

我制作了一个 7k x 7k 的随机文件(或总面积的 1/100)。每 100 个白色随机分布 1 个黑色。结果为 677k,或大约 11.3% 的压缩率。

我将它提高到 20k x 20k(大约是你总面积的 1/12)并且它再次具有 100:1 的随机分布。它的大小为 5.4Mb,或大约 11.1% 的压缩率。

因此,如果您的黑白比例为 1:100,我敢打赌您将能够以大约 11% 的所需位或 600Mb 以下来表示您的文件。

于 2012-10-29T20:57:48.680 回答
0

人眼开始失去看到大约 300 DPI 的单个像素的能力,因此拥有比这更高的分辨率的图像是没有意义的。因此,这成为如何降低图像分辨率的练习。在每个像素 3 个字节的情况下,您的原始文件将占用 14.7GB,因此大多数现成的解决方案不太可能实用。

我假设您可以按顺序读取数据,这样就无需同时将所有数据都保存在内存中。

一种简单的缩减方法是一次读取 8 行,然后平均每个 8x8 区域以产生一个输出像素。这会产生一个 8750 x 8750 的图像,它仍然很大,但在合理的范围内。

有一些调整大小的方法产生的结果比您可以针对原始滑动窗口运行的平均结果稍好。重叠窗口最好能产生无缝的结果。

于 2012-10-29T21:50:21.797 回答