web-dev-qa-db-ja.com

グレースケール画像のBMP形式)とは何ですか?

グレースケール画像のBMP形式(特にピクセルあたり16ビット))とは何ですか? wikipedia はbmpのカラー画像について説明しています。

更新:

将来の訪問者のための更新と情報のために、これは非圧縮で16ビットのグレースケールをサポートできるため、 [〜#〜] pgm [〜#〜] を使用します。別のオプションは [〜#〜] png [〜#〜] を使用することでしたが、説明したように(これは私が望むものではありません)データを圧縮します ここ 。また、ほとんどのモニターは256色をサポートしており、16ビットでは4096色をサポートしていないため、画像が歪んで見える場合があることにも注意してください。したがって、画像は飽和状態になります。

16ビット画像のグレースケールの場合、BMPがほとんど無力であることを知って驚いた。
問題の理解を助けてくれた人々に感謝します。

13
gpuguy

グレースケール画像の場合、8ビットBMPを使用します。 8ビットBMPは、パレットを使用して色をエンコードできます。ただし、使用しない場合は、色の値を簡単に解釈できます[0...255]黒(0)から白(255)までの色として。

編集:16ビットのグレースケール画像にはBMP)は使用しません。技術的には、16ビットを使用できます。ピクセルあたりBMP 16ビットグレースケールデータをエンコードするための形式( http://en.wikipedia.org/wiki/BMP_file_format#Pixel_format )。ただし、実際にはこれはその深さはピクセルのアルファ、赤、緑、青のサンプルをエンコードするように設計されているため、悪い考え(読み:ハッキー)。

16ビット/ピクセルのグレースケールデータを保存するためのより良い形式はPNGです。

また、自問してみてください。本当に、本当にその超精度が必要ですか?ほとんどのアプリケーションでは、ピクセルあたり8ビットで十分です(=精度に関する特定の要件がない場合は、これが当てはまります)。

3
jsalonen

表示されているように、TIFFとPNGはネイティブに16ビットグレースケールをサポートしています。

http://en.wikipedia.org/wiki/Grayscale

保存したいこれらの画像は、単に表示するためだけでなく、特別な精度が必要なある種の後処理のためのものだと思いますか?そうでない場合は、最下位の8ビットを削除し、カラーマップを使用してより単純な8ビットビットマップを保存し、各値を値->(値、値、値)RGBマッピングを使用してRGBにマップすることをお勧めします。

2
trumpetlicks

そうです、BMPは色しか知りません。これを行う方法は、256エントリのパレットを作成することです。ここで、各エントリはR、G、Bに対して同じ値を持ちます:最初のエントリ(0,0,0)、2番目のエントリ(1,1,1)など。パレットを使用して、画像をピクセルあたり8ビットにします。

編集:16ビットグレースケールの新しい要件を考えると、2つの選択肢があると思います:8ビットに変換するか、BMP以外の別の形式を使用します。

2
Mark Ransom

グレースケール画像のBMP形式)とは何ですか

パレットを使用する以外に、BITMAPV4HEADERを指定してBMPを記述し、設定することで、グレースケールBMP(8ビット/ピクセル)を作成できます。 bV4RedMaskbV4GreenMask、およびbV4BlueMaskを同じ値にします。ただし、このような形式の最小bcBitCount値は16であるため、各ピクセルは2バイトを占める必要があります。 。ただし、アルファチャネル(透明度)には2番目のバイトを使用できます。

特に16ビット/ピクセルの場合

BMPバージョンは16ビットの色深度をサポートしているように見えます。ファイル形式では許可されているようですが(bcBitCount=16およびbV4…Mask=0xFFFF)、画像エディタとライブラリ余分なビットを破棄します。

一部のドキュメント 64-BPPを参照BMPファイル。ただし、マスクフィールドはすべて32ビットであるため、BITMAPV4HEADERフィールドにどのように適合するかは不明です。サイズが大きい(したがって、64 BPPのチャネルマスクを指定することはできません)。

別のオプションはPNGを使用することでしたが、ここで説明するようにデータを圧縮します(これは私が望むものではありません)。

必要がなければ、PNGファイルを圧縮する必要はありません。圧縮レベル0を使用すると、ピクセルはそのままになります(さらに、zlibヘッダー/フッター)。

また、ほとんどのモニターは256色をサポートしており、16ビットでは4096色をサポートしていないため、画像が歪んで見える場合があることにも注意してください。

16ビット深度では、4096ではなく65536のチャネルごとの明度値が可能になります。歪みはガンマ曲線の問題のように聞こえ、ファイル形式の問題とは実際には関係ありません。

0