[PYTHON] Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV

Was du machen willst

Vor kurzem begann Bildverarbeitung zu lernen Ich dachte, dass ich eine Wavelet-Konvertierung für das Bild durchführen möchte. Ich habe den folgenden tollen Artikel gefunden.

Mokemokechicken: Beispiel für die Wavelet-Konvertierung von Bildern mit Python

Wie der Artikelautor mokemokechicken jedoch auch feststellt. ** Es gab ein Problem, dass "es nur funktioniert, wenn die vertikale und horizontale Größe der Bilder gleich sind" **.

Diesmal also unter Bezugnahme auf den Beispielcode von mokemokechicken, Durch Laden eines Bildes mit OpenCV ist ** "unabhängig von der vertikalen und horizontalen Größe des Eingabebildes" ** eine Wavelet-Konvertierung in das Bild möglich. (Obwohl es cool geschrieben ist, ist es eine Pointe, die ich gut machen konnte, wenn ich das Bild mit OpenCV lesen und den Code manipulieren wollte)

Dinge notwendig

・ PyWavelets ・ Numpy ・ OpenCV

Eine kurze Beschreibung von PyWavelets

URL : http://www.pybytes.com/pywavelets/ref/2d-dwt-and-idwt.html

Mit der Funktion * pywt.dwt2 * für ein zweidimensionales Array (diesmal ein Bild) Die zweidimensionale Wavelet-Umwandlung kann leicht durchgeführt werden.

Eine Funktion, die erweitert wurde, um eine mehrdimensionale zweidimensionale Wavelet-Konvertierung zu ermöglichen Es ist als * pywt.wavedec2 * vorbereitet, und diesmal habe ich mich mit dieser Funktion befasst.

Beispielcode

Dieses Mal konvertieren wir Wavelet in Lena

import pywt
import numpy as np
import cv2

def image_normalization(src_img):
    """
Normalisierungsprozess zur Vermeidung von Überbelichtung
    cv2.Erforderlich bei der Anzeige von Wavelet-konvertierten Bildern mit imshow (nur für Bilder mit großen Werten)
    """
    norm_img = (src_img - np.min(src_img)) / (np.max(src_img) - np.min(src_img))
    return norm_img

def merge_images(cA, cH_V_D):
    """numpy.4 Array(Oben links,(Oben rechts, unten links, unten rechts))Verbinden"""
    cH, cV, cD = cH_V_D
    cH = image_normalization(cH) #Auch wenn Sie es entfernen, ist es in Ordnung
    cV = image_normalization(cV) #Auch wenn Sie es entfernen, ist es in Ordnung
    cD = image_normalization(cD) #Auch wenn Sie es entfernen, ist es in Ordnung
    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 np.vstack((np.hstack((cA,cH)), np.hstack((cV, cD)))) #Fügen Sie Pixel oben links, oben rechts, unten links und unten rechts hinzu

def coeffs_visualization(cof):
    norm_cof0 = cof[0]
    norm_cof0 = image_normalization(norm_cof0) #Auch wenn Sie es entfernen, ist es in Ordnung
    merge = norm_cof0
    for i in range(1, len(cof)):
        merge = merge_images(merge, cof[i])  #Ordnen Sie die vier Bilder zu
    cv2.imshow('', merge)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def wavelet_transform_for_image(src_image, level, M_WAVELET="db1", mode="sym"):
    data = src_image.astype(np.float64)
    coeffs = pywt.wavedec2(data, M_WAVELET, level=level, mode=mode)
    return coeffs

