2017-06-28 84 views
1

如何使用機器學習根據形狀和大小對對象進行分類? 假設我在圖像中有一個圓圈和一些小的虛線方塊。兩者的區別在於它們的形狀和大小。因此給定一幅圖像,如何區分這些對象並返回結果。 在實際問題中,這些物體是太陽能PV文件夾中的熱點,這些文件夾是其中的缺陷部分。我需要分類them.The I/P圖像作爲:基於形狀和大小的分類

[這是更少或更多的方型熱點的:]

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

我看到兩種可能的方式:1)作爲輸入使用的圖像,並使用卷積神經網絡作爲分類器2)找到一種方式來表示圖像例如像素強度並將這些值用作分類器的特徵(LDA,SVM) – sera

+1

與SVM結合的定向梯度直方圖(HoG)是基於形狀的分類器。 – Micka

回答

0

此答案沒有按」噸ellaborate機器學習或任何途徑使用分類器

圓圈可由Hough Circle Transform被檢測來自OpenCV的cv2.HoughCircles()

Documentation for Hough Circles in OpenCV

:通過使用半徑,你可以調整你要檢測圓的形狀大小。說實話,我真的沒有得到什麼虛線的方格,也許你可以在你的問題中展示一個模範的圖像。

如果圖像中只有兩種不同類型的對象,可能甚至不需要分類器,因爲這兩個類已經被後續圖像處理(儘管對輸入圖像高度依賴)分隔開來。

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() 

結果的代碼是如下

Result of the code

+0

好吧,它不遵循機器學習的方法(我在我的答案開始時注意到)。它仍然可以用來區分兩個不同的對象,並返回結果,這在問題中說明:「因此給定一幅圖像,如何區分這些對象並返回結果。」 – vanilla

+0

夠公平的。不過,我認爲最好在對OP進行評論之前澄清這一點,然後再假設這是他們想要的答案。 –

+0

我認爲這不會傷害我或任何其他人承擔OP的意圖,也許這對他或討論澄清實際問題甚至有幫助。如果我完全不在,我很樂意在問題得到充分理解和解答後刪除我的答案。 – vanilla