【问题标题】:Classification on the basis of shape and size按形状和大小分类
【发布时间】:2017-12-01 09:21:31
【问题描述】:

如何使用机器学习根据形状和大小对物体进行分类? 假设我在图像中有一个圆圈和一些小的虚线方块。两者的区别在于它们的形状和大小。那么给定一个图像,如何区分这些对象并返回结果。 在实际问题中,这些对象是太阳能光伏文件夹中的热点,是其中的缺陷部分。我需要对它们进行分类。I/P图像如下:

[这或多或少是一个正方形的热点:]

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

【问题讨论】:

  • 我看到了两种可能的方法:1)使用图像作为输入,使用卷积神经网络作为分类器 2)找到一种方法来表示图像,例如像素强度并将这些值用作分类器(LDA、SVM)的特征
  • 定向梯度直方图(HoG)结合SVM是一种基于形状的分类器。

标签: python opencv classification


【解决方案1】:

此答案并未详细说明机器学习或任何使用分类器的方法

圆圈可以被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()

代码结果如下

【讨论】:

  • 好吧,它不遵循机器学习方法(我在回答开头提到了这一点)。它仍然可以用来区分两个不同的对象并返回结果,这在问题中有所说明:“那么给定一个图像,如何区分这些对象并返回结果。”
  • 很公平。不过,我认为在假设这是他们想要的答案之前,最好先在 OP 上的 cmets 中澄清一下。
  • 我认为假设 OP 的意图并没有伤害到我或其他任何人,也许这对他或对澄清实际问题的讨论有帮助。如果我完全离开了,我很乐意在问题被完全理解和回答后删除我的答案。
  • 非常感谢先生们。提供的信息确实很有帮助。我已经稍微编辑了我的问题。请再过一遍。这里需要使用 ML 和分类是因为一些预测分析。欢迎就该问题提出任何建议或澄清。提前致谢。
  • 先生,我可以有不同的形状,如矩形或正方形或圆形,即形状是这里的区别。另外,我还需要根据大小来区分我的形状,如小矩形或大等。希望这能澄清一下。 @musked
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2012-07-26
相关资源
最近更新 更多