if __name__ == "__main__":

    filename = 'lena.jpg'
    LEVEL = 3

    # 'haar', 'db', 'sym' etc...
    # URL: http://pywavelets.readthedocs.io/en/latest/ref/wavelets.html
    MOTHER_WAVELET = "db1"

    im = cv2.imread(filename)

    print('LEVEL :', LEVEL)
    print('MOTHER_WAVELET', MOTHER_WAVELET)
    print('original image size: ', im.shape)

    """
Konvertieren Sie für jeden BGR-Kanal
    cv2.imread ist B.,G,Beachten Sie, dass die Bilder in der Reihenfolge R ausgespuckt werden
    """
    B = 0
    G = 1
    R = 2
    coeffs_B = wavelet_transform_for_image(im[:, :, B], LEVEL, M_WAVELET=MOTHER_WAVELET)
    coeffs_G = wavelet_transform_for_image(im[:, :, G], LEVEL, M_WAVELET=MOTHER_WAVELET)
    coeffs_R = wavelet_transform_for_image(im[:, :, R], LEVEL, M_WAVELET=MOTHER_WAVELET)

    coeffs_visualization(coeffs_B)
    # coeffs_visualization(coeffs_G)
    # coeffs_visualization(coeffs_R)

Ausführungsergebnis

Originalbild (lena.jpg) lena のコピー.jpg

Bild des Wavelet-Koeffizienten (B-Kanal) スクリーンショット 2017-04-09 18.43.08.png

Schließlich

Wenn Sie Korrekturen haben, lassen Sie es uns bitte wissen.

Recommended Posts

Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Bilder mit Pupil, Python und OpenCV aufnehmen
Zeigen Sie eingebettete Bilder von MP3 und Flac mit Mutagen an
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Trennen Sie Farbbilder in RGB-Bilder und zeigen Sie sie mit OpenCV an
Die Geschichte der Anzeige von Bildern mit OpenCV oder PIL (nur)
Umgebungskonstruktion von Python und OpenCV
Leuchtendes Leben mit Python und OpenCV
Neuronales Netzwerk mit OpenCV 3 und Python 3
Laden Sie das GIF-Bild mit Python + OpenCV
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Zeichnen Sie Figuren mit OpenCV und PIL
Laden Sie Bilder mit Falcon hoch und laden Sie sie herunter
Grundlegendes Studium von OpenCV mit Python
Ausrichten gescannter Bilder von animiertem Videopapier mit OpenCV und Python
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Multi-Class Multi-Label-Klassifizierung von Bildern mit Pytorch
Holen Sie sich Bilder von OpenStreetMap und Geographical Institute Map mit Python + py-staticmaps
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
Generiere automatisch Bilder von Koala und Bär
Transkription von Bildern mit der Vision API von GCP
[python, openCV] base64 Gesichtserkennung in Bildern
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
[Python] Bilder mit OpenCV lesen (für Anfänger)
Einfache Einführung in die Python3-Serie und OpenCV3
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Importieren und Exportieren von GeoTiff-Bildern mit Python
Schneiden Sie Bilder aus und verbinden Sie sie mit ImageMagick
Erläuterung zum Erstellen einer Anwendung zum Anzeigen von Bildern und Zeichnen mit Python
Untersuchung der Austauschprognosemethode mittels Deep Learning und Wavelet-Konvertierung
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Mischen Sie Hunderttausende von Bildern gleichmäßig mit Tensorflow.
Laden Sie das Kaffeemodell mit Chainer und klassifizieren Sie die Bilder
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Koexistenz von Fcitx und Zoom ~ Mit japanischer Lokalisierung ~
Kategorisieren Sie Gesichtsbilder von Anime-Charakteren mit Chainer
Installieren Sie OpenCV 4.0 und Python 3.7 unter Windows 10 mit Anaconda
Niedrigrangige Approximation von Bildern durch HOSVD und HOOI
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
Rauschunterdrückung und Hintergrundtransparenz von binärisierten Bildern
TRIE-Baumimplementierung mit Python und LOUDS
Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Feature Matching mit OpenCV 3 und Python 3 (A-KAZE, KNN)
Fortsetzung der Multi-Plattform-Entwicklung mit Electron und Python
Beispiel für das Lesen und Schreiben von CSV mit Python
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Mit Python + Tweepy können Sie Bilder und Videos der Medienzeitleiste abrufen
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Optischer Fluss, das von OpenCV aufgenommene dynamische Bild
Trennung von japanischem Nachnamen und Vornamen mit BERT
Höchstwahrscheinlich Schätzung des Mittelwerts und der Varianz mit TensorFlow
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Laden Sie mp4 einfach teilweise mit Python und youtube-dl herunter!
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi