2016-02-29 65 views
2

我目前正在使用MATLAB進行「人羣數量估計」項目。對於那個項目,我需要在擁擠的圖像中找到頭部的數量(使用航空相機拍攝)。我目前使用循環霍夫變換來檢測圖像中的頭像。使用MATLAB檢測擁擠圖像中的頭

頭部尺寸因高度而異。所以,我編碼的方式是它接受(圖像,Min_head_size,Max_head_size)作爲參數。頭部大小將作爲圓的半徑(圓形霍夫變換),並檢測該半徑的圓。我已將閾值設置爲(pi *半徑)。

通過上述方法,我無法檢測到所有頭部。還有很多誤報。我可以這樣進行嗎?有沒有其他解決方案可以精確計算頭部?

function Crowd_counter(img,r1,r2) 

    img1 = imread(img);      %read the image 
    img=im2bw(img1,graythresh(img1));   %convert into binary 
    imgBW = edge(img);      %'canny' edge detection 
    count=0; 
    FDetect = vision.CascadeObjectDetector; %for face detection 
    BB = step(FDetect,img1);     %bounding box for face detect 

    for i=r1:r2 
     [ydetect,xdetect,Accumulator] = houghcircle(imgBW,i,(i*pi)); %circular hough 
     y{count+1}=ydetect;      %storing y co-ordinates 
     x{count+1}=xdetect;      %storing x co-ordinates 
     count=count+1; 
     i=i+1; 
    end 

    disp(count); 
    figure; 
    imshow(img1);       %for visualizing detected heads 
    hold on; 
    crowd=0; 
    for j=1:count 
     crowd=crowd+length(x{j});   %for counting detected heads 
     plot(x{j},y{j},'.','LineWidth',2,'Color','red'); 
     j=j+1; 
    end 

    disp('Number of heads:'); 
    disp(crowd); 
    disp('Number of faces:'); 
    disp(size(BB,1)); 
    disp('Total'); 
    disp(crowd+size(BB,1)); 

Input image

Output from Crowd_counter('51.jpg',3,7)

回答

0

嗯,這似乎是一個不錯的方法。我沒有試過這個,但是從你的輸出圖像看來,很多邊緣被錯誤歸類爲頭像。我的第一個想法是使用像在HARRIS corner detector後續步驟中使用的Hessian矩陣可以幫助消除其中的一些。這應該會帶來一些誤報。弄清楚如何找到假陰性將花費更多的努力,我猜。我想再強調一下,我自己並沒有嘗試過這一點,只有當你覺得邏輯對你有意義時,才能沿着這條路走下去。