繁体   English   中英

对象(汽车)检测和分割

[英]object (Car) Detection and segmentation

我试图从仅包含一辆车和简单背景的图像中分割汽车
在此输入图像描述


在此输入图像描述


但我从实施中得到的是这个
在此输入图像描述



在此输入图像描述


分别

但它很容易在几乎已经分段的图像上工作。 在此输入图像描述


给出结果如
在此输入图像描述


我正在使用的准则是

import cv2
import numpy as np

THRESH_TYPE=cv2.THRESH_BINARY_INV

def show(name,obj):
    cv2.imshow(name,obj)
    cv2.moveWindow(name, 100, 100) 
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def process_end(new):
    drawing = np.zeros(o.shape,np.uint8)     # Image to draw the contours
    contours,hierarchy =cv2.findContours(new,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#find connected borders
    for cnt in contours:
        color = np.random.randint(0,255,(3)).tolist()  # Select a random color
        cv2.drawContours(drawing,[cnt],0,color,2)
    print "processing done"
    return drawing

def process(name,path):
    global o
    print "Started!!! processing "+name
    ratio=1#change according to image size
    o=cv2.imread(path+name)#open image
    print type(o)
    show("original",o)
    w,h=o.shape[1]/ratio,o.shape[0]/ratio#resize ratio for width and height
    new=cv2.resize(o,(w,h))#resize image
    #show("Resized",new)
    new=cv2.cvtColor(new,cv2.COLOR_RGB2GRAY)#grey scale image
    show("grey",new)
    cv2.imwrite("grey.jpg",new)
    new1 = cv2.GaussianBlur(new,(5,5),0)#gaussians Blurs Image
    show("blurred1",new1)
    cv2.imwrite("gblur_"+name,new1)#save image
    new2 = cv2.medianBlur(new,7)#Median Blurs Image
    show("blurred2",new1)
    cv2.imwrite("mblur_"+name,new2)#save image
    #new=cv2.equalizeHist(new,)#do image histogram equalisation to better the contrast
    #show("hist equal otsu",new)
    ##cv2.imwrite("otsu_"+name,new)#save image

    a,new=cv2.threshold(new,0,255,THRESH_TYPE | cv2.THRESH_OTSU)#OTSU thresholding
    show("otsu",new)
    cv2.imwrite("otsu_"+name,new)#save image
    return new,name



new,name=process("car9.jpg","C:\\Users\\XOR\\Desktop\\file\\")#Change the Name and path accordingly
new=cv2.Canny(new, 100,200)#canny edge detection technique
show("canny",new)
cv2.imwrite("canny_"+name,new)#save image
new=process_end(new)
show("blobed",new)
cv2.imwrite("blob_"+name,new)#save image
new=cv2.Sobel(new,-1,1,0,3,BORDER_WRAP)
show("sobel",new)
cv2.imwrite("sobel_"+name,new)#save image

我也试过了分水岭算法(在matlab上),但它也无济于事。 我正在寻找一种方法来分割前两个图像,结果类似于第三个。

首先, 检测分割是两个不同的问题。 首先决定你想做哪一个。

如果您的问题是“ 从单张图像检测汽车 ”,则无法通过细分来实现。 您可以将图像分割成零件并使用另一种方法(采用最大的分割区域),您可以在图像中找到汽车,但我确信它不适用于所有图像。 这就是分水岭算法不起作用的原因。 分割算法只是对图像进行分割,而不会为其提供特定的对象/区域。 例如,如果您查看显示的图像,它会被分割成区域,但您无法知道哪个区域是哪个区域。

图片

如果要检测图像中的汽车,则需要将此问题作为对象检测问题来处理。 链接将为您提供有关汽车检测问题的一些信息。 它有两篇关于它的论文和一个测试方法的数据库。

希望能帮助到你..

对于汽车检测,我会使用latern svm检测器和“Car”型号:

http://docs.opencv.org/modules/objdetect/doc/latent_svm.html

我想@GilLevi说,一旦你学会了一套针对检测问题的汽车的全局特征,就可以根据更具体的特征产生汽车类别的子标题:如颜色分布,形状模板,徽标等,并成为另一类语义图像分割。 您仍然可以从学习部分获得大量收益,而不是专注于需要调整许多变量的分段特定方法。 汽车的另一个​​数据集: http//lear.inrialpes.fr/people/marszalek/data/ig02/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM