Üben Sie dies, um die technischen Möglichkeiten der Bildvorverarbeitung zu verbessern 100 Klopfen für die Bildverarbeitung !! Ich werde es mit Colaboratory machen, damit es einfach ist, loszulegen. Wir werden daran arbeiten, das Ziel in zwei Wochen zu erreichen. Ich werde es sorgfältig erklären. Bitte stellen Sie eine Frage!
Eingeführte Bibliotheken usw. wie folgt.
python
#Bibliothek importieren
from google.colab import drive
import numpy as np
import matplotlib.pyplot as plt
import cv2
from google.colab.patches import cv2_imshow
#Laden von Bildern
img = cv2.imread('Bildpfad/imori.jpg')
img_noise = cv2.imread('Bildpfad/imori_noise.jpg')
#Zur Bildspeicherung
OUT_DIR = 'Zielpfad ausgeben/OUTPUT/'
Laden Sie das Bild und ersetzen Sie RGB in BGR-Reihenfolge. Mit dem folgenden Code können Sie die rote Komponente des Bildes extrahieren. Beachten Sie, dass in der Funktion cv2.imread () die Kanäle in der Reihenfolge BGR liegen! Dadurch wird nur die rote Komponente von imori.jpg in die Variable rot eingefügt.
A1
#OpenCV-Funktion cvtColor()Konvertieren Sie BGR und RGB mit
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans1_a.jpg', img1)
#Bild anzeigen
cv2_imshow(img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: cvtColor, das BGR und RGB mit Python, OpenCV konvertiert
Machen Sie das Bild grau. Graustufen sind eine Art Ausdrucksmethode für die Bildhelligkeit und werden nach der folgenden Formel berechnet. Y = 0.2126 R + 0.7152 G + 0.0722 B
A2
#OpenCV-Funktion cv2.cvtColor(), cv2.COLOR_Konvertieren Sie mit BGR2GRAY
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans2_.jpg', img2)
#Bild anzeigen
cv2_imshow(img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: Farbbild mit Python, OpenCV, NumPy in Schwarzweiß (Graustufen) konvertieren
Binarisieren Sie das Bild. Die Binarisierung ist eine Methode zum Ausdrücken eines Bildes mit zwei Werten, Schwarz und Weiß. Hier wird der Schwellenwert in der Graustufe auf 128 gesetzt und durch die folgende Gleichung binärisiert.
A3
#Bild(Graustufen)Kopie von
img3 = img2.copy()
#Schwellenwert einstellen
threshold = 128
#Binarisierung(Die Anzahl der Pixel, die den Schwellenwert 128 überschreiten, wird auf 255 eingestellt.)
ret, img3 = cv2.threshold(img3, threshold, 255, cv2.THRESH_BINARY)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans3_.jpg', img3)
#Bild anzeigen
cv2_imshow(img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: Variation des OpenCV-Bildes Referenz: Bildschwellenwertverarbeitung
Implementieren Sie die Binärisierung von Otsu. Die Binärisierung von Otsu wird als Diskriminanzanalyseverfahren bezeichnet, bei dem die Trennungsschwelle bei der Binärisierung automatisch bestimmt wird. Dies wird aus dem Verhältnis der Verteilung innerhalb der Klasse zur Verteilung zwischen den Klassen berechnet.
A4
#In OpenCV implementiert
#Bild(Graustufen)Kopie von
gray = img2.copy()
#Otsus Binarisierungsprozess
ret, image4 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans4.jpg', img4)
#Bild anzeigen
cv2_imshow(img4)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: [Python / OpenCV] Binarisierungsprozess unter Verwendung der Otsu-Methode
Implementieren Sie die HSV-Konvertierung, um den Farbton H zu invertieren. Die HSV-Konvertierung ist eine Methode zum Ausdrücken von Farben mit Farbton (Farbton), Sättigung (Sättigung) und Wert (Helligkeit). Farbton ... Drückt den Farbton von 0 bis 360 Grad aus und gibt die Art der Farbe an, z. B. Rot oder Blau. (0 <= H <360) Der Farbton entspricht den folgenden Farben. Rot Gelb Grün Hellblau Blau Lila Rot 0 60 120 180 240 300 360 Sättigung ... Lebendigkeit der Farbe. Wenn die Sättigung niedrig ist, macht sich die graue Farbe bemerkbar und die Farbe wird matt. (0 <= S <1) Wert ... Farbhelligkeit. Je höher der Wert, desto näher an Weiß und je niedriger der Wert, desto näher an Schwarz. (0 <= V <1)
A5
#Kopieren Sie das Bild
img5 = img.copy()
# RGB ->Zum HSV konvertieren
hsv = cv2.cvtColor(img5, cv2.COLOR_BGR2HSV)
#Fügen Sie 180 zu Farbton hinzu
hsv[..., 0] = (hsv[..., 0] + 180) % 360
# HSV ->In RGB konvertieren
img5 = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans5.jpg', img5)
#Bild anzeigen
cv2_imshow(img5)
cv2.waitKey(0)
cv2.destroyAllWindows()
Aus irgendeinem Grund unterscheidet es sich geringfügig vom Antwortbild. Bitte lassen Sie mich wissen, wenn Sie einen Fehler machen
Referenz: [Python / OpenCV] Konvertieren von RGB in HSV (cv2.cvtColor)](https://algorithm.joho.info/programming/python/opencv-rgb-to-hsv-color-space/)
Reduzieren Sie hier die Bildwerte von 256 ^ 3 auf 4 ^ 3, dh R, G, B in {32, 96, 160, 224}. Dies ist eine Quantisierungsoperation. Jeder Wert ist wie folgt definiert.
A6
def decrease_color(img):
"""
R,G,Setzen Sie B auf 256 und setzen Sie einen Wert auf 4.
[0, 64), [64, 128), [128, 192), (192, 256)In 4 gleiche Teile teilen *[]: Geschlossener Abschnitt(Oberhalb und unterhalb), (): Abschnitt öffnen(Groß oder klein)
[0, 64)->32, [64, 128)->96, [128, 192)->160, (192, 256) ->Konvertieren Sie jeden Bereich in 2224
parameters
-------------------------
param: numpy.Bild im ndarray-Format
returns
-------------------------
numpy.ndarray-Format Konvertieren Sie wie rechts gezeigt[132 80 67] >>> [160 96 96]
"""
#Kopiere das Bild
out = img.copy()
print(out)
# 256/4 =Da es 64 ist, wird es durch 64 geteilt+32 durch 32, 96, 160,In 224 konvertieren
out = out // 64 * 64 + 32
return out
img6 = img.copy()
img6 = decrease_color(img6)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans6.jpg', img6)
#Bild anzeigen
cv2_imshow(img6)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: Irgendwie Blog
Hier wird das Bild in Gitter unterteilt (in bestimmte Bereiche fester Länge unterteilt), und die Werte im Bereich werden mit dem Durchschnittswert im Bereich (Zelle) gefüllt. Der Vorgang, das Gitter auf diese Weise zu teilen und den repräsentativen Wert in dem Bereich zu finden, wird als Pooling bezeichnet. Diese Pooling-Operationen spielen eine wichtige Rolle in CNN (Convolutional Neural Network).
A7
def average_pooling(img, G=8):
"""
Durchschnittliches Pooling
parameters
-------------------------
param1: numpy.Bild im ndarray-Format
param2:Gitteraufteilung in 8x8
returns
-------------------------
Durchschnittliche gepoolte Anzahl.Bild im ndarray-Format
"""
#Kopiere das Bild
out = img.copy()
# H(Bildhöhe), W(Bild breite), C(Farbe)Erhalten
H, W, C = img.shape
#Netzaufteilung
Nh = int(H / G)
Nw = int(W / G)
#Durchschnittliches Pooling für jeden 8-teiligen Bereich
for y in range(Nh):
for x in range(Nw):
for c in range(C):
out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)
return out
#Durchschnittliches Pooling
img7 = average_pooling(img)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans7.jpg', img7)
#Bild anzeigen
cv2_imshow(img7)
cv2.waitKey(0)
cv2.destroyAllWindows()
Poolen Sie hier mit dem Maximalwert anstelle des Durchschnittswerts.
A8
def max_pooling(img, G=8):
"""
Maximales Pooling
parameters
-------------------------
param1: numpy.Bild im ndarray-Format
param2:Gitteraufteilung in 8x8
returns
-------------------------
Maximale gepoolte Anzahl.Bild im ndarray-Format
"""
#Kopiere das Bild
out = img.copy()
# H(Bildhöhe), W(Bild breite), C(Farbe)Erhalten
H, W, C = img.shape
#Netzaufteilung
Nh = int(H / G)
Nw = int(W / G)
#Durchschnittliches Pooling für jeden 8-teiligen Bereich
for y in range(Nh):
for x in range(Nw):
for c in range(C):
out[G*y:G*(y+1), G*x:G*(x+1), c] = np.max(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)
return out
#Maximales Pooling
img8 = average_pooling(img)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans8.jpg', img8)
#Bild anzeigen
cv2_imshow(img8)
cv2.waitKey(0)
cv2.destroyAllWindows()
Implementieren Sie einen Gaußschen Filter (3x3, Standardabweichung 1.3), um Rauschen in imori_noise.jpg zu entfernen. Der Gaußsche Filter ist eine Art Filter, der das Bild glättet (glättet) und auch zur Rauschentfernung verwendet wird. Andere Rauschentfernungsmethoden umfassen einen Medianfilter (Q.10), einen Glättungsfilter (Q.11) und einen LoG-Filter (Q.19). Das Gaußsche Filter glättet die peripheren Pixel des interessierenden Pixels durch Gewichtung mit einer Gaußschen Verteilung und wird durch die folgende Gleichung definiert. Solche Gewichte werden als Kernel oder Filter bezeichnet. Da die Bildränder jedoch nicht so gefiltert werden können, wie sie sind, wird der Teil mit unzureichenden Pixeln mit 0 gefüllt. Dies wird als 0-Auffüllung bezeichnet. Und die Gewichte sind normalisiert. (Summe g = 1)
A9
#Von OpenCV verarbeitet
# cv2.GaussianBlur(src, ksize, sigmaX)
# src:Bild eingeben, ksize:Kernelgröße, sigmaX:Gaußsches Verteilungssigma_x
img9 = cv2.GaussianBlur(img_noise, ksize=(3, 3), sigmaX=1.3)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans9.jpg', img9)
#Bild anzeigen
cv2_imshow(img9)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: [Python / OpenCV] Verwischen / Glätten mit Gauß-Filter
Implementieren Sie einen Medianfilter (3x3), um Rauschen aus imori_noise.jpg zu entfernen. Ein Medianfilter ist eine Art Filter, der ein Bild glättet. Dies ist ein Filter, der den Medianwert (Medianwert) im 3x3-Bereich des interessierenden Pixels ausgibt. Dies ist auch keine Polsterung.
A10
#Von OpenCV verarbeitet
"""
cv2.medianBlur(src, ksize)
src Eingabebild
Kernelgröße des Kernelfilters (nahe 8, wenn 3)
"""
#Medianfilter
img10 = cv2.medianBlur(img_noise, ksize=3)
#Speichern Sie das Ergebnis
cv2.imwrite(OUT_DIR + 'ans10.jpg', img10)
#Bild anzeigen
cv2_imshow(img10)
cv2.waitKey(0)
cv2.destroyAllWindows()
Referenz: [Python / OpenCV] Entfernen von Unschärfe / Glätten / Rauschen mit Medianfilter
Die Vorverarbeitung ist beim maschinellen Lernen wichtig. Wenn Sie die Methode nicht kennen, werden Sie keine Ideen haben, daher lohnt sich die Mühe. Das Klopfformat erleichtert die Bearbeitung
Recommended Posts