Ich war ein wenig an der Wavelet-Konvertierung interessiert, also habe ich sie tatsächlich verschoben und ausprobiert.
Die folgenden drei sind erforderlich. Lassen Sie es uns mit Pip usw. setzen.
gist:image_wavelet_transform.py
image_wavelet_transform.py
# coding: utf8
# 2013/2/1 [email protected]
"""Beispielskript, um ein Bild der Wavelet-Konvertierung zu erhalten
Require: pip install PyWavelets numpy PIL
Usage: python image_wavelet_transform.py <filename> (<level>:=3) (wavelet:=db1)
"""
import sys
from PIL import Image
import pywt, numpy
filename = sys.argv[1]
LEVEL = len(sys.argv) > 2 and int(sys.argv[2]) or 3
WAVLET = len(sys.argv) > 3 and sys.argv[3] or "db1"
def merge_images(cA, cH_V_D):
"""numpy.4 Array(Oben links,(Oben rechts, unten links, unten rechts))Stock"""
cH, cV, cD = cH_V_D
print cA.shape, cH.shape, cV.shape, cD.shape
cA = cA[0:cH.shape[0], 0:cV.shape[1]] #Wenn das Originalbild keine Zweierpotenz hat, kann es zu Brüchen kommen. Passen Sie daher die Größe an. Passen Sie die kleinere an.
return numpy.vstack((numpy.hstack((cA,cH)), numpy.hstack((cV, cD)))) #Fügen Sie Pixel oben links, oben rechts, unten links und unten rechts hinzu
def create_image(ary):
"""numpy.Array in Graustufenbild konvertieren"""
newim = Image.new("L", ary.shape)
newim.putdata(ary.flatten())
return newim
def wavlet_transform_to_image(gray_image, level, wavlet="db1", mode="sym"):
"""Wavelet-Konvertierung des grauen Bildes für die Ebenenhierarchie und Rückgabe jeder Stufe als Bilddarstellung
return [Stellen Sie das Bild der Ebene 0 wieder her,Stellen Sie das Bild der Ebene 1 wieder her,... ,Level wiederherstellen<level-1>Bild von, 各2D係数を1枚Bild vonにした画像]
"""
ret = []
data = numpy.array(list(gray_image.getdata()), dtype=numpy.float64).reshape(gray_image.size)
images = pywt.wavedec2(data, wavlet, level=level, mode=mode) # http://www.pybytes.com/pywavelets/ref/2d-dwt-and-idwt.html
for i in range(2, len(images)+1): #Teilweise wiederherstellen und in ret packen
ary = pywt.waverec2(images[0:i], WAVLET) * 2**(i-1) / 2**level #Bei teilweiser Wiederherstellung wird der Mehrwert nicht zurückgegeben(Es wird weißlich)Also anpassen
ret.append(create_image(ary))
#Machen Sie aus jedem 2D-Koeffizienten ein Bild
merge = images[0] / (2**level) #Dem cA-Teil werden Werte hinzugefügt, also mitteln Sie sie für die Bildanzeige.
for i in range(1, len(images)):
merge = merge_images(merge, images[i]) #Ordnen Sie die vier Bilder zu
ret.append(create_image(merge))
return ret
if __name__ == "__main__":
im = Image.open(filename)
if im.size[0] != im.size[1]: #Wenn die vertikale und horizontale Größe nicht gleich sind, funktioniert etwas nicht, daher werde ich es vorerst anpassen
max_size = max(im.size)
newim = Image.new(im.mode, (max_size, max_size))
newim.paste(im, (0,0))
im = newim
im.getdata() #Wenn Sie dies nicht nennen, aus irgendeinem Grund die nächste Aufteilung()Schlägt fehl ...? Warum?
bands = im.split() #Prozess für jeden RGB-Kanal
converted_bands_array = [wavlet_transform_to_image(gray, LEVEL, wavlet=WAVLET) for gray in bands] #Konvertieren Sie für jeden RGB-Kanal
# zip(*hoge)Ist schwer zu verstehen, aber konvertiert_Für Bands(R,G,B)Bild von(PIL.Image)Eingeben.Mit Zusammenführung auf RGB-Image wiederherstellen
converted_array = [Image.merge(im.mode, converted_bands) for converted_bands in zip(*converted_bands_array)]
# converted_array: [Stellen Sie das Bild der Ebene 0 wieder her,Stellen Sie das Bild der Ebene 1 wieder her,... ,Level wiederherstellen<level-1>Bild von, 各2D係数を1枚Bild vonにした画像]
for i, img in enumerate(converted_array):
img.save("%s_%d.png " % (filename, i)) #Angemessene Bildausgabe
Originalbild (kuma_005.jpg)
Bild des abgebildeten Koeffizienten (Stufe = 5) (kuma_005.jpg_5.png)
Recommended Posts