कई छवियों की समानता की तुलना करने के लिए छवि फिंगरप्रिंट


94

मुझे हर छवि की तुलना बहुत तेजी से करने के लिए कई छवियों (लगभग 100.000 मौजूदा, 1000 नए प्रति दिन, RGB, JPEG, अधिकतम आकार 800x800) के फिंगरप्रिंट बनाने की आवश्यकता है। मैं बाइनरी तुलना विधियों का उपयोग नहीं कर सकता, क्योंकि ऐसी छवियां जो लगभग समान हैं उन्हें पहचाना जाना चाहिए।

सर्वश्रेष्ठ एक मौजूदा पुस्तकालय होगा, लेकिन मौजूदा एल्गोरिदम के लिए कुछ संकेत भी मुझे बहुत मदद करेंगे।


1
पुस्तकालय के लिए भाषा होनी चाहिए?
बेन एस

जवाबों:


57

सामान्य हैशिंग या सीआरसी गणना एल्गोरिदम छवि डेटा के साथ अच्छी तरह से काम नहीं करते हैं। जानकारी की आयामी प्रकृति को ध्यान में रखा जाना चाहिए।

यदि आपको अत्यधिक मजबूत फिंगरप्रिंटिंग की आवश्यकता होती है, जैसे कि एफाइन ट्रांसफ़ॉर्मेशन (स्केलिंग, रोटेशन, ट्रांसलेशन, फ़्लिपिंग) का हिसाब होता है, तो आप इमेज डेटा पर एक रैडॉन ट्रांसफ़ॉर्मेशन का उपयोग कर सकते हैं , जो इमेज डेटा के नॉरमेटिक मैपिंग का उत्पादन कर सकते हैं - प्रत्येक इमेज के लिए इसे स्टोर करें और तो बस उंगलियों के निशान की तुलना करें। यह एक जटिल एल्गोरिथ्म है और दिल के बेहोश होने के लिए नहीं।

कुछ सरल उपाय संभव हैं:

  1. फिंगरप्रिंट के रूप में छवि के लिए एक चमकदार हिस्टोग्राम बनाएं
  2. एक फिंगरप्रिंट के रूप में प्रत्येक छवि के नीचे संस्करण बनाए
  3. बेहतर तुलना गुणवत्ता के लिए एक संकर दृष्टिकोण में तकनीक (1) और (2) को मिलाएं

एक चमकदार हिस्टोग्राम (विशेष रूप से एक जिसे RGB घटकों में अलग किया जाता है) एक छवि के लिए एक उचित फिंगरप्रिंट है - और इसे काफी कुशलता से लागू किया जा सकता है। एक हिस्टोग्राम को दूसरे से घटाकर एक नया हिस्टोरग्राम तैयार किया जाएगा, जो आप यह तय कर सकते हैं कि दो समान चित्र कैसे हैं। हिस्टोग्राम, क्योंकि एकमात्र वितरण और घटना की चमक / रंग की जानकारी का मूल्यांकन बहुत अच्छी तरह से affine परिवर्तनों को संभालते हैं। यदि आप प्रत्येक रंग घटक की चमकदार जानकारी को 8-बिट मान से कम करते हैं, तो 768 बाइट्स स्टोरेज लगभग किसी भी उचित आकार की छवि के फिंगरप्रिंट के लिए पर्याप्त हैं। जब एक छवि में रंग जानकारी में हेरफेर किया जाता है तो ल्यूमिनोसिटी हिस्टोग्राम गलत नकारात्मक उत्पन्न करता है। यदि आप कॉन्ट्रास्ट / ब्राइटनेस, पोस्चराइजेशन, कलर शिफ्टिंग, ल्यूमिनोसिटी इंफॉर्मेशन चेंजेस जैसे ट्रांसफॉर्मेशन लागू करते हैं।

स्केल की गई छवियों का उपयोग करना छवि के सूचना घनत्व को एक स्तर तक कम करने का एक और तरीका है जिसकी तुलना करना आसान है। मूल छवि आकार के 10% से कम की कटौती आम तौर पर उपयोग की जाने वाली बहुत अधिक जानकारी खो देती है - इसलिए 800x800 पिक्सेल की छवि को 80x80 तक छोटा किया जा सकता है और फिर भी सभ्य फिंगरप्रिंटिंग करने के लिए पर्याप्त जानकारी प्रदान की जा सकती है। हिस्टोग्राम डेटा के विपरीत, आपको छवि डेटा के अनिसोट्रोपिक स्केलिंग का प्रदर्शन करना होगा जब स्रोत संकल्पों में अलग-अलग अनुपात होते हैं। दूसरे शब्दों में, एक 80x80 थंबनेल में 300x800 छवि को कम करने से छवि का विरूपण होता है, जैसे कि जब 300x500 छवि के साथ तुलना की जाती है (तो यह बहुत समान है) झूठी नकारात्मक का कारण होगा। जब अंग परिणत होते हैं तब थम्बनेल फ़िंगरप्रिंट भी अक्सर गलत नकारात्मक उत्पन्न करते हैं। यदि आप किसी चित्र को पलटें या घुमाएँ,

