2016-06-11 23 views
0

Während der Codierung einiger Pixelmanipulationsklassen habe ich eine Nicht-Max-Unterdrückungsfunktion implementiert.Qt - Bildklasse - Nicht max. Unterdrückung - C++

-Code ist hier:

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;} 

nun das resultierende Bild vor und nach nicht max Unterdrückung recht seltsam ist. Es fühlt sich an wie eine Linie aus heiterem Himmel zu erscheinen begann. Bitte beachten Sie die beigefügten Bilder (Vorher und Nachher Nicht Max Unterdrückung).

Ich werde dankbar sein, falls Sie Hilfe benötigen.

Thx!

Bitte ignorieren Sie die 3 Pixel Fehler i in den Rand der Bilder haben und nur für Sie Wissen diejenigen Bild nach Graustufen- und diffrence Gaußsche

Before Non max suppression

After Non max suppression

Können Sie sehen, die hinzugefügt Linien? Was ist es?

Antwort

1

Sie versuchen, die Unterdrückung inplace durchzuführen. Betrachten Sie das Pixel (col, row). Sobald Sie den Inhalt geändert haben, wird das nächste Pixel (Spalte + 1, Zeile) eine andere Fenstergröße haben.

Um dieses Problem zu beheben, müssen Sie ein anderes Array als Ausgabe verwenden. Ersetzen Sie einfach

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

mit

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