2015-04-19 4 views
10

मेरी समस्या ट्रेलर के पीछे छवि का उपयोग कर स्वचालित रूप से ट्रक में लकड़ी को ढूंढना और गिनना है। मैं MATLAB छवि टूलबॉक्स का उपयोग कर इस समस्या को हल करने का प्रयास कर रहा हूं। तो, मेरा कोड यहाँ है।MATLAB का उपयोग कर ट्रक में लकड़ी कैसे ढूंढें?

function [ centers, rads, metrics ] = TimberFind(img) 
    minrad = 20; 
    maxrad = 110; 
    Hsens = .93; 
    CannySens = .20; 

    img_gray = rgb2gray(img); 
    PSF = fspecial('gaussian', 5, 0.5); 
    img_gray = imfilter(img_gray, PSF, 'symmetric', 'conv'); 
    img_gray = imadjust(img_gray); 
    PSF=fspecial('gaussian', 10, 1); 
    Blurred = imfilter(img_gray, PSF, 'symmetric', 'conv'); 
    cont = imsubtract(img_gray, Blurred); 
    preprocessed = imadd(img_gray, 3*cont);  

    bin = edge(preprocessed, 'canny', CannySens); 

    [cen, r, m] = imfindcircles(bin, [minrad maxrad],'Sensitivity', Hsens); 
end 

लेकिन परिणाम बहुत अच्छा नहीं है। आप the full data सेट या निम्न उदाहरण देख सकते हैं: first input image first output image

तो, अगर मैं कैनी और imfindcircles एल्गोरिदम पर्याप्त sensetive सभी लकड़ी पता लगाने के लिए बनाने के लिए, कुछ अतिरिक्त पाया resoults देखते हैं। मुझे बड़ी समस्या से प्रत्येक लकड़ी को काटने के साथ इस समस्या को हल करने का विचार है, फिर प्राप्त छोटी तस्वीरों के कुछ वैश्विक मानदंडों का गठन करना, और उस पर कुछ मशीन लर्निंग एल्गोरिदम का प्रयास करना है। लेकिन मुझे लगता है कि इस तरह से मुश्किल है, तो शायद कोई और कुछ सुझाव दे सकता है? शायद कैनी ऑपरेटर का उपयोग करने से पहले छवि का प्रीप्रोसेसिंग करने का एक बेहतर तरीका है? यदि आपको कोई विचार है कि इसे बेहतर कैसे बनाया जाए, तो कृपया मुझे बताएं। धन्यवाद!

+1

क्या आप लाल मंडलियों के बिना मूल छवियों, _i.e._ पोस्ट कर सकते हैं? – Ratbert

+1

निश्चित रूप से, मैं उन्हें बादल में डाल दिया। – Vladimir

+0

यदि आप अपने झूठे डिटेक्शन देखते हैं, तो उनमें से कुछ पोस्ट-प्रोसेसिंग का उपयोग करके निकालना आसान है। उदाहरण के लिए, झूठी डिटेक्शन की उपस्थिति आपको मिलने वाली अन्य मंडलियों से अलग है। –

उत्तर

4

असल में वहाँ वास्तव में अपने चित्र, preprocess करने की जरूरत नहीं है अर्थात न ग्रेस्केल जा रहा है, गाऊसी छानने और न ही Cany बढ़त का पता लगाने वास्तव में imfindcircles उपयोग करने से पहले उपयोगी होते हैं।

अपने कोड का एक सरलीकृत संस्करण इस छवि पर एक बहुत ही सभ्य परिणाम देता है:

enter image description here

कोड:

minrad = 20; 
maxrad = 110; 
Hsens = .93; 

[cen, r] = imfindcircles(img, [minrad maxrad],'Sensitivity', Hsens); 

और परिणाम:

enter image description here

इंटी आराम से, परिणाम बहुत बेहतर है कि आपका मूल कोड क्या करता है। बेहतर सरल!

+0

अपने तरीके से उपयोग करने से मेरी छवियों पर खराब पुनर्विक्रय होता है। लेकिन जब मैंने किनारे का पता लगाया, तो मैंने वास्तव में गलती की, क्योंकि imfindcircles इसे स्वयं करता है। तो, मैंने इसे ठीक किया और पुनर्विक्रय बेहतर हो गया, लेकिन पर्याप्त नहीं है। – Vladimir

संबंधित मुद्दे