दोनों तकनीकों का संयोजन आपके दांव को हेज करने और झूठी सकारात्मक और झूठी नकारात्मक दोनों की घटना को कम करने का एक उचित तरीका है।


सीआरसी के संबंध में, सहमति व्यक्त की। हालाँकि, यदि कोई इसका उपयोग करना चाहता है, तो CRC32 की तुलना में MD5 हैश का उपयोग करना बेहतर है
mloskot

5
आप MD5 का उपयोग नहीं करना चाहेंगे क्योंकि यह एक तरह से क्रिप्टोग्राफ़िक हैश है। आपको एक हैश विधि का उपयोग करने की आवश्यकता है जो एक समान इनपुट के लिए एक समान परिणाम का उत्पादन करेगी ताकि आप सीधे हैश के बीच के अंतरों की तुलना कर सकें।
एजे क्विक

34

स्केल डाउन डाउन छवि वेरिएंट की तुलना में बहुत कम तदर्थ दृष्टिकोण है जो यहां प्रस्तावित किया गया है जो उनके सामान्य स्वाद को बरकरार रखता है, लेकिन जो चल रहा है उसके लिए एक अधिक कठोर गणितीय आधार देता है।

चित्र का Haar तरंगिका लें । मूल रूप से Haar तरंगिका निचली रिज़ॉल्यूशन की छवियों से प्रत्येक उच्च रिज़ॉल्यूशन की छवि के अंतरों का उत्तराधिकार है, लेकिन आप मानचित्रकों के 'ट्री' में कितने गहरे हैं, इसका भार है। गणना सीधी है। फिर एक बार जब आपके पास हार वेवलेट उचित रूप से भारित हो जाए, तो सभी सबसे बड़े गुणांक (पूर्ण मूल्य के संदर्भ में) को फेंक दें, वेक्टर को सामान्य करें और इसे बचाएं।

यदि आप उन सामान्यीकृत वैक्टरों में से दो का डॉट उत्पाद लेते हैं तो यह आपको 1 समान होने के साथ समानता का माप देता है। मैंने यहाँ पर अधिक जानकारी पोस्ट की ।


20

आपको फेश जरूर देखना चाहिए ।

छवि तुलना के लिए यह php प्रोजेक्ट है: https://github.com/kennethrapp/phasher

और मेरी छोटी जावास्क्रिप्ट क्लोन: https://redaktor.me/phasher/demo_js/index.html

दुर्भाग्य से यह "बिटकाउंट"-आधारित है लेकिन घुमाए गए चित्रों को पहचान लेगा। जावास्क्रिप्ट में एक अन्य दृष्टिकोण कैनवास की सहायता से छवि से एक चमकदार हिस्टोग्राम का निर्माण करना था। आप कैनवास पर बहुभुज हिस्टोग्राम की कल्पना कर सकते हैं और अपने डेटाबेस में उस बहुभुज की तुलना कर सकते हैं (जैसे mySQL स्थानिक ...)


क्या यह npm पर है? मैं जावास्क्रिप्ट का उपयोग करके दो छवियों के बीच समानता की तुलना करने का एक तरीका ढूंढ रहा हूं
chovy

हम्म, मैंने सोचा कि यह "एनपीएम के लिए सस्ता है"। यह वास्तव में सिर्फ एक डेमो था जो जल्दी से खरोंच से लिखा गया था। हालांकि जो भी स्रोत के साथ करना चाहते हैं, करने के लिए स्वतंत्र महसूस करें। अगर मैं इसे बना सकता हूँ तो मैं इसे बाद में
देखूँगा

@ SebastianLasse मैंने अभी आपका JS पोर्ट चेक किया है और यह शानदार है! मैं सिर्फ यह चाहता हूं कि आप Compare()पहले इमेज को डाउनलोड करने के बजाय एक इमेज URI को फंक्शन में पास कर सकते हैं । इसके अलावा, मेरे परीक्षण से, "एक बहुत ही समान छवि" के लिए सीमा> 90% होनी चाहिए, न कि 98%।
थुडन

12

कुछ समय पहले मैंने एक ऐसी प्रणाली पर काम किया था जिसमें कुछ समान विशेषताएं थीं, और यह उस एल्गोरिथ्म का एक अनुमान है जिसका हमने अनुसरण किया है:

  1. तस्वीर को ज़ोन में विभाजित करें। हमारे मामले में हम 4: 3 रिज़ॉल्यूशन के वीडियो के साथ काम कर रहे थे, इसलिए हमने 12 ज़ोन का इस्तेमाल किया। ऐसा करने से चित्र के स्रोत चित्रों का संकल्प लिया जाता है।
  2. प्रत्येक ज़ोन के लिए, कुल रंग की गणना करें - ज़ोन में सभी पिक्सेल का औसत
  3. संपूर्ण छवि के लिए, एक समग्र रंग की गणना करें - सभी क्षेत्रों का औसत

