object (Car) Detection and segmentation

血红的双手。 提交于 2019-12-30 03:33:30

问题


I am trying to segment cars from image that consist of only one car and an easy background like



but what I get from my implementation is this


and


respectively

but it works very easily on almost already segmented images like.


giving results like


The Code I am using is

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

I have tried the watershed algorithm (on matlab) too but it also doesn't help. I'm looking for a way to segment the first two images that gives a result similar to third one.


回答1:


First of all, Detection and Segmentation are two different problems. First decide which one you wanna do.

If your problem is 'Car Detection From Single Image', you can't do it by segmentation. You can segment image into parts and by using another approach (take the biggest segmented region) you can find the car in the image, but I'm sure it won't work for all images. That's why watershed algorithm didn't work. Segmentation algorithms just segments the image doesn't give you particular object/region in it. For example if you look at the image shown, it is segmented into regions, but you can't know which region is which.

,

If you want to detect cars in images, you need to approach this problem as object detection problem. This link will provide you some information about car detection problem. It has two papers about it and a database to test approaches.

Hope it helps..




回答2:


For car detection I would use latern svm detector with the "Car" model:

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




回答3:


I guess like @GilLevi says once you have learned a set of global features for cars for the detection problem, one can produce a sublabelling of the classes of cars based on more specific features: like color distribution, shape templates, logos etc, and becomes another class of semantic image segmentation. You would still largely gain from the learning part than focussing on a segmentation specific approach which would need many variables to tune. Another dataset with cars: http://lear.inrialpes.fr/people/marszalek/data/ig02/



来源:https://stackoverflow.com/questions/19590444/object-car-detection-and-segmentation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!