[PYTHON] [Traitement d'image] Postérisation

1. Vue d'ensemble

Présentation de "Postérisation", la technologie de base du traitement d'image. La postérisation est une conversion utilisant une courbe de ton sur un escalier et est une méthode pour limiter la valeur du pixel de sortie à plusieurs niveaux.

Comme le montre la figure ci-dessous, définissez la valeur de pixel de l'image d'entrée sur n niveaux (4 niveaux dans la figure ci-dessous) pour limiter la valeur de pixel de l'image de sortie. Ce faisant, les frontières deviennent plus claires et vous pouvez exprimer des couleurs comme l'art.

La postérisation est un livre ["Digital Image Processing"](https://www.amazon.co.jp/%E3%83%87%E3%82%A3%E3%82%B8%E3%82%BF%E3% 83% AB% E7% 94% BB% E5% 83% 8F% E5% 87% A6% E7% 90% 86-% E6% 94% B9% E8% A8% 82% E7% AC% AC% E4% BA % 8C% E7% 89% 88-% E3% 83% 87% E3% 82% A3% E3% 82% B8% E3% 82% BF% E3% 83% AB% E7% 94% BB% E5% 83% 8F% E5% 87% A6% E7% 90% 86% E7% B7% A8% E9% 9B% 86% E5% A7% 94% E5% 93% A1% E4% BC% 9A / dp / 490347464X / ref = asc_df_490347464X /? tag = jpgo-22 & linkCode = df0 & hvadid = 342595526565 & hvpos = & hvnetw = g & hvrand = 5492134153117811443 & hvpone = & hvphyptwo = & hvqmt = & hvphyptwo = & hvqmt = & hvvd hvccm = & hvvd hvdl = hvqmt = & hvvdhvl = 19 Il suit la méthode de traitement utilisée. Puisque la courbe de tonalité qui laisse les valeurs de pixel 0 et 255 dans l'image traitée est utilisée, l'image a un contraste net.

posterization.jpg

2. Environnement

L'environnement dans lequel le processus de postérisation a été essayé est le suivant.

Python 3.6.8 numpy 1.18.1 matplotlib 3.1.2 opencv-python 4.1.2.30

Étant donné qu'OpenCV est utilisé dans la bibliothèque, veuillez l'installer à l'avance.

pip install opencv-python

3. Code

En examinant divers sites sur la postérisation, de nombreux sites ont utilisé des LUT qui ne reflètent pas le blanc avec une valeur de pixel de 255 dans l'image de sortie.

Dans ce processus, la valeur de pixel de 255 "blanc" est également reflétée dans l'image de sortie, j'ai donc conçu une création de LUT. L'entrée et la sortie des bacs sont séparées, mais veuillez vous référer à la section commentaire du code pour plus de détails.

posterization.py


#coding: utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt

def main():
    img = cv2.imread('image.jpg')                   #Chargement des images
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)    #Échelle de gris
    n = 4                                           #Nombre de divisions de la valeur de pixel

    pos = posterization(gray, n)
    cv2.imwrite('pos.jpg', pos)          #Sortie d'image postérisée

def posterization(img, n):
    x = np.arange(256)                   #0,1,2...Un tableau d'entiers jusqu'à 255

    ibins = np.linspace(0, 255, n+1)     #L'entrée de LUT est 255/(n+1)Split avec
    obins = np.linspace(0,255, n)        #La sortie de LUT est 255/Divisé par n

    num=np.digitize(x, ibins)-1          #Numérotez les valeurs de pixel d'entrée à postériser
    num[255] = n-1                       #Corrigez le nombre de valeur de pixel 255 qui est désactivé par le traitement de numérisation

    y = np.array(obins[num], dtype=int)   #Créer une LUT postérisante
    pos_LUT(n, y)                         #Créer un diagramme LUT
    pos = cv2.LUT(img, y)                 #Effectuer la postérisation

    return pos

#Création de diagramme LUT de postérisation
def pos_LUT(n, y):
    x = np.arange(0,256,1)
    plt.plot(x,y)
    plt.savefig("pos_LUT.png ")

if __name__=='__main__':
    main()

4. Références

★ Livres ・ [Traitement d'image numérique [Deuxième édition révisée](Association d'intérêt public Incorporated Foundation Image Information Education Promotion (CG-ARTS))] [0] [0]:https://www.amazon.co.jp/%E3%83%87%E3%82%A3%E3%82%B8%E3%82%BF%E3%83%AB%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86-%E6%94%B9%E8%A8%82%E7%AC%AC%E4%BA%8C%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B8%E3%82%BF%E3%83%AB%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E7%B7%A8%E9%9B%86%E5%A7%94%E5%93%A1%E4%BC%9A/dp/490347464X/ref=asc_df_490347464X/?tag=jpgo-22&linkCode=df0&hvadid=342595526565&hvpos=&hvnetw=g&hvrand=5492134153117811443&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009247&hvtargid=pla-889374643658&psc=1&th=1&psc=1

