[PYTHON] Conversion en ondelettes d'images avec PyWavelets et OpenCV

Chose que tu veux faire

Récemment commencé à apprendre le traitement d'image Je pensais que je voudrais effectuer une conversion en ondelettes sur l'image, J'ai trouvé le super article suivant.

Mokemokechicken: exemple de conversion en ondelettes d'images avec Python

Cependant, comme l'auteur de l'article mokemokechicken le déclare également. ** Un problème est survenu: "cela ne fonctionnera que si les tailles verticale et horizontale des images sont identiques" **.

Donc, cette fois, en se référant à l'exemple de code de mokemokechicken, En chargeant une image avec OpenCV, ** "quelle que soit la taille verticale et horizontale de l'image d'entrée" ** la conversion en ondelettes en image est possible. (Bien qu'il soit écrit froidement, c'est une punch line que j'ai pu bien faire si je voulais lire l'image avec OpenCV et falsifier le code)

Les choses nécessaires

・ PyWavelets ・ Numpy ・ OpenCV

Une brève description de PyWavelets

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

En utilisant la fonction * pywt.dwt2 *, pour un tableau à deux dimensions (cette fois, une image) La conversion en ondelettes bidimensionnelle peut être effectuée facilement,

Une fonction qui a été étendue pour permettre la conversion d'ondelettes bidimensionnelle à plusieurs niveaux Il est préparé comme * pywt.wavedec2 *, et cette fois j'ai traité de cette fonction.

Exemple de code

Cette fois, je fais une conversion en ondelettes pour Lena

import pywt
import numpy as np
import cv2

def image_normalization(src_img):
    """
Processus de normalisation pour éviter la surexposition
    cv2.Requis lors de l'affichage d'images converties en ondelettes avec imshow (uniquement pour les images avec de grandes valeurs)
    """
    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 tableaux(en haut à gauche,(En haut à droite, en bas à gauche, en bas à droite))Relier"""
    cH, cV, cD = cH_V_D
    cH = image_normalization(cH) #Même si vous le supprimez, c'est ok
    cV = image_normalization(cV) #Même si vous le supprimez, c'est ok
    cD = image_normalization(cD) #Même si vous le supprimez, c'est ok
    cA = cA[0:cH.shape[0], 0:cV.shape[1]] #Si l'image originale n'est pas une puissance de 2, il peut y avoir des fractions, donc ajustez la taille. Faites correspondre le plus petit.
    return np.vstack((np.hstack((cA,cH)), np.hstack((cV, cD)))) #Joindre des pixels en haut à gauche, en haut à droite, en bas à gauche, en bas à droite

def coeffs_visualization(cof):
    norm_cof0 = cof[0]
    norm_cof0 = image_normalization(norm_cof0) #Même si vous le supprimez, c'est ok
    merge = norm_cof0
    for i in range(1, len(cof)):
        merge = merge_images(merge, cof[i])  #Faites correspondre les quatre images
    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)

    """
Convertir pour chaque canal BGR
    cv2.imread est B,G,Notez que les images sont crachées dans l'ordre de R
    """
    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)

Résultat d'exécution

Image originale (lena.jpg) lena のコピー.jpg

Image du coefficient d'ondelettes (canal B) スクリーンショット 2017-04-09 18.43.08.png

finalement

Si vous avez des corrections, veuillez nous en informer.

Recommended Posts

Conversion en ondelettes d'images avec PyWavelets et OpenCV
Capturer des images avec Pupil, python et OpenCV
Afficher des images intégrées de mp3 et flac avec mutagène
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
Créez un lot d'images et gonflez avec ImageDataGenerator
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
Séparez les images couleur en images RVB et affichez-les avec OpenCV
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
Construction d'environnement de python et opencv
Briller la vie avec Python et OpenCV
Réseau neuronal avec OpenCV 3 et Python 3
Charger une image gif avec Python + OpenCV
Coexistence de Python2 et 3 avec CircleCI (1.0)
Dessinez des figures avec OpenCV et PIL
Télécharger et télécharger des images avec Falcon
Etude de base d'OpenCV avec Python
Alignement d'images numérisées de papier vidéo animé à l'aide d'OpenCV et de Python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Classification multi-étiquette d'images multi-classes avec pytorch
Obtenez des images d'OpenStreetMap et de la carte de l'Institut géographique avec Python + py-staticmaps
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
Générez automatiquement des images de koala et d'ours
Transcription d'images avec l'API Vision de GCP
[python, openCV] base64 Reconnaissance faciale dans les images
Lisez l'image du graphique avec OpenCV et obtenez les coordonnées du point final du graphique
[Python] Lire des images avec OpenCV (pour les débutants)
Introduction facile de la série python3 et d'OpenCV3
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
Importer et exporter des images GeoTiff avec Python
Découpez et connectez des images avec ImageMagick
Explication de la création d'une application pour afficher des images et dessiner avec Python
Examen de la méthode de prévision des échanges utilisant le Deep Learning et la conversion en ondelettes
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
Hello World et détection de visage avec OpenCV 4.3 + Python
Mélangez des centaines de milliers d'images uniformément avec tensorflow.
Chargez le modèle caffe avec Chainer et classez les images
Comparaison des performances du détecteur de visage avec Python + OpenCV
Coexistence de Fcitx et Zoom ~ Avec localisation japonaise ~
Catégoriser les images de visage de personnages d'anime avec Chainer
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
Approximation de bas rang des images par HOSVD et HOOI
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
Suppression du bruit et transparence de l'arrière-plan des images binarisées
Implémentation de l'arbre TRIE avec Python et LOUDS
Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image
Correspondance des fonctionnalités avec OpenCV 3 et Python 3 (A-KAZE, KNN)
Poursuite du développement multi-plateforme avec Electron et Python
Exemple de lecture et d'écriture de CSV avec Python
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Extraire des images et des tableaux de pdf avec python pour réduire la charge de reporting
Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
Optical Flow, l'image dynamique capturée par OpenCV
Séparation du nom et du prénom japonais avec BERT
Estimation la plus probable de la moyenne et de la variance avec TensorFlow
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Capture d'image / comparaison de la vitesse OpenCV avec et sans GPU
Détecter l'état de port du masque avec OpenCV et Raspberry Pi