Bildverarbeitung mit Python & OpenCV [Tonkurve]

Einführung

In diesem Artikel wird hauptsächlich die Bildverarbeitung mit ** Tonkurve ** vorgestellt. Das Lehrbuch hat Tonkurve, aber keinen Code ... Es kann für diejenigen sein, die sich fragen, welche Art von Code erreicht werden kann.

Wenn Sie Tone Curve nicht kennen und diesen Artikel lesen Es wäre schön, wenn Sie dies leicht durch "Einführung" von [] tc herausfinden könnten.

Tonwertkurve, Ausgabebild (Farbe, Graustufen), Konvertierungsfunktion Ich werde sie in der Reihenfolge von vorstellen.

Betriebsumgebung

Terminal: Windows 10
Konsole: cmd(Eingabeaufforderung)
python:3.6.8
Virtuelle Umgebung: venv

Inhaltsverzeichnis

Einführung

Es gibt zwei Eingabebilder wie folgt.

Farbe Graustufen
original.jpg grayScale.jpg

Ich habe OpenCVs "cv2.cvtColor ()" für die Grauskalierung verwendet.

Wie sich Farbbilder und Graustufenbilder ändern Ich werde es vorstellen.

Auch wenn der Rückgabewert von der Funktion von der Funktion cv2.imwrite () usw. gelesen wird. Sie können es speichern.

▷ Negative / positive Umkehrung

Invertieren Sie den Pixelwert wie der Name schon sagt. (* Daraus ergibt sich, dass * x * in der Formel der Pixelwert ist.)

f(x) = 255 - x

Tonwertkurve

nega_posi.png

Ausgabebild

input output
input output
input output
input output

Funktion

Konvertierungsfunktion


def negaPosi(frame):
    return 255 - frame

▷ Gefaltete lineare Tonkurve

Ich werde mit dem zuvor eingeführten Artikel behandelt ... Wenn Sie mehr Details sehen möchten, würde ich mich freuen, wenn Sie den Artikel lesen.

Hier wird die Tonkurve für n = 2 ausgegeben. (* N ist der Wert dafür, wie oft der Pixelwert multipliziert wird.)

◆ Gefaltete Linientyp-Tonkurve 1

Eine Konvertierung, die den Kontrast des Bildes erhöht.

f(x) = \begin{cases} 2 \cdot x & (x < 128) \\ 255 & (otherwise)
  \end{cases}

Tonwertkurve

tone_curve1.png

Ausgabebild

input output
input output
input output
input output

Funktion

Konvertierungsfunktion


def toneCurve1(frame, n = 1):
    look_up_table = np.zeros((256,1), dtype = 'uint8')
    for i in range(256):
        if i < 256 / n:
            look_up_table[i][0] = i * n
        else:
            look_up_table[i][0] = 255
    return cv2.LUT(frame, look_up_table)

◆ Gefaltete Linientonkurve 2

Dies ist eine Konvertierung, die den Kontrast in Bezug auf die Oberseite verringert.

f(x) = \begin{cases} 0 & (x < 128) \\ 2 \cdot x - 255 & (otherwise)
  \end{cases}

Tonwertkurve

tone_curve2.png

Ausgabebild

input output
input output
input output
input output

Funktion

Konvertierungsfunktion


def toneCurve2(frame, n = 1):
    look_up_table = np.zeros((256,1), dtype = 'uint8')
    for i in range(256):
        if i < 256 - 256 / n :
            look_up_table[i][0] = 0
        else:
            look_up_table[i][0] = i * n - 255 * (n - 1)
    return cv2.LUT(frame, look_up_table)

▷ S-förmige Tonkurve

Diese S-Ton-Kurve ist in hellen Bereichen heller Dunkle Bereiche sind Transformationen, die dunkler betonen.

f(x) = \frac {255}{2} \cdot \left\{\sin\left(\frac {x}{255} - \frac {1}{2}\right)\pi + 1\right\}

Tonwertkurve

s_tone_curve.png

Ausgabebild

input output
input output
input output
input output

Das Bild ist irgendwo klar.

Funktion

Konvertierungsfunktion


def sToneCurve(frame):
    look_up_table = np.zeros((256,1), dtype = 'uint8')
    for i in range(256):
        look_up_table[i][0] = 255 * (np.sin(np.pi * (i/255 - 1/2)) + 1) / 2
    return cv2.LUT(frame, look_up_table)

▷ Gamma-Konvertierungstonkurve

In der gestrichelten Linie geben Sie die Tonkurve früher ein Es gibt einen Teil, in dem die Schattierungsinformationen verloren gehen, nachdem sie in einen konstanten Wert (0, 255) konvertiert wurden. Bei der Gammakonvertierung kann die Konvertierung durchgeführt werden, während die Schattierungsinformationen dieses Teils erhalten bleiben.

f(x) = 255 \cdot \left(\frac {x}{255}\right)^\frac{1}{\gamma}

Tonwertkurve

Hier sind einige Muster von γ-Werten.

gamma_curve.png

Ausgabebild

input γ = 3 γ = 2
input output output
γ = 1 γ = 0.5 γ = 1 / 3
output output output
input γ = 3 γ = 2
input output output
γ = 1 γ = 0.5 γ = 1 / 3
output output output

Offensichtlich ist das Bild von γ = 1 und die Eingabe dasselbe.

Funktion

Konvertierungsfunktion


def gammaCurve(frame, gamma = 1):
    look_up_table = np.zeros((256,1), dtype = 'uint8')
    for i in range(256):
        look_up_table[i][0] = pow(i / 255, 1 / gamma) * 255
    return cv2.LUT(frame, look_up_table)

