1

Cで統一LBPを実装していますが、コンセプトについて混乱しています。LBPを実装しました。512*512 寸法の画像があるとします。LBP の後は 510*510 になります。このLBP画像から256ビン/ピクセルを取得する方法。

for(i=1; i < image_src->width - 1; i++)
    {
          for(j=1; j < image_src->height - 1; j++)
          {
              const unsigned char center = image_get_pixel_value(image_src, i, j , 0);
              unsigned char code = 0;
              if(center <= image_get_pixel_value(image_src, i-1, j-1 , 0))
                code += 128;
               if(center <= image_get_pixel_value(image_src, i-1, j , 0))
                code += 64;
              if(center <= image_get_pixel_value(image_src, i-1, j+1 , 0))
                code += 32;
              if(center <= image_get_pixel_value(image_src, i, j+1 , 0))
                code += 16;
              if(center <= image_get_pixel_value(image_src, i+1, j+1 , 0))
                code += 8;
              if(center <= image_get_pixel_value(image_src, i+1, j , 0))
                code += 4;
              if(center <= image_get_pixel_value(image_src, i+1, j-1 , 0))
                code += 2;
              if(center <= image_get_pixel_value(image_src, i, j-1 , 0))
                code += 1;

              image_set_pixel_value(image_tar, i-1, j-1, 0, code);
          }
      }

そして、これはルックアップ テーブルです。

int  UniformPattern59[16][16] = {
             1,   2,   3,   4,   5,   0,   6,   7,   8,   0,   0,   0,   9,   0,  10,  11,
            12,   0,   0,   0,   0,   0,   0,   0,  13,   0,   0,   0,  14,   0,  15,  16,
            17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            18,   0,   0,   0,   0,   0,   0,   0,  19,   0,   0,   0,  20,   0,  21,  22,
            23,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            24,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            25,   0,   0,   0,   0,   0,   0,   0,  26,   0,   0,   0,  27,   0,  28,  29,
            30,  31,   0,  32,   0,   0,   0,  33,   0,   0,   0,   0,   0,   0,   0,  34,
            0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  35,
            0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
            0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  36,
            37,  38,   0,  39,   0,   0,   0,  40,   0,   0,   0,   0,   0,   0,   0,  41,
            0,    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  42,
            43,  44,   0,  45,   0,   0,   0,  46,   0,   0,   0,   0,   0,   0,   0,  47,
            48,  49,   0,  50,   0,   0,   0,  51,  52,  53,   0,  54,  55,  56,  57,  58
    };
4

1 に答える 1

5

LBP の概念を誤解しているかもしれません。LBP には、基本 LBP、均一 LBP、および回転不変の均一 LBP という 2 つのバリエーションがあります。

基本的な LBPでは、中央のピクセルとその隣接ピクセルの 1 つ (より正確な結果を得るために補間されたピクセル) のグレースケール値を比較して、ビットのバイナリ コーディング (0 または 1) を取得します。通常、このコーディング スキームの半径を 1 に設定し、ネイバーの数をデフォルト設定として 8 に設定します。したがって、8 つの隣接ピクセルすべてを比較した後、中心ピクセルのローカル バイナリ パターン (LBP) を取得できます。これは、01011110 または 11110000 などの 8 ビットの 2 進数です。 LBP は、2 進数を 10 進数に変換すると 0 から 255 です。通常、各ピクセルの LBP コードを 256 種類のパターンの 1 つに分類して、さらなる分類または認識タスク用のヒストグラムを形成します。これは、質問の 256 ビン/ピクセルです。

ただし、一様および回転不変の一様 LBPには異なるものがあります。つまり、回転不変の均一な LBP が 10 種類のパターンしかない場合、パターンの数は 256 ではありません。回転均一 LBP には 9 つの回転均一 LBP とその他 1 つの LBP があり、通常、9 つの回転均一 LBP で画像全体の 90% のパターンがカバーされます。

したがって、回転不変の一様 LBP では、分類や認識などのさらなる処理のために 10 ビンのヒストグラムを生成するだけで済みます。最初に、image.rows*image.cols 行列を生成する可能性がある、回転不変の均一な LBP として各ピクセルをコーディングします。次に、各パターン (行列要素) を 10 個のパターンのいずれかに分類して、ヒストグラムを表す配列を形成します。

あなたの情報のためのいくつかの論文:

  1. Scholarpedia の LBP、http: //www.scholarpedia.org/article/Local_Binary_Patterns
  2. LBP 作成者による C++ コード、http: //www.cse.oulu.fi/CMV/Downloads/LBPSoftware
  3. ローカル バイナリ パターンを使用したマルチ解像度グレースケールおよび回転不変テクスチャ分類、http: //www.rafbis.it/biplab15/images/stories/docenti/Danielriccio/Articoliferimento/LBP.pdf
于 2012-08-23T01:24:24.683 に答える