Ich würde gerne Pixel-Klassifizierung auf RGB-Bildern basierend auf Eingabe Trainingsbeispiele der angegebenen Anzahl von Klassen durchführen. So habe ich z.B. 4 Klassen, die Pixel (r, g, b) enthalten, ist das Ziel, das Bild in vier Phasen zu segmentieren.Maximale Wahrscheinlichkeit Pixel-Klassifizierung in Python opencv
Ich habe festgestellt, dass Python opencv2 den Expectation Maximization-Algorithmus hat, der die Aufgabe erfüllen könnte. Leider habe ich kein Tutorial oder Material gefunden, das mir (seit ich Anfänger bin) erklären kann, wie man mit dem Algorithmus arbeitet.
Können Sie bitte irgendeine Art von Tutorial vorschlagen, die als Ausgangspunkt verwendet werden kann?
Update ... ein weiterer Ansatz für den Code unten: G O_o gle:
**def getsamples(img):
x, y, z = img.shape
samples = np.empty([x * y, z])
index = 0
for i in range(x):
for j in range(y):
samples[index] = img[i, j]
index += 1
return samples
def EMSegmentation(img, no_of_clusters=2):
output = img.copy()
colors = np.array([[0, 11, 111], [22, 22, 22]])
samples = getsamples(img)
#em = cv2.ml.EM_create()
em = cv2.EM(no_of_clusters)
#em.setClustersNumber(no_of_clusters)
#em.trainEM(samples)
em.train(samples)
x, y, z = img.shape
index = 0
for i in range(x):
for j in range(y):
result = em.predict(samples[index])[0][1]
#print(result)
output[i][j] = colors[result]
index = index + 1
return output
img = cv2.imread('00.jpg')
smallImg = small = cv2.resize(img, (0,0), fx=0.5, fy=0.5)
output = EMSegmentation(img)
smallOutput = cv2.resize(output, (0,0), fx=0.5, fy=0.5)
cv2.imshow('image', smallImg)
cv2.imshow('EM', smallOutput)
cv2.waitKey(0)
cv2.destroyAllWindows()**
Kurz Python. Long: Google "Erwartungsmaximierungsalgorithmus". Sobald Sie genug Informationen über das Konzept haben, googlen Sie dies: "Erwartungsmaximierungsalgorithmus opencv". Beachten Sie, dass opencv eine Bibliothek und kein Buch ist. Sie müssen die Techniken aus Forschungspapier, Büchern, Wiki oder jeder Quelle, mit der Sie sich am wohlsten fühlen, studieren. Grund für den Downvote: - Ich habe beim ersten Versuch mehrere Tutorials gefunden. Wenn Sie immer noch in Schwierigkeiten sind, googeln Sie auf youtube und Sie werden Video-Tutorials derselben finden. – saurabheights
suchen Sie die entsprechende Funktion zwischen opencv 2.4.x und 3.0, für meinen Code als Quelle verwenden: https://subukita.com/2014/03/24/image-segmentierung-using-opencvs-expectation-maximization/ – eyllanesc