Exemple de conversion en ondelettes d'images en Python

J'étais un peu intéressé par la conversion en ondelettes, alors j'ai essayé de voir à quoi cela ressemblait.

Les choses nécessaires

Les trois suivants sont obligatoires. Mettons-le avec pip etc.

Bref commentaire

Exemple de code

gist:image_wavelet_transform.py

image_wavelet_transform.py


# coding: utf8
# 2013/2/1 [email protected]
"""Exemple de script pour obtenir une image de la conversion en ondelettes

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 tableaux(en haut à gauche,(En haut à droite, en bas à gauche, en bas à droite))Bâton"""
    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]] #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 numpy.vstack((numpy.hstack((cA,cH)), numpy.hstack((cV, cD)))) #Joindre des pixels en haut à gauche, en haut à droite, en bas à gauche, en bas à droite

def create_image(ary):
    """numpy.Convertir le tableau en image en niveaux de gris"""
    newim = Image.new("L", ary.shape)
    newim.putdata(ary.flatten())
    return newim

def wavlet_transform_to_image(gray_image, level, wavlet="db1", mode="sym"):
    """Conversion en ondelettes de l'image grise pour la hiérarchie des niveaux et retour de chaque étape sous forme de représentation d'image

    return [Restaurer l'image de niveau 0,Restaurer l'image de niveau 1,... ,Niveau de restauration<level-1>Image de, 各2D係数を1枚Image deにした画像]
    """
    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): #Restaurer partiellement et emballer en ret
        ary = pywt.waverec2(images[0:i], WAVLET)  * 2**(i-1) / 2**level #Lorsqu'elle est partiellement restaurée, la valeur ajoutée n'est pas retournée(Ça devient blanchâtre)Alors ajustez
        ret.append(create_image(ary))
    #Transformez chaque coefficient 2D en une seule image
    merge = images[0] / (2**level) #Les valeurs sont ajoutées à la partie cA, donc moyenne pour l'affichage de l'image.
    for i in range(1, len(images)): 
        merge = merge_images(merge, images[i]) #Faites correspondre les quatre images
    ret.append(create_image(merge))
    return ret

if __name__ == "__main__":
    im = Image.open(filename)
    if im.size[0] != im.size[1]: #Si les tailles verticale et horizontale ne sont pas les mêmes, quelque chose ne fonctionnera pas, donc je vais le faire correspondre pour le moment
        max_size = max(im.size)
        newim = Image.new(im.mode, (max_size, max_size))
        newim.paste(im, (0,0))
        im = newim

    im.getdata() #Si vous n'appelez pas ça, pour une raison quelconque la prochaine scission()Échoue ...? Pourquoi?
    bands = im.split() #Processus pour chaque canal RVB
    converted_bands_array = [wavlet_transform_to_image(gray, LEVEL, wavlet=WAVLET) for gray in bands] #Convertir pour chaque canal RVB
    # zip(*hoge)Est difficile à comprendre, mais converti_Pour les groupes(R,G,B)Image de(PIL.Image)Entrer.Restaurer l'image RVB avec fusion
    converted_array = [Image.merge(im.mode, converted_bands) for converted_bands in zip(*converted_bands_array)]

    # converted_array: [Restaurer l'image de niveau 0,Restaurer l'image de niveau 1,... ,Niveau de restauration<level-1>Image de, 各2D係数を1枚Image deにした画像]
    for i, img in enumerate(converted_array): 
        img.save("%s_%d.png " % (filename, i)) #Sortie d'image appropriée

Exemple de résultat d'exécution

Image originale (kuma_005.jpg) kuma_005.jpg

Image du coefficient imagée (niveau = 5) (kuma_005.jpg_5.png) kuma_005.jpg_5.png

Recommended Posts

Exemple de conversion en ondelettes d'images en Python
Convertir un PDF en image (JPEG / PNG) avec Python
Convertissez l'image au format .zip en PDF avec Python
Workflow pour convertir une formule (image) en python
Convertir la liste en DataFrame avec python
Convertir un PDF en image avec ImageMagick
Convertir un mémo à la fois avec Python 2to3
mail html avec image à envoyer avec python
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Convertir des données Excel en JSON avec python
Convertir Hiragana en Romaji avec Python (bêta)
Convertir des nombres chinois en nombres arabes avec Python
Convertir 202003 en 2020-03 avec les pandas
Traitement d'image avec Python
Convertissez des PDF en images en masse avec Python
Convertir un fichier svg en png / ico avec Python
Comment recadrer une image avec Python + OpenCV
Convertir les valeurs d'époque Windows à ce jour avec python
Exemple de notification Slack avec python lambda
Convertir une chaîne au format de liste caractère par caractère avec python
Je veux convertir une image en WebP avec sucette
Traitement d'image avec Python (partie 2)
Exemple de données créées avec python
Connectez-vous à BigQuery avec Python
[python] Convertir la date en chaîne
Convertir numpy int64 en python int
Édition d'image avec python OpenCV
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
Traitement d'image avec Python (partie 1)
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Tweet avec image en Python
Tri des fichiers image avec Python
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Traitement d'image avec Python (3)
Mémorandum PyInstaller Convertit Python [.py] en [.exe] avec 2 lignes
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Convertir le code python 3.x en python 2.x
[Python] Traitement d'image avec scicit-image
J'ai essayé de trouver l'entropie de l'image avec python
Un exemple de python pour apprendre XOR avec un algorithme génétique sur un réseau neuronal
[Ev3dev] Comment afficher une image bmp sur un écran LCD avec python
Convertir des images en sépia avec PIL (Python Imaging Library)
[Jouons avec Python] Traitement d'image en monochrome et points
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
Convertir .ipynb en .html (avec BatchFile)
Python: comment utiliser async avec
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Lien pour commencer avec python
Convertir Markdown en PDF en Python
[Python] Ecrire dans un fichier csv avec Python
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python