कैसे पता चलेगा कि दो चित्र समान हैं? [बन्द है]


20

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

मेरा पहला विचार एक छवि पिक्सेल की जांच करना और अन्य चित्रों को ढूंढना है जिनके समान निर्देशांक में समान रंगीन पिक्सेल हैं। लेकिन यह विकल्प हमेशा काम नहीं करता है। मान लीजिए कि मैं एक डुप्लिकेट की खोज करता हूं। खोज योग्य वस्तु के लिए मैं एक 8 बिट पीएनजी फ़ाइल चुनता हूं। यह उस छवि के सभी डुप्लिकेट मिल जाएगा, लेकिन केवल 8 बिट PNG, कभी-कभी 8 बिट GIF और शायद ही कभी जेपीईजी (छवियों के एल्गोरिदम के कारण मुझे लगता है?)।

मेरा दूसरा विचार उन सभी छवियों को डुप्लिकेट करना था और उन्हें एक सख्त दो रंग पैलेट में पुनरावृत्ति करना (चलो काले और सफेद कहते हैं) और जैसा कि ऊपर कहा गया है, वैसा ही स्कैन करें। फिर भी जेपीईजी छवि पीएनजी या जीआईएफ प्रारूप के समान 100% नहीं है (ऊपर जैसा कारण?)।

तीसरे सोचा के लिए गया था कमी कितना छवि परिचित होना चाहिए और करने की जरूरत है है पर प्रतिशत वृद्धि कितना रंग भिन्न हो सकते हैं, अवांछित छवि निष्कासन में जिसके परिणामस्वरूप ...

कोई विचार?



हानिपूर्ण संपीड़न वाले प्रारूप उन छवियों को जन्म देंगे जो 100% हारे हुए संस्करणों के समान नहीं हैं। क्या आपके पास एक कमांडलाइन उपयोगिता होनी चाहिए या आप एक गुई कार्यक्रम चला सकते हैं, जो सुझाव देता है, फिर जो चित्र हैं, उन्हें दिखाता है> 90% समान पिक्सल (औसत विचलन की गणना करें)? (और निश्चित रूप से पिक्सेल आकार किसी भी प्रारूप में समान होना चाहिए)
थोरस्टन म्यूलर


1
कितने में एक ही फ़ाइल नाम होगा, लेकिन अलग-अलग एक्सटेंशन?
जेफ

4
उपयोगी उत्तर जिसमें कोडिंग के सप्ताह की आवश्यकता नहीं होती है: stackoverflow.com/questions/596262/…
मैक

जवाबों:


17

अवधारणात्मक हैश का उत्तर हो सकता है:

http://www.phash.org/

एक अवधारणात्मक हैश अपनी सामग्री से विभिन्न विशेषताओं से प्राप्त एक मल्टीमीडिया फ़ाइल का एक फिंगरप्रिंट है। क्रिप्टोग्राफ़िक हैश फ़ंक्शंस के विपरीत, जो इनपुट में छोटे बदलावों के हिमस्खलन प्रभाव पर भरोसा करते हैं, जो आउटपुट में बड़े पैमाने पर बदलाव लाते हैं, अवधारणात्मक हैश एक दूसरे के "करीब" होते हैं यदि सुविधाएँ समान हैं।


9
  1. आयामों की जाँच करें। यदि भिन्न => चित्र समान नहीं हैं।
  2. स्वरूपों की जाँच करें। यदि समान => पिक्सेल द्वारा सटीक तुलना, पिक्सेल का प्रदर्शन करें।
  3. यदि विभिन्न प्रारूप ऐसा करते हैं:

RGB (लाल, हरा, नीला) की तुलना न करें। आधे वजन के रूप में चमक की तुलना करें और अन्य आधे (या 2 / 3rds बनाम 1 / 3rd) के रूप में रंग / रंग की तुलना करें। मूल्यों में अंतर की गणना करें और 'सहिष्णुता' मूल्य के आधार पर वे समान हैं या वे नहीं हैं।

JPEG रंग जानकारी को बहुत अधिक संपीड़ित करता है लेकिन सीमित मूल्यों को बर्बाद नहीं करने की कोशिश करता है।


6