▷ Solarisation

Das Bild sieht aus wie eine Mischung aus negativen und positiven Bildern.

Die in meiner Solarisation verwendete Umrechnungsformel lautet wie folgt.

f(x) = \frac {255}{2} \cdot \sin\left\{3\pi\left(\frac {x}{255} - \frac {1}{2}\right)\right\}

Tonwertkurve

soralization.png

Ausgabebild

input output
input output
input output
input output

Funktion

Konvertierungsfunktion


def soralization(frame):
    look_up_table = np.zeros((256,1), dtype = 'uint8')
    for i in range(256):
        look_up_table[i][0] = (np.sin(3 * np.pi * (i / 255 + 1 / 2 )) + 1) * 255 / 2
    return cv2.LUT(frame, look_up_table)

▷ Posterisierung

Der Pixelwert wird allmählich konstant gemacht. Es wird ein malerisches Bild sein.

Als Ausgabe wird ein Muster ausgegeben, in dem der Pixelwert in 2, 3 und 4 Stufen unterteilt ist.

Tonwertkurve

posterization2.png posterization3.png
posterization.png posterization5.png

Ausgabebild

input step = 2
input output
step = 3 step = 4
output output
input step = 2
input output
step = 3 step = 4
output output

Es sieht aus wie eine Postkarte.

Funktion

Konvertierungsfunktion


def posterization(frame, step = 4):
    if 1 < step and step <= 256:
        look_up_table = np.zeros((256, 1), dtype = 'uint8')
        split = int(256 / (step - 1))
        up = int(256 / step)
        for i in range(256):
            if np.trunc(i / up) * split >= 255:
                look_up_table[i][0] = 255
            else:
                look_up_table[i][0] = np.trunc(i / up) * split
        return cv2.LUT(frame, look_up_table)
    else:
        return frame

Wahrscheinlich der schwierigste Teil bei der Entwicklung dieses Codes ... Wenn Sie einen besseren Weg haben, unterrichten Sie mich bitte.

▷ Binarisierung

Ab der Schwelle n ** Wert wenn klein 0 ist (Mindestwert) ** ** Eine Konvertierung, die den Wert ändert, wenn er groß ist, auf 255 (Maximalwert) **.

Ich habe es diesmal nicht verwendet, aber in der cv2-Bibliothek [Validierungsfunktion](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc /py_thresholding/py_thresholding.html). Es gibt "cv2.adaptiveThreshold ()" und "cv2.threshold ()".

f(x) = \begin{cases}
       0 & (x < n) \\ 255 &(otherwise)
\end{cases}

Tonwertkurve

Diesmal ist die Ausgabe für den Fall, dass der Schwellenwert n = {50, 128, 200} ist.

thre_50.png thre_128.png thre_200.png

Ausgabebild

input n = 50
input output
n = 128 n = 200
output output
input n = 50
input output
n = 128 n = 200
output output

Funktion

Konvertierungsfunktion


def threshold(frame, threshold_v = 50):
    frame[frame < threshold_v] = 0
    frame[frame >= threshold_v] = 255
    return frame

Hauptfunktion

ex.py


import cv2
import numpy as np

#Funktionen(Kürzung)

def main():
    img_path = '.\\image\\castle.jpg' #Geben Sie das Bild beliebig an
    img = cv2.imread(img_path)
    frame = grayScale(img)
    #Funktion aufrufen,Bitte üben.
    #Beispiel:
    # cv2.imwrite('tone_changed.jpg', negaPosi(img))

if __name__ == '__main__':
    main()

abschließend

Dieses Mal habe ich die Gradationskonvertierung durch einige Tonkurven eingeführt. Als nächstes denke ich daran, die Bildverarbeitung mit Filtern durchzuführen.

Sie können eine Benutzeroberfläche hinzufügen, um sie praktischer zu gestalten.

Dann: Welle:

Referenz

In Verbindung stehender Artikel

Recommended Posts

Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python
Leichte Bildverarbeitung mit Python x OpenCV
"Apple-Verarbeitung" mit OpenCV3 + Python3
Bildbearbeitung mit Python OpenCV
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Finden Sie Bildähnlichkeit mit Python + OpenCV
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Python-Bildverarbeitung
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Bildaufnahme von der Kamera mit Python + OpenCV
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Bildverarbeitung mit Lambda + OpenCV (graue Bilderzeugung)
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Bildverarbeitung mit MyHDL
Binarisierung mit OpenCV / Python
Erste Python-Bildverarbeitung
Bildverarbeitung mit PIL
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung mit Python Environment Setup für Windows
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
100 Sprachverarbeitungsklopfen mit Python 2015
Bildverarbeitung mit PIL (Pillow)
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Kameraerfassung mit Python + OpenCV
Akustische Signalverarbeitung mit Python (2)
[Python] Verwenden von OpenCV mit Python (Basic)
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Sortieren von Bilddateien mit Python (3)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Gesichtserkennung mit Python + OpenCV
Bildverarbeitung mit Python (Pillow)
[Python] Kurvenanpassung mit Polypolyse
Bildverarbeitungssammlung in Python
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Holen Sie sich Bildfunktionen mit OpenCV
Verwenden von OpenCV mit Python @Mac
Bilderkennung mit Keras + OpenCV
Fügen Sie mit Python / OpenCV PNG mit Alphakanal als transparentes Bild ein
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen
Leuchtendes Leben mit Python und OpenCV
Schneiden Sie ein Bild mit Python aus