2017-06-28 15 views
1

Wie werden Objekte anhand von Form und Größe mit maschinellem Lernen klassifiziert? Angenommen, ich habe einen Kreis und einige kleine gepunktete Quadrate in einem Bild. Der Unterschied zwischen den beiden ist ihre Form und Größe. So ein Bild, wie man zwischen diesen Objekten unterscheidet und das Ergebnis zurückgibt. In dem eigentlichen Problem sind diese Objekte Hot Spots in einem Solar PV-Ordner, die defekte Teile davon sind. Ich brauche Car-sharing I/P-Bild zu klassifizieren ist als:Klassifizierung nach Form und Größe

[Dies ist mehr oder weniger ein Quadrat Art von Hot-Spot:]

  1. https://i.stack.imgur.com/4JL7E.png
+0

Ich sehe zwei Möglichkeiten: 1) verwenden als Eingabe das Bild und verwenden Faltungs neuronale Netze als Klassifizierer 2) einen Weg finden, das vertreten Bild zB Pixelintensität und verwenden Sie diese Werte als Features für einen Klassifikator (LDA, SVM) – sera

+1

Histogramm von orientierten Gradienten (HoG) kombiniert mit SVM ist ein Klassifikator basierend auf Form. – Micka

Antwort

0

Diese Antwort doesn‘ t ellaborate maschinelles Lernen oder jeder Ansatz Klassifikatoren

die Kreise können von der Hough Circle Transformerkannt werdenvon OpenCV cv2.HoughCircles():

Documentation for Hough Circles in OpenCV

Hinweis: Durch den Radius verwenden Sie können tune die Form Größe der Kreise Sie erfassen möchten. Und um ehrlich zu sein, habe ich nicht wirklich verstanden, was punktierte Quadrate sind, vielleicht könnten Sie in Ihrer Frage ein vorbildliches Bild zeigen.

Wenn es nur zwei verschiedene Arten von Objekten im Bild gibt, brauchen Sie wahrscheinlich gar keinen Klassifikator, da die beiden Klassen bereits durch die nachfolgende Bildverarbeitung getrennt sind (das hängt jedoch stark von Ihren Eingabebildern ab).

import cv2 
import numpy as np 

img = cv2.imread('opencv_logo.png',0) 
img = cv2.medianBlur(img,5) 
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20, 
          param1=50,param2=30,minRadius=0,maxRadius=0) 

circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    # draw the outer circle 
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) 
    # draw the center of the circle 
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) 

cv2.imshow('detected circles',cimg) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Ergebnis des Codes ist wie folgt

Result of the code

+0

Okay, es folgt keinem maschinellen Lernansatz (was ich am Anfang meiner Antwort bemerke). Dennoch kann es verwendet werden, um zwischen zwei verschiedenen Objekten zu unterscheiden und das Ergebnis zurückzugeben, das in der Frage angegeben ist: "So, bei einem Bild, wie man zwischen diesen Objekten unterscheidet und das Ergebnis zurückgibt." – vanilla

+0

Fair genug. Ich denke, es wäre besser, in Kommentaren zum OP zu klären, bevor wir annehmen, dass dies die Antwort ist, die sie wollen. –

+0

Ich denke, es hat mir oder irgendjemand anderem nicht geschadet, die Absicht des OP anzunehmen, vielleicht ist es sogar hilfreich für ihn oder für die Diskussion, um die eigentliche Frage zu klären. Wenn ich völlig frei bin, bin ich glücklich, meine Antwort zu löschen, sobald die Frage vollständig verstanden und beantwortet ist. – vanilla

Verwandte Themen