0

この質問にタグを付ける方法がよくわからないので、該当すると思われる場合はタグを追加してください。

私はかなり大きなマトリックスを持っており、それをプロットして、おそらくポスター用に印刷するように依頼されました。寸法は 70K です。つまり、70,000 平方の配列があり、各要素の値を特定の色にマッピングしてプロットする必要があります。それは難しい部分ではありません、私はこれを行うことができます。

問題は、そのような画像を賢明な方法で保存するにはどうすればよいかということです。

これは、画像の特定の特性に大きく依存していることを認識しています。そういう意味では、このイメージには問題があると思います。それが明らかに興味深い理由は、それが本質的に非常にフラクタルだからです。画像の多くはただの白ですが、これが役に立ったら...

また、印刷した場合、2400 dpi であっても、マトリックス要素あたり1ピクセルで 1 メートル四方になります。それはまったく見栄えがするでしょうか?それとも、恐ろしい混乱のように見えますか?(尋ねる理由は、50ポンドの無駄になる可能性があるため、印刷して見ることができないからです!)

4

2 に答える 2

1

あなたのデータがどのように見えるかはわかりませんが、それを行うためのいくつかの良い方法を考えることができます:

  1. Run Length Encoding - 行ごとに、黒、白、黒、白の交互パターンの数をリストします。
  2. 座標リスト - 人口が非常に少ない場合は、入力された座標を単純にリストすることができます。
  3. ホワイトボックス化 - これはビットを一度に 1 つずつリストするのと同じです (70k x 70k では約 4.9b ビットになります)。ただし、白に過ぎない大きな長方形の領域をリストすることから始めます。ビットがリストされると、ボックスの最初のリストにあるものはすべてスキップされます。それらが読み込まれると、ボックスの内容もスキップすることがわかります。ここで 12 バイト (座標ごとに 3 つ) を使用すると、20 x 20 のボックス (400 ビット) 以上を表すことができます。それは約10%の圧縮になります。200x200 のボックスを取得できた場合、圧縮率は 1% になります。

RLE の場合、サンプル サイズとして 16 ビットを使用するとします。したがって、行の1つが次のように始まった場合:1245 white, 2 black, 100 white, 1 black, 834 whiteこれを(16進​​数で)エンコードできます( 04dd0002006400010342004dは16進数で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

人間の目は約300DPIで個々のピクセルを見る能力を失い始めるので、それ以上の解像度の画像を持つことは意味がありません。したがって、これは画像の解像度を下げる方法の練習になります。ピクセルあたり3バイトの場合、オリジナルは14.7GBを必要とするため、ほとんどの既製のソリューションは実用的ではありません。

すべてを同時にメモリに保存する必要がないように、データを順番に読み取ることができると仮定します。

簡単な削減方法の1つは、一度に8行を読み取り、各8x8領域を平均して1つの出力ピクセルを生成することです。これにより、8750 x 8750の画像が生成されますが、これはまだ大きいですが、合理的な範囲内です。

オリジナルのスライディングウィンドウに対して実行できる平均化よりもわずかに良い結果を生成するサイズ変更方法があります。シームレスな結果を得るには、ウィンドウを重ねることが最適です。

于 2012-10-29T21:50:21.797 に答える