Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-

Eine Geschichte über Bildverarbeitung und Graustufenkonvertierung nur durch Matrixberechnung, ohne sich auf die Bildverarbeitungsbibliothek zu verlassen. Auch mit Pythonista möglich

** Klicken Sie hier für Grundlagen **

Was ist ein "Neuerfinder"?

Anstatt mich auf Open CV oder Pillow zu verlassen, werde ich tatsächlich verschiedene Bildverarbeitungen mit numpy und matplotlib schreiben. Diese Kombination kann auch mit der iOS-App Pythonista verwendet werden.

import numpy as np
import matplotlib.pyplot as plt

Darüber hinaus sind die folgenden Funktionen zum Anzeigen von Bildern praktisch. (Einzelheiten finden Sie unter Grundlagen)

def img_show(img : np.ndarray, cmap = 'gray', vmin = 0, vmax = 255, interpolation = 'none') -> None:
    '''np.Zeigen Sie ein Bild mit Array als Argument an.'''
    
    #Setzen Sie dtype auf uint8
    img = np.clip(img,,vmin,vmax).astype(np.uint8)
    
    #Bild anzeigen
    plt.imshow(img, cmap = cmap, vmin = vmin, vmax = vmax, interpolation = interpolation)
    plt.show()
    plt.close()

Graustufen

