Beispiel für die Wavelet-Konvertierung von Bildern in Python

Ich war ein wenig an der Wavelet-Konvertierung interessiert, also habe ich sie tatsächlich verschoben und ausprobiert.

Dinge notwendig

Die folgenden drei sind erforderlich. Lassen Sie es uns mit Pip usw. setzen.

Kurzer Kommentar

Beispielcode

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

Beispiel für ein Ausführungsergebnis

Originalbild (kuma_005.jpg) kuma_005.jpg

Bild des abgebildeten Koeffizienten (Stufe = 5) (kuma_005.jpg_5.png) kuma_005.jpg_5.png

Recommended Posts

Beispiel für die Wavelet-Konvertierung von Bildern in Python
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Workflow zum Konvertieren der Formel (Bild) in Python
Konvertieren Sie die Liste mit Python in DataFrame
Konvertieren Sie PDF in Image mit ImageMagick
Konvertieren Sie Memos sofort mit Python 2to3
HTML-Mail mit Bild zum Senden mit Python
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertiere Hiragana mit Python (Beta) in Romaji
Konvertieren Sie chinesische Zahlen mit Python in arabische Zahlen
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Bildverarbeitung mit Python
Konvertieren Sie PDFs mit Python in Massenbilder
Konvertieren Sie die SVG-Datei mit Python in png / ico
So beschneiden Sie ein Bild mit Python + OpenCV
Konvertieren Sie Windows-Epochenwerte mit Python in das Datum
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat
Ich möchte ein Bild mit Lollipop in WebP konvertieren
Bildverarbeitung mit Python (Teil 2)
Mit Python erstellte Beispieldaten
Stellen Sie mit Python eine Verbindung zu BigQuery her
[Python] Datum in Zeichenfolge konvertieren
Konvertieren Sie numpy int64 in python int
Bildbearbeitung mit Python OpenCV
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Bildverarbeitung mit Python (Teil 1)
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Bildverarbeitung mit Python (3)
PyInstaller-Memorandum Konvertieren Sie Python [.py] in [.exe] mit 2 Zeilen
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Konvertieren Sie Python 3.x-Code in Python 2.x.
[Python] Bildverarbeitung mit Scicit-Image
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Eine Python-Probe zum Lernen von XOR mit einem genetischen Algorithmus in einem neuronalen Netz
[Ev3dev] So zeigen Sie ein BMP-Bild mit Python auf dem LCD an
Konvertieren Sie Bilder mit PIL (Python Imaging Library) in Sepia.
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Konvertieren Sie .ipynb in .html (mit BatchFile)
Python: So verwenden Sie Async mit
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Link, um mit Python zu beginnen
Konvertieren Sie Markdown in Python in PDF
[Python] Mit Python in eine CSV-Datei schreiben
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben