2015-02-08 18 views
10

मैं सोच रहा था कि क्या किसी को पता था कि OpenCV के पायथन बाइंडिंग में HOGDescriptors के लिए कोई दस्तावेज़ क्यों नहीं है।ओपनसीवी HOGDescripter पायथन

हो सकता है कि मैं सिर्फ उन्हें याद किया गया है, लेकिन केवल कोड मैं उनमें से मिल गया है इस सूत्र है: Get HOG image features from OpenCV + Python?

आपको लगता है कि सूत्र में नीचे स्क्रॉल, तो इस कोड को वहाँ में पाया जाता है:

import cv2 
hog = cv2.HOGDescriptor() 
im = cv2.imread(sample) 
h = hog.compute(im) 

मैंने इसका परीक्षण किया है और यह काम करता है - इसलिए पाइथन बाइंडिंग मौजूद है, केवल दस्तावेज नहीं है। मैं सोच रहा था कि अगर कोई जानता है कि एचओजी के लिए पाइथन बाइंडिंग के लिए दस्तावेज क्यों खोजना/अस्तित्व में रखना मुश्किल है। क्या किसी को पता है कि कोई ट्यूटोरियल है, मैं HOG के बारे में कहीं भी पढ़ सकता हूं (विशेष रूप से पायथन बाइंडिंग के माध्यम से)? मैं HOG के लिए नया हूं और कुछ उदाहरण देखना चाहता हूं कि ओपनसीवी अपनी खुद की सामग्री लिखने से पहले सामान कैसे करता है।

उत्तर

17

1. अंतर्निर्मित प्रलेखन प्राप्त करें:

import cv2 help(cv2.HOGDescriptor())

2. उदाहरण कोड: अपने अजगर कंसोल पर आदेश की मदद से आप वर्ग HOGDescriptor की संरचना पता बाद यहाँ एक टुकड़ा है विभिन्न पैरामीटर के साथ एक cv2.HOGDescriptor प्रारंभ करने के लिए कोड (मेरे द्वारा उपयोग की जाने वाली शर्तें मानक शब्द हैं जिन्हें ओपनसीवी दस्तावेज here में अच्छी तरह से परिभाषित किया गया है):

import cv2 
image = cv2.imread("test.jpg",0) 
winSize = (64,64) 
blockSize = (16,16) 
blockStride = (8,8) 
cellSize = (8,8) 
nbins = 9 
derivAperture = 1 
winSigma = 4. 
histogramNormType = 0 
L2HysThreshold = 2.0000000000000001e-01 
gammaCorrection = 0 
nlevels = 64 
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins,derivAperture,winSigma, 
         histogramNormType,L2HysThreshold,gammaCorrection,nlevels) 
#compute(img[, winStride[, padding[, locations]]]) -> descriptors 
winStride = (8,8) 
padding = (8,8) 
locations = ((10,20),) 
hist = hog.compute(image,winStride,padding,locations) 

3. तर्क: परिणामी हॉग वर्णनकर्ता आयाम होगा के रूप में: 9 झुकाव एक्स (4 कोने ब्लॉक कि किनारों कि 2 normalizations + 6x6 ब्लॉक कि 4 normalizations मिल पाने पर 1 सामान्य + 6x4 ब्लॉक मिलता है) = 1764. जैसा कि मैंने hog.compute() के लिए केवल एक स्थान दिया है।

4. विभिन्न HOGDescriptor प्रारंभ करने में जिस तरह से:

hog = cv2.HOGDescriptor("hog.xml") 

एक xml फ़ाइल एक निम्न कर सकते हैं पाने के लिए::


एक और तरीका प्रारंभ करने में xml फ़ाइल जो सभी पैरामीटर मान से है
hog = cv2.HOGDescriptor() 
hog.save("hog.xml") 

और xml फ़ाइल में संबंधित पैरामीटर मानों को संपादित करें।

+0

क्या दस्तावेज़ अभी भी सटीक है http://docs.opencv.org/2.4/modules/gpu/doc/object_detection.html जहां यह कहता है कि यह केवल डिफ़ॉल्ट आकार के ब्लॉक और कक्षों का उपयोग कर सकता है? – mobcdi

+0