Die Grauskalierung ist eine Methode zur Berechnung des Schwarz-Weiß-Werts Y aus den jedem Pixel zugewiesenen RGB-Werten. Hier Verschiedene Graustufenmethoden, die in [Basic] nicht behandelt wurden (http://qiita.com/secang0/items/1229212a37d8c9922901) ) Probiere auch. Eine ausführliche Erklärung finden Sie unter dem Link. Sie werden in derselben Reihenfolge behandelt.

Das verwendete Bild ist 'tiger.jpeg' tiger.jpeg

img = plt.imread('tiger.jpeg')
R, G, B = img[...,0], img[...,1], img[...,2]

Hier wird eine Funktion zum Vergleichen und Anordnen von Farbe und Schwarzweiß definiert.

def align_show(img_gray):
    #img_grau bis N.*M*In 3 konvertieren
    img_pseudogray = np.einsum('ij,k->ijk',img_gray,[1,1,1])

    #Seite an Seite anzeigen
    img_show(np.concatenate((img,img_pseudogray), axis = 1))

Zwischenwertmethode

$ \ rm Y = \ frac {\ max (R, G, B) + \ min (R, G, B)} {2} $. Es ist eine Methode. Kurz gesagt, der Durchschnitt der Maximal- und Minimalwerte. In der tatsächlichen Berechnung wird die Reihenfolge der Berechnung teilweise von der obigen Formel geändert, um einen Überlauf zu vermeiden.

img_mid_v = np.max(img, axis = 2)/2 +np.min(img, axis = 2)/2
img_show(img,img_mid_v)

mid_v.png

Auf den ersten Blick gibt es kein Problem, aber der Knopf (?) In der Mitte des Labyrinths ist schwer zu erkennen.

Methode der gewichteten Mittelung mit NTSC-Koeffizient

Dies ist eine Methode zum Setzen von $ \ rm Y = (0,298912 R + 0,586611 G + 0,114478 B) $. Diese Koeffizienten sind das Ergebnis der Berücksichtigung der Auswirkung (psychologische Gewichtung) jedes RGB auf das menschliche Auge.

img_ntsc = (0.298912 * R + 0.586611 * G + 0.114478 * B)
align_show(img_ntsc)

ntsc.png

Güte

Gewichtete Mittelung und Korrektur durch HDTV-Koeffizienten

$ \ rm Y = ((0,222015 R) ^ X + (0,706655 G) ^ X + (0,071330 B) ^ X) ^ {1 / X} $. Dies beinhaltet auch eine psychologische Gewichtung.

X = 2.2
img_hdtv = ((0.222015*R)**X + (0.706655*G)**X + (0.071330*B)**X)**(1/X)
align_show(img_hdtv)

hdtv.png

Es ist so anders, dass ich den Unterschied zur NTSC-Methode nicht erkennen kann.

Einfache Mittelungsmethode

Dies ist eine Methode, um den Durchschnitt von $ \ rm Y = \ frac {R + G + B} {3} $ zu ermitteln. Wahrscheinlich der intuitivste Weg. Es kann gesagt werden, dass es die NTSC-Methode ist, bevor der gewichtete Durchschnitt genommen wird.

img_mean = np.mean(img)
align_show(img_mean)

mean.png

G-Kanal-Methode

So rufen Sie nur den G-Kanal $ \ rm Y = G $ ab. Es scheint das schnellste zu sein.

img_g_channel = G
align_show(img_g_channel)

g_channel.png

Ich frage mich, ob der rote Teil etwas zu dunkel ist ...

Medianmethode

So ermitteln Sie den Medianwert von $ \ rm Y = Median (R, G, B) $. Ich bin der Meinung, dass die Idee der Zwischenwertmethode ähnlich ist.

img_median = np.median(img, axis = 2)
align_show(img_median)

median.png

Wie bei der Mittelwertmethode ist das Grün zu dunkel.

Zusammenfassung

Zwischenwert NTSC HDTV
Das Originalbild
Einfacher Durchschnitt G-Kanal Median

sumup.png

Recommended Posts

Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Bildverarbeitung mit Python (Pillow)
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Python-Bildverarbeitung
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung durch Python 100 Knock # 1 Kanalersatz
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
Analyse des Röntgenmikrotomographiebildes durch Python
Faltungsfilterung durch Matrix-Reinventor der Python-Bildverarbeitung-
Lineares Zeichnen mit einer Matrix-Originalforschung von einem Neuerfinder der Python-Bildverarbeitung-
Kommunikationsverarbeitung durch Python
Erste Python-Bildverarbeitung
Bildverarbeitung mit Python
Verschiedene Verarbeitung von Python
Bildverarbeitung? Die Geschichte, Python für zu starten
Bildverarbeitung mit Python 100 Knock # 11 Glättungsfilter (Durchschnittsfilter)
Bildverarbeitung mit Python (Teil 2)
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Affin-Konvertierung durch Matrix (Vergrößerung / Verkleinerung / Drehung / Scherung / Bewegung) - Erfinder der Python-Bildverarbeitung -
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
Nachbearbeitung von Python (NG)
Bildverarbeitungssammlung in Python
[Python] Bildverarbeitung mit Scicit-Image
Fehler geteilt durch 0 Verarbeitung von ZeroDivisionError 2
Bilderfassung von Firefox mit Python
Erweiterung des Python-Wörterbuchs um Argumente
Persönliche Notizen für die Python-Bildverarbeitung
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Verhalten von Python3 durch Sakuras Server
100 Sprachverarbeitung Knock Kapitel 1 von Python
Geschichte der Potenznäherung von Python
Bildverarbeitung mit Python 100 Knock # 4 Otsu-Binarisierung (Diskriminierungsanalyse-Methode)
Erklärung des Produktionsoptimierungsmodells durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Python: Grundlagen der Bilderkennung mit CNN
Socket-Kommunikation und Multithread-Verarbeitung durch Python
[Lernnotiz] Grundlagen des Unterrichts mit Python
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Bedingte Verzweigung von Python mit Chemoinfomatik gelernt
[Python] Berechnung der Bildähnlichkeit (Würfelkoeffizient)
Beispiel einer dreidimensionalen Skelettanalyse von Python
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Ändern Sie die Verarbeitung durch Benutzereingabe des Dialogs
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Die Geschichte der Verarbeitung A von Blackjack (Python)
Leichte Bildverarbeitung mit Python x OpenCV
Status jedes Python-Verarbeitungssystems im Jahr 2020
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
[Bildverarbeitung] Posterisierung
Extrahieren Sie die dominante Bildfarbe durch k-Mittel-Clustering
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an