2017-12-06 4 views
1

Ich habe ein Video von Transport passiert. Jeder Frame sieht wie folgt aus:Neuskalierung Zeitunterschied zwischen Videoframes

enter image description here

ich etwas Zeit-Derivat wie berechnet haben. wenn f (i) ist der i-te Rahmen, das folgende Bild ist 2 * f (i) -F (i + 1) -F (I-1):

enter image description here

Die bewegten Teilchen eine ausgeprägtere Signatur in diesem zeitabhängigen Video. Das Problem ist, dass ich es nicht wirklich zu einem Video machen kann, da lineare Kombinationen von Float-Bildern (mit Intensitäten auf [-1,1]) nicht unbedingt Float-Bilder sind (weil Intensitäten nicht im Bereich [-1,1] liegen). Daher möchte ich die Bilder neu skalieren, um auf [-1,1] zu sein.

Ich versuchte sklearn des Vorbearbeitungsmodul zu verwenden:

from sklearn import preprocessing 

images = [image1, image2, ...] 
#each imagek is a 1D image array 

scaler = preprocessing.MinMaxScaler([-1,1]) 
scaler.fit(images) 

rescaled_images = scaler.transform(images) 

Dieses Verfahren verstärkt Rauschen und entfernt den Kontrast.

Irgendwelche Empfehlungen, wie ich diese zeitabgeleiteten Bilder auf [-1,1] skalieren kann, ohne Informationen zu verlieren? Jede Hilfe wird geschätzt!

(Ich fragte gestern, aber löschte die Frage, weil ich das Problem richtig mit Grafiken zeigen nicht die Zeit hatte,)

+0

Der Grund dafür ist, dass 'MinMaxScaler' ist eine Transformation auf jede Spalte der Anwendung deine Daten. Sie möchten eine bildweise Skalierung. – ncfirth

Antwort

1

erwähnt Wie in meinem Kommentar ist der Grund, dass es nicht funktioniert, weil MinMaxScaler für Feature ist Skalierung, aber Sie möchten das gesamte Bild skalieren. Angenommen, Ihr Bild sind numpy Arrays, Ihre einfachste Weg wäre, wie folgt:

# create a 128x128 image to work with 
image = np.random.random((128, 128),) 
# scale to [0, 1] 
newimage = (image - image.min())/(image.max() - image.min()) 
# Now scale to [-1, 1] 
newimage = newimage*2-1 
print(newimage.min(), newimage.max()) 

Ausgang: -1,0, 1,0

+0

Funktioniert gut - danke! Diese Lösung ist ziemlich einfach. Ich hatte beschlossen die Lektion aus dem Scheitern von MinMaxScaler zu lernen, dass eine solche lineare Skalierung nicht gut genug wäre, da der Kontrast gering war. – kevinkayaks