Wie normalisiere ich ein Bild?

8

Wenn ich eine Reihe von Pixeln habe, die von etwa -500 bis +1000 reichen, wie würde ich dann alle Pixel auf dem gleichen Gradient normalisieren, so dass sie zwischen einem bestimmten Bereich liegen, sagen wir 0 und 255?

    
Nick Bolton 29.03.2009, 18:23
quelle

5 Antworten

25

Ein solcher Pseudocode würde Werte linear von einem Bereich zum anderen skalieren

%Vor%     
Paul Dixon 29.03.2009, 18:31
quelle
6

Ihre Frage ist nicht sehr klar, deshalb gehe ich davon aus, dass Sie eine Art Bildverarbeitung durchführen und die Ergebnisse, die Sie bekommen, sind Werte von -500 bis 1000 und jetzt müssen Sie die Farbe in einer Datei speichern wobei jeder Wert zwischen 0 und 255 liegen muss.

Wie Sie dies tun, ist wirklich sehr abhängig in der Anwendung, was ist wirklich die Bedeutung der Ergebnisse und was genau Sie tun möchten. Die zwei Hauptoptionen sind:

  • klemme die Werte - alles unter 0 stellst du durch 0 und alles über 255 stellst du durch 255 ein. Das solltest du zum Beispiel machen, wenn deine Bildverarbeitung eine Interpolation ist, die diese eigentlich nicht erreichen soll Werte
  • Lineare Normalisierung - linear kann Ihr minimaler Wert auf 0 und Ihr maximaler Wert auf 255 gesetzt werden. Natürlich müssen Sie zuerst das Minimum und Maximum finden. Sie tun:

    %Vor%

In diesem Fall werden die Werte zuerst auf [0,1] abgebildet und dann auf [0,255] zurückgestreckt.

Eine dritte Option besteht darin, diese beiden Optionen miteinander zu kombinieren. Ihre Anwendung fordert möglicherweise, dass Sie negative Werte als nicht benötigte Werte behandeln und sie auf 0 und positive Werte festhalten, um sie linear auf [0,255] abzubilden.

    
shoosh 29.03.2009 18:34
quelle
3

Machen Sie zuerst alles positiv. Wenn das Minimum -500 ist, addiere 500 zu allen Werten. Dann wäre das Minimum 0 und das Maximum wäre 1500.

Dann ist es nur eine Regel von drei und Sie haben es:

%Vor%     
fmsf 29.03.2009 18:32
quelle
1

Irgendein Pseudocode kann helfen:

%Vor%

Das ist übrigens Python-Code.

    
jsapara 29.03.2009 18:28
quelle
0

Erstellen Sie zwei Variablen, MinInputValue und MaxInputValue . Initialisiere MinInputValue auf eine sehr große positive Zahl (höher als der größte Pixelwert, den du jemals sehen wirst) und MaxInputValue auf eine sehr große negative Zahl (niedriger als der niedrigste Pixelwert, den du jemals erwarten würdest).

Schleife über jedes Pixel im Bild. Wenn der Pixelwert PixelValue für jedes Pixel niedriger als MinInputValue ist, setzen Sie MinInputValue auf PixelValue . Wenn der Pixelwert höher als MaxInputValue ist, setzen Sie MaxInputValue auf PixelValue .

Erstellen Sie eine neue Variable, InputValueRange , und setzen Sie sie auf MaxInputValue - MinInputValue .

Sobald dies erledigt ist, durchlaufen Sie erneut jedes Pixel im Bild. Errechnen Sie für jedes Pixel PixelValue den Ausgabe-Pixelwert als 255.0 * (PixelValue - MinInputValue) / InputValueRange . Sie können diesen neuen Wert wieder dem ursprünglichen PixelValue zuweisen, oder Sie können das entsprechende Pixel in einem Ausgabebild der gleichen Größe festlegen.

    
Spire 29.03.2009 18:41
quelle

Tags und Links