[PYTHON] [Bildverarbeitung] Posterisierung

1. Übersicht

Einführung von "Posterization", der Grundtechnologie der Bildverarbeitung. Die Posterisierung ist eine Konvertierung unter Verwendung einer Tonkurve auf einer Treppe und eine Methode zum Begrenzen des Ausgabepixelwerts auf mehrere Ebenen.

Stellen Sie wie in der folgenden Abbildung gezeigt den Pixelwert des Eingabebilds auf n Ebenen (4 Ebenen in der folgenden Abbildung) ein, um den Pixelwert des Ausgabebilds zu begrenzen. Auf diese Weise werden die Ränder klarer und Sie können Farben wie Kunst ausdrücken.

Posterization ist ein Buch ["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 = & hvptwo = & hvqmt = & hvdev = hv = hl = Es folgt der verwendeten Verarbeitungsmethode. Da die Tonkurve verwendet wird, die die Pixelwerte 0 und 255 im verarbeiteten Bild belässt, weist das Bild einen klaren Kontrast auf.

posterization.jpg

2. Umwelt

Die Umgebung, in der der Posterisierungsprozess versucht wurde, ist wie folgt.

Python 3.6.8 numpy 1.18.1 matplotlib 3.1.2 opencv-python 4.1.2.30

Da OpenCV in der Bibliothek verwendet wird, installieren Sie es bitte im Voraus.

pip install opencv-python

3. Code

Bei der Betrachtung verschiedener Websites zur Posterisierung verwendeten viele Websites LUTs, die kein Weiß mit einem Pixelwert von 255 im Ausgabebild reflektieren.

Dieser Prozess spiegelt auch den Pixelwert 255 "Weiß" im Ausgabebild wider, daher habe ich eine LUT-Erstellung entwickelt. Die Eingabe und Ausgabe von Bins sind getrennt. Weitere Informationen finden Sie im Kommentarbereich des Codes.

posterization.py


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

def main():
    img = cv2.imread('image.jpg')                   #Bilder laden
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)    #Graustufen
    n = 4                                           #Anzahl der Teilungen des Pixelwerts

    pos = posterization(gray, n)
    cv2.imwrite('pos.jpg', pos)          #Ausgabe des posterisierten Bildes

def posterization(img, n):
    x = np.arange(256)                   #0,1,2...Ein Array von ganzen Zahlen bis zu 255

    ibins = np.linspace(0, 255, n+1)     #Die Eingabe von der LUT ist 255/(n+1)Teilen mit
    obins = np.linspace(0,255, n)        #Die Ausgabe von LUT beträgt 255/Geteilt durch n

    num=np.digitize(x, ibins)-1          #Nummerieren Sie die zu posterisierenden Eingabepixelwerte
    num[255] = n-1                       #Korrigieren Sie die Anzahl der Pixelwerte 255, die deaktiviert sind, indem Sie die Verarbeitung digitalisieren

    y = np.array(obins[num], dtype=int)   #Erstellen Sie eine Posterisierungs-LUT
    pos_LUT(n, y)                         #Erstellen Sie ein LUT-Diagramm
    pos = cv2.LUT(img, y)                 #Posterisierung durchführen

    return pos

#Posterization LUT-Diagrammerstellung
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. Referenzen

★ Bücher ・ [Digitale Bildverarbeitung [Überarbeitete 2. Auflage](CG-ARTS (Public Interest Incorporated Foundation) (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

★ Website ・ [OpenCV - Verwendung von cv2.LUT, Gammakorrektur, negative / positive Inversion, Posterisierung] [1] [1]:https://pystyle.info/opencv-tone-transform/#outline__6 ・ [Verwendung der Digitalisierung (numpy)] [2] [2]:http://arduinopid.web.fc2.com/Q3-36.html

Recommended Posts

[Bildverarbeitung] Posterisierung
Python-Bildverarbeitung
Bildverarbeitung 100 Schläge ①
Bildverarbeitung mit MyHDL
Erste Python-Bildverarbeitung
Lesen Sie die digitale Bildverarbeitung
Bildverarbeitung mit Python
Bildverarbeitung mit PIL
Bildverarbeitung mit Python (Teil 2)
opencv-python Einführung in die Bildverarbeitung
Bildverarbeitung mit PIL (Pillow)
Digitale Bildverarbeitung (räumliche Filterung)
100 Schläge bei der Bildverarbeitung !! (011-020) Frühes Spiel
100 Klopfen bei der Bildverarbeitung !! (001 - 010) Vorsichtig und vorsichtig
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
Bildverarbeitung mit Python (Pillow)
Bildverarbeitungssammlung in Python
Bildausdehnung und Kontraktionsverarbeitung
[Python] Bildverarbeitung mit Scicit-Image
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Persönliche Notizen für die Python-Bildverarbeitung
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Bildverarbeitung 100 Klopfen Q9, Q10 (Filter) Beschleunigung
Umweltfreundliches Scraping mit Bildverarbeitung
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Bildverarbeitung | Vorhersage von Arten aus Bildern
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Bildverarbeitung durch Python 100 Knock # 1 Kanalersatz
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
Entfernung von Bildrauschen
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Bilderkennung
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Bildverarbeitung 100 Klopfen Q.6. Erklärung der Farbreduktionsverarbeitung
Bildcrawler
Leichte Bildverarbeitung mit Python x OpenCV
Bildverarbeitung mit Lambda + OpenCV (graue Bilderzeugung)
Faltungsfilterung durch Matrix-Reinventor der Python-Bildverarbeitung-
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
XavierNX beschleunigt die OpenCV-Bildverarbeitung mit GPU (CUDA)
(Bildverarbeitung) Petit Thinning - Filter, der eine lose Ausdünnung durchführt
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung? Die Geschichte, Python für zu starten
Bildverarbeitung mit Python Environment Setup für Windows
Verwendung der PyTorch-basierten Bildverarbeitungsbibliothek "Kornia"
Bildverarbeitung mit Python 100 Knock # 11 Glättungsfilter (Durchschnittsfilter)
Packen Sie japanische Verarbeitungssoftware in ein Docker-Image