8

バイナリイメージがあります。バイナリ値は 0 または 255 です。イメージ データの型はunsigned charです。ここで、この画像に対してメディアン フィルタリングを行う必要があります。

ヒストグラムを使用して中央値を見つけるのは速いはずだと思います。いくつかのコードを使用して説明します。

unsigned int hist[2] = {0, 0};

for (int i = 0; i < kernel_h; ++i) {
     for (int j = 0; j < kernel_w; ++j) {
          if (image(i,j) == 0) {
              hist[0]++;
          }
          else {
              hist[1]++;
          }
     }
}

次に、中央値を非常に高速に取得できました。しかし、このケースのために、コードはまだ改善される可能性があります:</p>

int counter = 0;

for (int i = 0; i < kernel_h; ++i) {
     for (int j = 0; j < kernel_w; ++j) {
          if (image(i,j) == 0) {
              counter++
          }
          else {
              counter--;
          }
     }
}

しかし、ビット操作を使用して {0, 255} を何かにマップし、分岐せずにフラグを更新できるようにするなど、if-else 分岐を排除する他の方法があるのではないかと思います。

誰でも何か提案はありますか?

4

2 に答える 2