2013-01-24 3 views
6

मैं दो छवियों की तुलना और समोच्च इन छवियों से निकाले तुलना करने के लिए हू पल का उपयोग करने की कोशिश की: https://docs.google.com/file/d/0ByS6Z5WRz-h2WHEzNnJucDlRR2s/edit और https://docs.google.com/file/d/0ByS6Z5WRz-h2VnZyVWRRWEFva0k/edit दूसरी छवि पहले के बराबर ही यह घुमाया है और मैं परिणाम एक ही Humoments के रूप में की उम्मीद। वे थोड़ा अलग हैं। सही परहू क्षणों तुलना

Humoments चिह्न (पहली छवि): सही (दूसरी छवि) पर

[[ 6.82589151e-01] 
[ 2.06816713e-01] 
[ 1.09088295e-01] 
[ 5.30020870e-03] 
[ -5.85888607e-05] 
[ -6.85171823e-04] 
[ -1.13181280e-04]] 

Humoments संकेत:

[[ 6.71793060e-01] 
[ 1.97521128e-01] 
[ 9.15619847e-02] 
[ 9.60179567e-03] 
[ -2.44655863e-04] 
[ -2.68791106e-03] 
[ -1.45592441e-04]] 

इस वीडियो में: http://www.youtube.com/watch?v=O-hCEXi3ymU 4 minut पर मैं उन्होंने देखा बिल्कुल वही प्राप्त किया। मैं कहाँ गलत हूँ?

यहाँ मेरी कोड है:

nomeimg = "Sassatelli 1984 ruotato.jpg" 
#nomeimg = "Sassatelli 1984 n. 165 mod1.jpg" 
img = cv2.imread(nomeimg) 

gray = cv2.imread(nomeimg,0) 
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) 
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(4,4)) 
imgbnbin = thresh 
imgbnbin = cv2.dilate(imgbnbin, element) 

#find contour 
contours,hierarchy=cv2.findContours(imgbnbin,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 

#Elimination small contours 
Areacontours = list() 
    area = cv2.contourArea(contours[i]) 
    if (area > 90): 
     Areacontours.append(contours[i]) 
contours = Areacontours 

print('found objects') 
print(len(contours)) 

#contorus[3] for sing in first image 
#contours[0] for sign in second image 
print("humoments") 
mom = cv2.moments(contours[0]) 
Humoments = cv2.HuMoments(mom) 
print(Humoments) 

उत्तर

13

मुझे लगता है कि आपके नंबर शायद ठीक कर रहे हैं, उनके बीच के मतभेदों मामूली छोटे हैं। पुरुष वीडियो में कहते हैं आप (3min के आसपास) से लिंक:

कुछ सार्थक जवाब हम एक लॉग ले पाने के लिए बदलने

इसलिए यदि हम डेटा आप ऊपर पोस्ट पर -np.sign(a)*np.log10(np.abs(a)) करते हैं, हम मिलती है:

पहले छवि:

[[ 0.16584062] 
[ 0.68441437] 
[ 0.96222185] 
[ 2.27570703] 
[-4.23218495] 
[-3.16420051] 
[-3.9462254 ]] 

दूसरा छवि:

[[ 0.17276449] 
[ 0.70438644] 
[ 1.0382848 ] 
[ 2.01764754] 
[-3.61144437] 
[-2.57058511] 
[-3.83686117]] 

तथ्य यह नहीं है कि वे समान नहीं हैं। आप opencv docs से रास्टराज़ छवियों जो आप तो काफी एक बहुत की प्रक्रिया आकृति है जो आप में पास से कुछ पाने के लिए के साथ बाहर शुरू कर रहे हैं

:।

रेखापुंज छवियों के मामले में, गणना हू के लिए अपरिवर्तनशीलताओं मूल और रूपांतरित छवियां थोड़ा अलग हैं।

+0

अंतिम प्रश्न: 1) मैं कहने के लिए किस श्रेणी का उपयोग कर सकता हूं कि वे प्रत्येक humoment के लिए समान या समान छवियां हैं? 2) मुझे एक समर्थन वेक्टर मशीन या के-एनएन के लिए अपने "कच्चे" HuMoments या "लॉग" Humoments का उपयोग करना है? – postgres

+2

@ पोस्टस्ट्रेस - 1) छवियों का उपयोग करते समय यह कुछ हद तक व्यक्तिपरक है, यह मुख्य रूप से इस बात पर निर्भर करता है कि छवियों को एक मैच माना जाना चाहिए। प्रयोग करने के लिए सबसे अच्छा और एक उचित दहलीज सेट करें। 2) मुझे एसवीएन या केएनएन के बारे में ज्यादा जानकारी नहीं है, लेकिन आप शायद इसका उपयोग कर सकते हैं, इसे आजमाएं और देखें;) – fraxel

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