इसलिए प्रत्येक छवि के लिए, आप n + 1पूर्णांक मान संग्रहीत कर रहे हैं, जहाँ nआपके द्वारा ट्रैक किए जा रहे ज़ोन की संख्या है।

तुलना के लिए, आपको प्रत्येक रंग चैनल को व्यक्तिगत रूप से देखने की भी आवश्यकता है।

  1. समग्र छवि के लिए, कुल रंगों के लिए रंगीन चैनलों की तुलना करके देखें कि क्या वे एक निश्चित सीमा के भीतर हैं - कहते हैं, 10%
  2. यदि चित्र थ्रेशोल्ड के भीतर हैं, तो प्रत्येक ज़ोन की तुलना करें। यदि सभी ज़ोन भी सीमा के भीतर हैं, तो चित्र एक मजबूत पर्याप्त मेल हैं कि आप कम से कम उन्हें आगे की तुलना के लिए ध्वजांकित कर सकते हैं।

यह आपको उन छवियों को जल्दी से त्यागने देता है जो मेल नहीं खाती हैं; आप अधिक ज़ोन का उपयोग भी कर सकते हैं और / या एल्गोरिथ्म को पुनरावर्ती रूप से लागू कर सकते हैं ताकि मजबूत मिलान आत्मविश्वास प्राप्त कर सकें।


6

आईसी के जवाब के समान - आप कई प्रस्तावों पर छवियों की तुलना करने की कोशिश कर सकते हैं। तो प्रत्येक छवि 1x1, 2x2, 4x4 .. 800x800 के रूप में सहेजी जाती है। यदि न्यूनतम रिज़ॉल्यूशन मेल नहीं खाता (थ्रेसहोल्ड के अधीन), तो आप तुरंत इसे अस्वीकार कर सकते हैं। यदि यह मेल खाता है, तो आप अगले उच्च रिज़ॉल्यूशन पर उनकी तुलना कर सकते हैं, और इसी तरह ।।

इसके अलावा - यदि छवियां किसी भी समान संरचना को साझा करती हैं, जैसे कि चिकित्सा छवियां, तो आप उस संरचना को एक विवरण में निकालने में सक्षम हो सकते हैं जो तुलना करने के लिए आसान / तेज़ है।


मुझे लगता है कि किसी तरह के पेड़ की खोज के लिए यह नक्शे। यह दिलचस्प है।
एंड्रे लास्ज़लो

3

तो आप "फिंगरप्रिंट मिलान" करना चाहते हैं जो "छवि मिलान" से बहुत अलग है। पिछले 20 वर्षों के दौरान फ़िंगरप्रिंट के विश्लेषण का गहराई से अध्ययन किया गया है, और सही पहचान दर ( एफएआर और एफआरआर के उपायों के संबंध में - झूठी स्वीकृति दर और झूठी अस्वीकृति दर ) सुनिश्चित करने के लिए कई दिलचस्प एल्गोरिदम विकसित किए गए हैं ।

मैं आपको बेहतर तकनीकों का पता लगाने के लिए LFA (लोकल फीचर एनालिसिस) वर्ग का बेहतर प्रदर्शन करने के लिए सुझाव देता हूं , जो ज्यादातर मिनुतिया निरीक्षण पर बनाया गया है। Minutiae किसी भी फिंगरप्रिंट की विशिष्ट विशेषताएं हैं, और इसे कई वर्गों में वर्गीकृत किया गया है। एक minutiae मानचित्र के लिए एक रेखापुंज छवि का मानचित्रण वास्तव में ज्यादातर सार्वजनिक प्राधिकरण अपराधियों या आतंकवादियों को दर्ज करने के लिए करते हैं।

आगे के संदर्भों के लिए यहां देखें


क्या आप जानते हैं कि यदि किसी दिए गए बायोमेट्रिक सिस्टम के लिए स्कोर का एक गाऊसी वितरण हो तो आप झूठी स्वीकृति दर की गणना कैसे करें?
GobiasKoffi

ओपी "कई छवियों के फिंगरप्रिंट बनाना चाहता है"। मानव उंगलियों के निशान की छवियों की तुलना न करें।
नवीन


3

2015 तक (भविष्य में वापस ... इस 2009 के प्रश्न पर, जो अब Google में उच्च रैंक पर है) छवि समानता को अन्य शिक्षण तकनीकों का उपयोग करके गणना की जा सकती है। ऑटो एनकोडर के रूप में जाना जाने वाले एल्गोरिदम का परिवार एक वेक्टर प्रतिनिधित्व बना सकता है जो समानता के लिए खोज योग्य है। यहां एक डेमो है


