2016-06-11 16 views
0

いくつかのピクセル操作クラスのコーディング中に、非最大抑制機能を実装しました。Qt - 画像クラス - 非最大抑制 - C++

コードはここにある:今

signed char * nonMaxSuppress(int windowSize, signed char * pointer) { 

int delta = windowSize/2; 

int index; 

int counter = 0; 
signed char current; 
for(int row = 3; row < GLOBAL_HEIGHT - 3; ++row) 
{ 

    for(int col = 3; col < GLOBAL_WIDTH - 3; ++col) 
    { 

     counter = 0; 
     current = pointer[(row * GLOBAL_WIDTH) + col]; 

     for(int i = 0; i < windowSize; ++i) 
     { 

      for(int j = 0; j < windowSize; ++j) 
      { 
       index = ((row - delta + i) * GLOBAL_WIDTH) + (col - delta + j); 
       if(current > pointer[index]) { 
        counter++; 
       } 

      } 
     } 

     if(counter != ((windowSize * windowSize) - 1)){ 
      pointer[(row * GLOBAL_WIDTH) + col] = 0; 
     } 

    } 
} 
return pointer;} 

結果の画像非最大抑制がかなり奇妙です前と後。 青から外に出てくるような線があるように感じます。 添付写真(非最大抑制の前後)をご覧ください。

私は何かの助けに感謝します。

Thx!

私はそれらのイメージ画像のエッジに、ちょうどあなたの知識をガウス

Before Non max suppression

After Non max suppression

のグレースケールとDiffrence後に追加したを見ることができている3つのピクセルエラーを無視してくださいライン?それは何ですか?

答えて

1

抑制をインプレースで実行しようとしています。ピクセル(col、row)を考えてみましょう。その内容を変更すると、次のピクセル(col + 1、row)は異なるwindowSize * windowSize近傍を持ちます。

この問題を解決するには、別の配列を出力として使用する必要があります。ただ、

output[(row * GLOBAL_WIDTH) + col] = 
       (counter != ((windowSize * windowSize) - 1)) ? 0 : current; 

if(counter != ((windowSize * windowSize) - 1)){ 
     pointer[(row * GLOBAL_WIDTH) + col] = 0; 
    } 

を交換

関連する問題