【画像処理基礎】BMPフォーマット画像の解析


最近ずっとbmpフォーマットのピクチャーで画像アルゴリズムの学習を行って、bmpに対して1つの整理をして、後で使うことに備えます.
BMPファイルフォーマットは、Bitmap(ビットマップ)またはDIB(Device-Independent Device)とも呼ばれ、Windowsシステムで広く使われている画像ファイルフォーマットです.画像画素領域のデータを変換せずに保存できるため,RAWデータを取得するための重要なソースとなる.Windowsのグラフィックユーザインタフェース(graphical user interfaces)も、内蔵画像サブシステムGDIでBMPフォーマットをサポートしている.
BMPファイルのデータは、ファイルヘッダから順に4つの部分に分けられる.
bmpファイルヘッダ(bmp file header):ファイルのフォーマット、サイズなどの情報を提供する
ビットマップ情報ヘッダ(bitmap information):画像データのサイズ、ビット平面数、圧縮方式、色インデックスなどの情報を提供する
パレット(color palette):オプションで、インデックスを使用して画像を表す場合、パレットはインデックスに対応する色のマッピングテーブルです.
ビットマップデータ(bitmap data):画像データです
C言語から彼らの定義を見ることができます
(1)bmpファイルヘッダ(14バイト)
typedef struct tagBITMAPFILEHEADER {
        WORD    bfType; //     , 2   
        DWORD   bfSize; //     , 4   
        WORD    bfReserved1; //   1, 2   
        WORD    bfReserved2; //   2, 2   
        DWORD   bfOffBits; //                  ,     :     =       +       +     。 4   
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

(2)ビットマップ情報ヘッダ(40バイト)
typedef struct tagBITMAPINFOHEADER{
        DWORD      biSize; //        ,4   。
        LONG       biWidth; //     ,      ,4   。
        LONG       biHeight; //     ,      ,4   。
        WORD       biPlanes; //      ,  1,2   。
        WORD       biBitCount; //       ,           ,2   。
        DWORD      biCompression; //       :0 -     (  BI_RGB  )1 - RLE 8-  8 RLE    ( BI_RLE8  )2 - RLE 4-  4 RLE    ( BI_RLE4  )3 - Bitfields-      ( BI_BITFIELDS  ),4   。
        DWORD      biSizeImage; //       ,   4   ,4   。
        LONG       biXPelsPerMeter; //   /         ,4   。
        LONG       biYPelsPerMeter;//   /         ,4   。
        DWORD      biClrUsed; //        。   0,             。 8-  /     0x100   256,4   。
        DWORD      biClrImportant; //        。           (    0 ),           ,4   。
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

(3)パレット(パレットサイズはオプション、サイズはN*4(bytes)で、Nは色の数を表す)
typedef struct tagRGBQUAD {
        BYTE    rgbBlue;//    
        BYTE    rgbGreen;//    
        BYTE    rgbRed;//    
        BYTE    rgbReserved;//    
} RGBQUAD;

(4)ビットマップデータ(画像によって大きさが異なる):
ビットマップデータは対応する配列であり、RGB、YUV、HSVなど様々なフォーマットが可能である.