क्या बाइनरी डेटा से फिंगरप्रिंट छवि उत्पन्न करना संभव है?
स्वआर

निश्चित रूप से, इस कार्य के लिए ANN हैं, लेकिन आपका उत्तर वास्तव में किसी भी चीज़ का उत्तर नहीं देता है। प्रश्न है: यह कैसे किया जाता है? लिंक किया गया पृष्ठ किसी भी जानकारी का खुलासा नहीं करता है और "ऑटो एनकोडर" शब्द भी मदद नहीं करता है।
साइमन स्टाइनबर्गर

मूल प्रश्न यह नहीं कहता है कि "यह कैसे किया जाता है?", लेकिन यह कहता है कि "मौजूदा एल्गोरिदम के कुछ संकेत मुझे बहुत मदद करेंगे" जो कि मैंने प्रदान किया है।
एलेक्स आर

आपने एल्गोरिथ्म के लिए "संकेत" लिंक नहीं किया था, वास्तव में जुड़ा हुआ पेज कहता है, "यह काम करता है, लेकिन कोई नहीं जानता है। कृपया परिणाम के बारे में बहुत अधिक उम्मीद न करें" ...
odyth

यह deeplearning4j.org/deepautoencoder#use-cases इस पर अधिक स्पष्टता प्रदान करता है कि ऑटो एनकोडर का उपयोग फिंगर प्रिंट बनाने के लिए कैसे किया जा सकता है और फिर आप उस फिंगर प्रिंट का उपयोग अन्य छवियों में समानताएं खोजने के लिए कर सकते हैं कि कैसे समान कोने हैं।
1

2

एक तरीका यह है कि आप छवि का आकार बदल सकते हैं और तुलना करने के लिए एक छोटे (पिक्सेल-औसत) संस्करण को संग्रहीत करते हुए रिज़ॉल्यूशन को महत्वपूर्ण रूप से (200x200 तक?) ड्रॉप कर सकते हैं। फिर एक सहिष्णुता सीमा को परिभाषित करें और प्रत्येक पिक्सेल की तुलना करें। यदि सभी पिक्सेल का RGB सहिष्णुता के भीतर है, तो आपको एक मेल मिला है।

आपका प्रारंभिक रन O (n ^ 2) है, लेकिन यदि आप सभी मैचों को सूचीबद्ध करते हैं, तो तुलना करने के लिए प्रत्येक नई छवि सिर्फ एक O (n) एल्गोरिदम है (आपको केवल पहले से डाली गई छवि से इसकी तुलना करनी होगी)। यह अंततः टूट जाएगा हालांकि तुलना करने के लिए छवियों की सूची बड़ी हो जाती है, लेकिन मुझे लगता है कि आप थोड़ी देर के लिए सुरक्षित हैं।

400 दिन चलने के बाद, आपके पास 500,000 छवियां होंगी, जिसका अर्थ है (छवि को आकार देने के लिए समय में छूट) 200(H)*200(W)*500,000(images)*3(RGB)= 60,000,000,000 तुलना। यदि प्रत्येक छवि एक सटीक मिलान है, तो आप पीछे पड़ने वाले हैं, लेकिन यह संभवतः मामला नहीं होगा, है ना? याद रखें, आप एक छवि के रूप में एक मैच के रूप में छूट दे सकते हैं जैसे ही एक एकल तुलना आपके दहलीज के बाहर होती है।


2

क्या आप सचमुच हर छवि की तुलना दूसरों से करना चाहते हैं? आवेदन क्या है? शायद आपको कुछ विवरणों के आधार पर छवियों के अनुक्रमण और पुनर्प्राप्ति की आवश्यकता है? फिर उदाहरण के लिए आप मल्टीमीडिया सामग्री विवरण इंटरफ़ेस के लिए MPEG-7 मानक देख सकते हैं। तब आप अलग-अलग छवि विवरणों की तुलना कर सकते हैं, जो कि सटीक लेकिन बहुत तेज नहीं होगा।


शायद संपूर्ण और सीमित
जॉनी

0

ऐसा लगता है कि विशिष्ट इमेज हैशिंग एल्गोरिदम सक्रिय अनुसंधान का एक क्षेत्र है, लेकिन शायद छवि बाइट्स की एक सामान्य हैश गणना ट्रिक करती है।

क्या आप बाइट-समान छवियों की तलाश कर रहे हैं जो एक ही स्रोत से निकली हुई छवियों की तलाश में हैं, लेकिन एक अलग प्रारूप या संकल्प हो सकता है (जो मुझे एक कठिन समस्या के रूप में प्रभावित करता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.