Dies ist eine Fortsetzung des folgenden Artikels (ich möchte etwas machen, weil es nur Eingabeartikel gibt ...)
https://qiita.com/tom_S/items/b85aee14f34dcc856e54
Es ist möglich, die Verteilung der Pixelwerte auszudrücken, z. B. ob das Bild viel Rot oder viel Blau enthält.
Das Programm, das ein Histogramm der RGB-Werte als Grafik anzeigt, ist unten dargestellt.
import cv2
import matplotlib.pyplot as plt #Bibliothek für Bilddiagramme
%matplotlib inline #Bibliothek für Bilddiagramme
img = cv2.imread("Bilddateipfad hier")
color_list = ["blue", "green","red"]
for i,j in enumerate(color_list):
hist = cv2.calcHist([img],[i],None,[256],[0,256]) # blue, green,Berechnen Sie in der Reihenfolge von Rot
plt.plot(hist,color= j)
Ferner kann durch Gleichförmigkeit des Histogramms der helle Teil heller und der dunkle Teil dunkler gemacht werden. Vereinheitlichen Sie das Histogramm, indem Sie die Funktion EqualizeHist wie folgt aufrufen:
import cv2
img = cv2.imread("Bilddateipfad hier")
img_eq = cv2.equalizeHist(img) # img_Ein Bild mit einem uniformierten Histogramm ist in Gl
Grob gesagt wird die Methode zum Ändern der Helligkeit eines Bildes als Gammakonvertierung bezeichnet. Die Konvertierung wird unter Verwendung einer Gammatabelle (Nachschlagetabelle) wie der folgenden Formel durchgeführt. Wenn der Wert von r größer als 1 ist, wird er heller und wenn er kleiner als 1 ist, wird er dunkler.
y = 255* (x/255)^(1/r)
Der Quellcode wird unten angezeigt. (Die Erklärung der Nachschlagetabelle wird weggelassen)
import cv2
import numpy as np
gamma = 1.5 #R in der obigen Gleichung
img = cv2.imread("Bilddateipfad hier")
gamma_cvt = np.zeros((256,1), dtype= np.uint8)
for i in range(256):
gamma_cvt[i][0] = 255 * (float(i)/255) ** (1.0/gamma)
img_gamma = cv2.LUT(img, gamma_cvt) #img_Das Bild nach der Gammakonvertierung wird in Gamma eingegeben
Ich denke, es ist schwer zu verstehen, welche Art von Wirkung es hat, deshalb werde ich einen Link zu einer Site einfügen, die unten hilfreich zu sein scheint. http://peaceandhilightandpython.hatenablog.com/entry/2016/02/05/004445
Die Affinitätskonvertierung ist eine Kombination aus Bewegungen, die ein Bild durch Kombination von paralleler Bewegung und Rotation bewegen, und Konvertierung (Scherverformung), die ein Rechteck in ein paralleles Viereck verwandelt. Die Affinitätskonvertierung wird durch Ausführen einer Matrixberechnung durchgeführt.
Da es notwendig ist, die Matrizen für die parallele Bewegung zu summieren, fügen Sie der Matrix homogene Koordinaten hinzu, um die lineare Transformation zu reduzieren, und erstellen Sie eine Transformationsmatrix, um einen Ausdruck zwischen einseitigen Begriffen zu erstellen. Zeigt den Quellcode für parallele Bewegung und Drehung an
import cv2
import numpy as np
img = cv2.imread("Bilddateipfad hier")
h,w = img.shape[:2]
dx,dy = 30,30
afn_mat = np.float32([[1,0,dx],[0,1,dy]]) #Nur parallele Bewegung. Vertikal und horizontal um 30 verschieben
img_afn = cv2.warpAffine(img, afn_mat,(w,h)) # img_Das Bild nach paralleler Bewegung wird in afn eingegeben
import cv2
import numpy as np
img = cv2.imread("Bilddateipfad hier")
h,w = img.shape[:2]
rot_mat = cv2.getRotationMatrix2D((w/2,h/2),40,1) # (Koordinaten des rotierenden Zentrums,Drehwinkel,Bildmaßstab(1 ist gleich groß))geben
img_afn2 = cv2.warpAffine(img, rot_mat,(w,h)) # img_Das Bild nach der Drehung ist in afn enthalten
Das Aktualisieren Ihres eigenen Pixelwerts unter Verwendung von Umgebungsinformationen wird als Faltung bezeichnet.
Bereiten Sie einen Filter vor
Führen Sie "(Pixelwert) x (Filter)" um das interessierende Pixel herum aus und fügen Sie es hinzu (dies wird als Falten bezeichnet).
Auf alle Pixel legen und falten
Der Pixelwert wird aus den Umgebungsinformationen berechnet und Rauschen wird entfernt. Der Quellcode wird unten angezeigt
import cv2
import numpy as np
kernel = np.ones((3,3)) /9.0 #Filter zum Falten verwendet
img = cv2.imread("Bilddateipfad hier", 0)
img_kel = cv2.filter2D(img, -1, kernel) #Streit "-1 "ist das Originalbild(img)Mittel zur Rückkehr.Falten (Glätten)
Vertikale Kanten können durch Differenzieren erkannt werden. Ein Beispiel für einen Quellcode ist unten dargestellt.
import cv2
import numpy as np
kernel2 = np.zeros((3,3))
kernel2[0,0] = 1
kernel2[1,0] = 2
kernel2[2,0] = 1
kernel2[0,2] = -1
kernel2[1,2] = -2
kernel2[2,2] = -1
img = cv2.imread("Bilddateipfad hier", 0)
img_ke2 = cv2.filter2D(img, -1,kernel2) #Sobel Filter
--Lineare Transformation
Ein Filter, der die gesamte Oberfläche gleichmäßig glättet und verwischt. Der Quellcode wird unten angezeigt.
import cv2
img = cv2.imread("Bilddateipfad hier")
img_blur = cv2.blur(img, (3,3)) #Glättungsfilter
img_ga = cv2.GaussianBlur(img,(9,9), 2) #2 ist der Verteilungswert. Je größer dieser Wert ist, desto unschärfer wird er(Gaushan)
img_me = cv2.medianBlur(img, 5) #Schreiben Sie mit dem häufigsten Wert um(Verschwommen)Medianfilter
Es gibt einen bilateralen Filter für die nichtlineare Konvertierung. Dies dient dazu, den Teil zu verlassen, in dem die Helligkeitsänderung drastisch ist, und den Teil zu glätten, in dem die Helligkeitsänderung allmählich erfolgt. Der Quellcode wird unten angezeigt.
import cv2
img = cv2.imread("Bilddateipfad hier")
img_bi = cv2.bilateralFilter(img,20,30,30)
Eine Operation, die aus Expansion und Kontraktion besteht. Sie wird verwendet, um Bilder durch Kontraktion zu trennen und durch Expansion zu integrieren. Darüber hinaus kann Lärm durch Zusammenziehen und Ausdehnen beseitigt werden. Der Quellcode wird unten angezeigt.
import cv2
img = cv2.imread("Bilddateipfad hier")
ret, img_th = cv2.threshold(img, 110, 255, cv2.THRESH_BINARY) #Binarisierung
kernel = np.ones((3,3),dtype = np.uint8) #Wenn es Weiß in der Nähe von 8 gibt, wird es weiß sein, wenn es viel Schwarz gibt, wird es schwarz sein
img_d = cv2.dilate(img_th, kernel)
img_e = cv2.erode(img_th,kernel)
img_c = cv2.morphologyEx(img_th,cv2.MORPH_CLOSE, kernel) # img_Das Bild nach der Berechnung wird in c eingegeben
# MORPH_CLOSE:Führt nach der Erweiterung einen Vertragsprozess durch
# (MORPH_Durch Angabe von OPEN ist es auch möglich, nach der Kontraktion zu expandieren.)
――Eigenschaften sind Teile mit vielen Informationen. Es gibt die folgenden drei Funktionen. Für die Merkmalsextraktion finden Sie im Bild einen Eigenvektor mit einem großen Eigenwert.
--Flach: Das Bild enthält keine Richtung. Der Eigenvektor ist nicht vorgespannt und der Eigenwert ist klein (weniger Merkmale)
--Edge: Es gibt einen Eigenvektor mit einem größeren Eigenwert im Bild (charakteristischer als flach)
Extraktor | Erläuterung |
---|---|
Harris | Wenn sich die Skala ändert, sinkt die Genauigkeit. Merkmale werden durch Eigenwerte und Eigenvektoren extrahiert |
SIFT | Die Feature-Menge beträgt 128 Dimensionen. Wegen Patenterwerb nicht für den kommerziellen Gebrauch verfügbar |
SURF | Beschleunigen Sie SIFT. Wegen Patenterwerb nicht für den kommerziellen Gebrauch verfügbar |
ORB | Binarisierte Merkmalsmenge. Einfach und zu empfehlen |
KAZE | Verwendet einen nichtlinearen Filter. Einfach und zu empfehlen |
AKAZE | Eine schnellere Version von KAZE. Einfach und zu empfehlen |
So zeigen Sie den Quellcode für jeden Extraktor an.
import cv2
import numpy as np
import copy
img = cv2.imread("Bilddateipfad hier")
img_g = cv2.imread("Bilddateipfad hier",0)
# Harris
img_harris = copy.deepcopy(img)
img_dst = cv2.cornerHarris(img_g, 2,3,0.04)
#2 ist die Blockgröße. Wie viel Reichweite sollte erkannt werden? Wenn Sie es groß machen, erhöht sich die Extraktionsmenge
# KAZE
img_kaze = copy.deepcopy(img)
kaze = cv2.KAZE_create() #Feature-Extraktor erstellen(KAZE)
kp1 = kaze.detect(img,None)
img_kaze = cv2.drawKeypoints(img_kaze, kp1, None) #Das im Feature-Teil markierte Bild ist img_Kaze betreten
# AKAZE
img_kaze = copy.deepcopy(img)
kaze = cv2.AKAZE_create() #Feature-Extraktor erstellen(AKAZE)
kp1 = kaze.detect(img,None)
img_kaze = cv2.drawKeypoints(img_kaze, kp1, None) #Das im Feature-Teil markierte Bild ist img_Kaze betreten
# ORB
img_orb = copy.deepcopy(img)
orb = cv2.ORB_create() #Feature-Extraktor erstellen(ORB)
kp2 = orb.detect(img_orb)
img_orb = cv2.drawKeypoints(img_orb, kp2, None) #Das im Feature-Teil markierte Bild ist img_Kugel eingeben
Recommended Posts