★ Site ・ [OpenCV - Comment utiliser cv2.LUT, correction gamma, inversion négative / positive, postérisation] [1] [1]:https://pystyle.info/opencv-tone-transform/#outline__6 ・ [Comment utiliser numériser (numpy)] [2] [2]:http://arduinopid.web.fc2.com/Q3-36.html

Recommended Posts

[Traitement d'image] Postérisation
traitement d'image python
Traitement d'image 100 coups ①
Traitement d'image avec MyHDL
Premier traitement d'image Python
Lire le traitement d'image numérique
Traitement d'image avec Python
Traitement d'image avec PIL
Traitement d'image avec Python (partie 2)
opencv-python Introduction au traitement d'image
Traitement d'image avec PIL (Pillow)
Traitement d'image numérique (filtrage spatial)
100 coups sur le traitement d'image !! (011-020) Début de partie
100 coups sur le traitement d'image !! (001 --010) Soigneusement et soigneusement
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
Traitement d'image par python (Pillow)
Collection de traitement d'image en Python
Traitement de l'expansion et de la contraction de l'image
[Python] Traitement d'image avec scicit-image
Principes de base du traitement d'image en temps réel avec opencv
Notes personnelles pour le traitement d'images python
Traitement d'image avec la binarisation Python 100 knocks # 3
Traitement d'image 100 coups Q9, Q10 (filtre) speedup
Grattage écologique grâce au traitement d'image
100 traitement d'image par Python Knock # 2 Échelle de gris
Traitement d'image | prédire les espèces à partir d'images
Bases du traitement d'images binarisées par Python
Traitement d'image par Python 100 knock # 10 filtre médian
Traitement d'image par le remplacement du canal Python 100 Knock # 1
Créer une visionneuse de traitement d'image avec PySimpleGUI
100 traitement d'image avec Python Knock # 8 Max Pooling
Échelle de gris par matrice-Reinventor of Python image processing-
Traitement d'image avec Python et OpenCV [Tone Curve]
Traitement d'image par Python 100 knock # 12 motion filter
Traitement d'image par Python 100 Knock # 6 Traitement de réduction de couleur
Suppression du bruit de l'image
Dessin avec Matrix-Reinventor of Python Image Processing-
Traitez facilement des images en Python avec Pillow
Reconnaissance d'image
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Traitement d'image 100 coups Q.6. Explication du traitement de réduction de couleur
Explorateur d'images
Traitement d'image léger avec Python x OpenCV
Traitement d'image avec Lambda + OpenCV (création d'image grise)
Filtrage par convolution par matrice-Reinventor of Python image processing-
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
XavierNX accélère le traitement d'image OpenCV avec GPU (CUDA)
(Traitement d'image) Petit Thinning - Filtre qui effectue un traitement d'éclaircissage lâche
Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Traitement d'image? L'histoire du démarrage de Python pour
Traitement d'image avec la configuration de l'environnement Python pour Windows
Comment utiliser la bibliothèque de traitement d'image basée sur PyTorch "Kornia"
Traitement d'image par filtre de lissage Python 100 knock # 11 (filtre moyen)
Emballez le logiciel de traitement japonais dans une image Docker