यह HOG का एक बड़ा कार्यान्वयन है, बशर्ते कि इसमें स्थान देने का विकल्प हो। लेकिन मैं इसे कैसे कल्पना करूं? मुझे लगता है कि विज़ुअलाइजेशन के बिना एक ब्लैक बॉक्स है और पैरामीटर तदनुसार tweaked नहीं किया जा सकता है। – Roxanne

3

मैं वही सोच रहा था। स्रोत सीपीपी कोड के अलावा ओपनसीवी HOGDescriptor के लिए लगभग कोई भी दस्तावेज नहीं मिल सकता है।

विज्ञान की छवि HOG सुविधा निकालने और चित्रित करने पर एक अच्छा उदाहरण पृष्ठ है। यह HOG का पता लगाने का विकल्प प्रदान करता है। यह here दस्तावेज है।

हालांकि, विज्ञान-छवि के हॉग कार्यान्वयन के बारे में इंगित करने के लिए एक बात है। hog function के लिए इसका पायथन कोड हिस्टोग्राम ओरिएंटेशन बिनिंग के लिए weighted vote लागू नहीं करता है, लेकिन केवल बिन में आने वाले परिमाण मान के आधार पर सरल कताई करता है। इसे hog_histogram function देखें। यह वास्तव में दलाल और ट्रिग्स के पेपर का पालन नहीं कर रहा है।

असल में, मैंने पाया कि ओपनसीवी के एचओजी के कार्यान्वयन के आधार पर ऑब्जेक्ट डिटेक्शन विज्ञान-छवि से एपीआई के मुकाबले अधिक सटीक है। यह मुझे समझ में आता है, क्योंकि भारित वोट महत्वपूर्ण है। भारित वोटों को डिब्बे में कास्टिंग करके, हिस्टोग्राम में भिन्नता बहुत कम हो जाती है जब ग्रेडियेंट परिमाण सीमा पर या उसके आसपास गिरता है। क्रिस McCormick लिखा हॉग पर एक बहुत ही व्यावहारिक blog, जिसमें उन्मुखीकरण binning स्पष्ट रूप से के रूप में

वर्णन किया गया है प्रत्येक ढाल वेक्टर के लिए, यह है हिस्टोग्राम के लिए योगदान वेक्टर (ताकि मजबूत ढ़ाल एक बड़ा प्रभाव पड़ता है की भयावहता द्वारा दिया जाता है हिस्टोग्राम पर)। हमने दो निकटतम डिब्बे के बीच योगदान को विभाजित किया। तो, उदाहरण के लिए, यदि एक ग्रेडिएंट वेक्टर में 85 डिग्री का कोण होता है, तो हम 70 डिग्री पर केंद्रित बिन में इसकी तीव्रता का 1/4 वां जोड़ते हैं, और 9 0 पर केंद्रित बिन के 3/4 वें स्थान पर होते हैं।

मेरा मानना ​​है कि योगदान को विभाजित करने का इरादा ग्रेडियेंट की समस्या को कम करना है जो दो डिब्बे के बीच सीमा पर सही है। अन्यथा, यदि एक मजबूत ढाल बिन के किनारे पर सही था, तो ढाल कोण में थोड़ा सा परिवर्तन (जो अगले बिन में ढाल को कम करता है) हिस्टोग्राम पर एक मजबूत प्रभाव डाल सकता है।

तो, हॉग की गणना करने के लिए OpenCV का उपयोग यदि संभव हो तो (अपने कोड में digged नहीं किया है और ऐसा करने का मन नहीं है, लेकिन मुझे लगता है कि हॉग कार्यान्वयन के OpenCV के रास्ते अधिक उपयुक्त है)। न केवल मुझे पहचान सटीकता में सुधार मिला, बल्कि यह तेजी से चलता है। अद्भुत टिप्पणियों के साथ scikit-image के हॉग कोड की तुलना में, इसका दस्तावेज़ लगभग कोई नहीं है। फिर भी यह अभी भी व्यवहार्य है कि कोई भी ओपनसीवी का संस्करण अभ्यास में काम कर सकता है - यह विंडो आकार, सेल आकार, ब्लॉक आकार, ब्लॉक स्ट्रॉइड, ओरिएंटेशन की संख्या आदि के लिए सही पैरामीटर पास करने का मामला है। अन्य पैरामीटर मैं अभी डिफ़ॉल्ट रूप से चला गया हूं।

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