gpt4 book ai didi

matlab - 物体(汽车)检测与分割

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:38 26 4
gpt4 key购买 nike

我正在尝试从仅包含一辆车和简单背景的图像中分割汽车,如
enter image description here


enter image description here


但是我从我的实现中得到的是这个
enter image description here



enter image description here


分别

但它非常容易处理几乎已经分割的图像,例如。 enter image description here


给出类似
的结果 enter image description here


我使用的代码是

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 上),但它也无济于事。我正在寻找一种方法来分割前两张图像,以提供类似于第三张图像的结果。

最佳答案

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

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

image ,

如果你想检测图像中的汽车,你需要将这个问题作为目标检测问题来处理。这link将为您提供有关汽车检测问题的一些信息。它有两篇关于它的论文和一个测试方法的数据库。

希望对你有帮助..

关于matlab - 物体(汽车)检测与分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com