2012-05-21 32 views
7

मेरे मालिक थीसिस के लिए, मैं स्मार्टफोन्स पर लोगो का पता लगाने के लिए तेजी से एल्गोरिदम एन झारना सर्फ पर कुछ परीक्षण चल रहा हूँ।तेजी से पता लगाने के साथ SURF विवरण तेजी से?

जब मैं बस समय का पता लगाने, कुछ तरीकों मैं निम्नलिखित परिणाम प्राप्त करने के लिए मिलान एन विवरण।

एक सर्फ डिटेक्टर और सर्फ वर्णनकर्ता के लिए:

180 keypoints

  • 1.994 सेकंड Keypoint गणना समय (सर्फ)

  • 4.516 सेकंड वर्णन समय (सर्फ)

  • पाया

    0.282 सेकंड समय मिलान (सर्फ)

जब मैं सर्फ डिटेक्टर की जगह में एक तेजी से डिटेक्टर का प्रयोग

319 keypoints

  • 0,023 सेकंड Keypoint गणना समय (फास्ट)

  • 1,295 सेकंड वर्णन समय मिल (सर्फ)

  • 0.397 सेकंड मिलान समय (एसयूआरएफ)

फास्ट डिटेक्टर एसयूआरएफ डिटेक्टर की तुलना में बहुत तेज़ है, और यहां तक ​​कि लगभग दो गुना अधिक महत्वपूर्ण बिंदुओं का पता लगाता है। ये परिणाम अनुमानित हैं।

अगले कदम हालांकि एक भविष्यवाणी परिणाम नहीं है। यह कैसे संभव है कि डीयूआरएफ डिस्क्रिप्टर 320 एसयूआरएफ कीपॉइंट्स के साथ 319 फास्ट कीपॉइंट्स के साथ तेज है?

मुझे जो पता है, उससे पता लगाने के लिए एल्गोरिदम का कोई संबंध नहीं है ... फिर भी इन परिणामों की भविष्यवाणी नहीं की गई है।

किसी भी एक को पता है कि यह कैसे संभव है?

FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF); 
    //FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); 
    Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB); 
    Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB); 

    DescriptorExtractor SurfExtractor = DescriptorExtractor 
    .create(DescriptorExtractor.SURF); 


    //extract keypoints 
    long time= System.currentTimeMillis(); 
    detector.detect(image1, keypoints); 
    Log.d("LOG!", "number of query Keypoints= " + keypoints.size()); 
    detector.detect(image2, logoKeypoints); 
    Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size()); 
    Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time)); 

    //Descript keypoints 
    long time2 = System.currentTimeMillis(); 
    Mat descriptors = new Mat(); 
    Mat logoDescriptors = new Mat(); 
    Log.d("LOG!", "logo type" + image2.type() + " intype" + image1.type()); 
    SurfExtractor.compute(image1, keypoints, descriptors); 
    SurfExtractor.compute(image2, logoKeypoints, logoDescriptors); 
    Log.d("LOG!", "Description time elapsed" + (System.currentTimeMillis()- time2)); 
+0

आप अपने कोड के कुछ पोस्ट करें सकता है? :) – Codeman

+0

मेरे कुछ कोड प्रश्न में जोड़ा गया है! – piepie

उत्तर

7

सबसे अधिक समय लेने वाली सर्फ वर्णनकर्ता निकासी का हिस्सा AFAIK होने पैच की उपपिक्सेल निष्कर्षण (2.8 * keypoint.size x 2.8 * keypoint.size) हर Keypoint चारों ओर आकार है:

यहाँ कोड है ।

तो मेरा अनुमान है: फास्ट डिटेक्टर द्वारा पाई गई कीपॉइंट्स में हमेशा size 7 के बराबर होता है लेकिन एसयूआरएफ डिटेक्टर बहुत बड़े आकार के कीपॉइंट्स पा सकता है। तो 180 "बड़े" कीपॉइंट्स 319 "छोटे" से अधिक संसाधित होते हैं।

+1

मैंने एसआईएफटी डिस्क्रिप्टर का काम किया है लेकिन मेरी थीसिस में एसयूआरएफ डिस्क्रिप्टर का पूरी तरह से वर्णन नहीं किया है, शायद अगर मैंने किया, तो मुझे यह पता चल जाएगा। आपकी व्याख्या बहुत उचित लगती है और मुझे लगता है कि यह मेरे प्रश्न का सही जवाब हो सकता है! धन्यवाद! – piepie

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