जब मैं कुछ साल पहले के लिए छवियों का एक गुच्छा स्क्रीनिंग कर रहा था तो मैंने पाया कि 8x8 थंबनेल के लिए सब कुछ कम करना और फिर दूरी के वर्ग के आधार पर समानता स्कोर की गणना करना (तीन रंगों का अलग से) थंबनेल के बीच बहुत अच्छा काम किया। ध्यान दें कि आप स्मृति में 8x8 थंबनेल का बहुत कुछ रख सकते हैं ।

वस्तुतः सभी डुप्सेस ने नॉन-डुप्स के नीचे स्कोर किया, केवल कुछ छवियों के बारे में समस्याएं जो बहुत कम विपरीत थीं और कुल मिलाकर समान थीं, हालांकि वास्तविक सामग्री विविध थी (प्रत्येक मामले में पृष्ठभूमि समुद्र तट रेत थी।)

यह उन छवियों को पकड़ने में भी प्रभावी था, जो फ़ाइल आकार में कटौती करने के लिए किसी को छोड़कर किसी पर संकल्प या गुणवत्ता को कम कर दिया था।


1
आमतौर पर YUV RGB से बेहतर है, कलर बैलेंस में मामूली बदलाव के प्रति कम संवेदनशील है।
मार्टिन बेकेट

संभावित मैचों के पूर्व चयन के लिए थंबनेल की यह तकनीक वैध है, YUV एक अच्छा स्पर्श है और मैंने देखा है कि यह एक ही कारणों के लिए एक शुद्ध luminance मानचित्र में बदल गया है।
पैट्रिक ह्यूजेस

@ मर्टिन बेकेट: आरजीबी अंतर के वर्गों का योग मैंने पहली कोशिश की थी और यह काफी अच्छी तरह से काम किया था कि मैंने इसे सुधारने की कोशिश नहीं की थी - और उस समय यह संपादन के साथ नकल पकड़ रहा था। दोहे की सख्त परिभाषा के साथ यह काफी अच्छा था कि मैंने इसे ऑटो-डिलीट कर दिया।
लोरेन Pechtel

@ लोरेन, अगर वे एक ही छवि के मामूली पिक्सेल संपादन थे जो काम करना चाहिए। यह सिर्फ इतना है कि जेपीईजी जैसी चीजें YUV कलर स्पेस से ज्यादा RGB को गड़बड़ कर देती हैं। बस एक टिप ;-)
मार्टिन बेकेट

स्वभाव से, बहुत गहरे चित्रों में कम योग के वर्ग-अंतर होते हैं, भले ही वे समान न हों। दहलीज को चित्र की औसत चमक के साथ समायोजित किया जा सकता है। मैं ओ (एन ^ 2) छवि तुलना से बचने के लिए पूर्व फ़िल्टर के रूप में इस एवीजी चमक का उपयोग करता हूं, इसलिए यह पहले से ही है।
गेब्रियल

1

शायद आपको कुछ कोड लिखना चाहिए जो समानता के लिए छवियों को स्कैन करता है। आप सभी चित्रों को ARGB प्रारूप में बदल सकते हैं और उनकी तुलना कर सकते हैं। (याद में)

एक संभावित दृष्टिकोण इस तरह से हो सकता है: चित्रों को ज़ोन में विभाजित करें। समानता के लिए दो चित्रों की तुलना करने के लिए ज़ोन के औसत रंग और / या चमक को स्कैन करें।

यदि 90% से अधिक क्षेत्र कहते हैं, तो आपने विलोपन उम्मीदवार सूची में जाने के लिए एक को चुना। इस तरह आपके पास उम्मीदवारों की एक सूची है। आप तुलना करने के लिए क्षैतिज और ऊर्ध्वाधर चित्रों में चित्रों को वर्गीकृत करने के लिए चित्रों के पहलू अनुपात का उपयोग कर सकते हैं। इस तरह आप हानिपूर्ण एल्गोरिदम को पिक्सेल द्वारा सही रंग पिक्सेल को पुन: प्रस्तुत नहीं करने के लिए क्षतिपूर्ति कर सकते हैं। आप प्रोग्राम को रात भर चलाते हैं, और सुबह आपने इसे किया है :) .Net में यह GDI + lib से काफी आसानी से किया जा सकता है।

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