2017-06-28 49 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