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.
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
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()
★ 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