मैं यह कैसे बता सकता हूं कि दो छवियों के बीच क्या परिवर्तन हुआ?


28

उदाहरण के लिए, जेपीईजी संपीड़न के बारे में हाल ही में बातचीत के लिए मैं पिक्सेल के लिए पिक्सेल की तुलना करना चाहता था जो दो जेपीईजी (संपीड़न स्तर 100 के साथ एक, और संपीड़न स्तर 95 के साथ एक) के बीच बदल गया।

बिना थकाऊ कस्टम सॉफ्टवेयर प्रोग्रामिंग के मैंने जो बदलाव किया है उसके अच्छे दृश्य मानचित्र कैसे उत्पन्न करूं?


2
इसे उत्तर के रूप में प्रस्तुत नहीं करना क्योंकि यह शायद तस्वीरों के लिए व्यवहार्य समाधान नहीं है, लेकिन GitHub (एक प्रोग्रामर की साइट) में छवियों की तुलना करने के कुछ दिलचस्प तरीके हैं: github.com/cameronmcefee/Image-Diff-View-Modes/commit/… क्लिक करके देखें "2-अप", "स्वाइप", "प्याज त्वचा" और "अंतर"।
हेनरिक एन

जवाबों:


35

फ़ोटोशॉप + परतें FTW। (हां, आप समान फ़ंक्शन के साथ जिम्प, या किसी अन्य संपादन सॉफ़्टवेयर का उपयोग कर सकते हैं।)

अपनी आधार छवि के साथ शुरू करें, ऊपर के मामले में, मैंने jpeg गुणवत्ता 100 छवि का उपयोग किया।

  1. एक नई परत बनाएं
  2. उस लेयर में दूसरी इमेज पेस्ट करें
  3. लेयर स्टाइल को "अंतर" पर सेट करें (नीचे 1 छवि में बाएं गुलाबी तीर देखें)
  4. ऊपर एक प्रभाव परत बनाएँ जो (परत> नई समायोजन परत> थ्रेसहोल्ड)
  5. दहलीज पर प्रभाव सेट करें (नीचे दी गई छवि में सही गुलाबी तीर देखें)
  6. थ्रेशोल्ड मान को 1 पर सेट करें

परिणामी छवि में, कोई भी पिक्सेल जो किसी भी तरह से दोनों छवियों के बीच भिन्न होगा वह सफेद होगा। आप इसे थ्रेसहोल्ड मान में परिवर्तन करके "थोड़ी अलग" होने की अनुमति देने के लिए समायोजित कर सकते हैं।

उदाहरण Lightroom से jpeg 92 और 100 के बीच अंतर का एक बहुत दिखा रहा है। फ़ोटोशॉप परतों के साथ LR से jpeg 92 और 100 की तुलना करना

उदाहरण 95 और 100 के बीच कोई अंतर नहीं दिखा रहा है। फ़ोटोशॉप परतों के साथ LR से jpeg 95 और 100 की तुलना करना

ऐसा नहीं है कि सिर्फ एक बाइनरी दिखा रहा है "बदल गया है या नहीं", क्या होगा यदि आप इस पर अधिक विवरण चाहते हैं कि यह कितना बदल गया है, रंग चैनल द्वारा कहो?

  1. दहलीज समायोजन परत को घटता समायोजन परत से बदलें।
  2. वक्र संपादित करें
  3. शो क्लिपिंग चालू करें
  4. निचले दाएं कोने के नीचे इनपुट सफेद हैंडल को पकड़ो और इसे बाईं ओर खींचें, जहां तक ​​आप जा सकते हैं
  5. धीरे-धीरे दाईं ओर वापस जाएँ जब तक आपको कोई क्लिपिंग दिखाई न दे (पूर्वावलोकन छवि सभी काले रंग की है)
  6. वापस क्लिपिंग बंद करें और वक्र परिवर्तन को बचाएं

परिणामी पिक्सेल जितना शानदार होगा, उतना अधिक वे उस रंग में भिन्न होंगे। हालांकि नकारात्मक पक्ष यह है कि आप बहुत सारे भूरे रंग की मिट्टी के साथ समाप्त हो रहे हैं ... इसलिए कभी-कभी यह देखने के लिए कि यह अंतर करना आसान है कि कहां अंतर है। इसलिए मैं दोनों का निर्माण करता हूं और टॉगल करता हूं जो एक दिखाई देता है।

अंतर के अधिक वर्णनात्मक दृश्य


Newb प्रश्न, लेकिन आप चरण 4 कैसे करते हैं, "ऊपर एक प्रभाव परत बनाएं"? कहीं भी नहीं मिल सकता। यह भी 7 साल बाद है और मैं पेरैप्स के लिए नवीनतम संस्करण का उपयोग कर रहा हूं उन्होंने नाम भी बदल दिया है?
व्हाइटनीलैंड

14

यदि आप फ़ोटोशॉप का उपयोग करते हैं, तो यहां बताया गया है कि मैं यह कैसे करूंगा:

दो jpegs को एक ही psd फ़ाइल में, दो अलग-अलग परतों में रखें। उन्हें वास्तव में ओवरलैप करना चाहिए, क्योंकि उनके आयाम समान हैं। (जो ऊपर चला जाता है कोई फर्क नहीं पड़ता)।

लेयर ब्लेंडिंग मोड को "अंतर" पर सेट करें। आपको ज्यादातर काला परिणाम दिखाई देगा। दो मूल परतों के बीच गुणवत्ता के अंतर पर निर्भर करता है जो आपको शोर के कम या ज्यादा दिखाई दे सकते हैं।

यहाँ छवि विवरण दर्ज करें


जब आप उस तरह एक बड़े काले शून्य के साथ छोड़ दिए जाते हैं तो अंतर केवल वास्तव में बहुत मदद नहीं करता है। :)
कैबबी

@cabbey यकीन है, 100% की तुलना में 95% आप सबसे अधिक संभावना एक ठोस काला मिलेगा। लेकिन यह वही है जो आपका सवाल पूछ रहा था? आपके स्वामी उत्तर में, आप मूल से मूल्यों की तुलना कर रहे हैं, जिससे उन्हें अब मूल संपीड़न सेटिंग्स नहीं मिलती हैं।
जिन

आप किसी भी तुलना के बारे में लगभग ठोस काले हो जाते हैं, क्योंकि मतभेद बहुत कम हैं। अंतर के बाद की दहलीज / वक्र परत संपीड़न सेटिंग्स के लिए कुछ भी नहीं करती है, यह सिर्फ उस काले सूप के निचले सीमा के दृश्य को एड्स करता है जो अंतर तैयार करता है। (मैं 100% निश्चित नहीं हूं कि आपका क्या मतलब है, इसलिए मैं वहां एक अलग दिशा में जा सकता हूं ....)
कैबबी

@ cabbey यदि आप 2 छवियों के बीच अंतर के शुद्ध बिट-वार ऑपरेशन के लिए पूछ रहे हैं, तो "अंतर" सम्मिश्रण मोड आपको देता है। जब आप दहलीज / वक्र को समायोजित करते हैं, हालांकि परिणाम नग्न आंखों के लिए अधिक स्पष्ट होता है, लेकिन यह क्या बदल गया है इसका सटीक प्रतिनिधित्व नहीं है। जब आप ऐसा करते हैं, तो आप 100% की तुलना 95% से नहीं कर रहे हैं।
जिन

बिल्कुल तुम हो। संपीड़न के स्तर ने दूसरी फोटोशॉप की छवि को डिस्क से आंतरिक बफ़र्स में लोड करना बंद कर दिया है, यह अब मेमोरी में एक असम्पीडित पिक्सेल सरणी है ... यदि वे पिक्सेल वहां मिल गए क्योंकि छवि वहां एक वर्ग बूँद थी या क्योंकि वे एक विरूपण साक्ष्य हैं संपीड़न स्तर प्रासंगिक नहीं है।
कैबबी

13

सभी इमेज प्रोसेसिंग पैकेजों को यह आसान बनाना चाहिए। यदि आप इस प्रणाली का उपयोग करते हैं, तो मैं आपको दिखाऊंगा कि यह गणितज्ञ में कैसे किया जाता है। मैथेमेटिका एक प्रोग्रामिंग भाषा है, लेकिन इस प्रकार के जोड़तोड़ करना वास्तव में आसान है, इसलिए यदि आपके पास इसका उपयोग है (जैसे कि एक विश्वविद्यालय साइट लाइसेंस के माध्यम से), तो मैं आपको इसे एक बार देने की सलाह देता हूं!

सबसे पहले, छवि आयात करें:

img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]

JPEG कम्प्रेशन का उपयोग करके इसे पुनः प्राप्त करें

img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]

गणितज्ञ ग्राफिक्स

अब पिक्सेल मानों का अंतर लें, उन्हें नकारात्मक बिंदुओं को संरक्षित करने के लिए पहले फ्लोटिंग पॉइंट नंबरों में परिवर्तित करना।

diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]

गणितज्ञ ग्राफिक्स

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

ImageAdjust[diff]

गणितज्ञ ग्राफिक्स

ImageDifferenceदो छवियों का पूर्ण अंतर देता है, और कोई नकारात्मक संख्या नहीं पैदा करता है। यह वह ऑपरेशन है जो आपको इमेज प्रोसेसिंग पैकेज, विशेष रूप से GUI वाले (फ़ोटोशॉप, GIMP) में मिलने की संभावना है।

ImageDifference[img, img2]

गणितज्ञ ग्राफिक्स

हम एक आरजीबी चैनल भी ले सकते हैं, उदाहरण के लिए लाल एक, और 'विरोध' रंगों का उपयोग करके सकारात्मक और नकारात्मक अंतर की कल्पना करें:

ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

गणितज्ञ ग्राफिक्स

यहाँ एक ही बात है, 5 बार अंतर के साथ। जेपीईजी आर्टिफैक्ट अब अधिक पहचानने योग्य हैं।

ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

गणितज्ञ ग्राफिक्स

एक प्रोग्रामिंग भाषा का उपयोग करने का लाभ यह है कि हम इसे आसानी से स्वचालित कर सकते हैं और देख सकते हैं कि 0.1 और 1.0 के बीच "संपीड़न स्तरों" के लिए अंतर कैसे बदलता है:

Grid@Partition[Table[
   ArrayPlot[
    0.5 + ImageData[
      First@ColorSeparate[
        ImageSubtract[Image[img, "Real"], 
         Image[ImportString@
           ExportString[img, "JPEG", "CompressionLevel" -> c], 
          "Real"]], "Red"]], ColorFunction -> "RedGreenSplit", 
    ColorFunctionScaling -> False],
   {c, 0.1, 1, 0.1}
   ], 5]

गणितज्ञ ग्राफिक्स


इसकी हमेशा एक स्क्रिप्टेड / स्वचालित विकल्प देखने के लिए अच्छा है! :)
jrista

5

आप Imagemagick कमांड लाइन टूल का उपयोग कर सकते हैं।

composite imagesrc1.jpg imagesrc2.jpg -compose difference diffs.jpg

प्रत्येक RGB चैनल के लिए मतभेदों का पूर्ण मान प्रदान करेगा।



0
  1. GIMP या फ़ोटोशॉप में किसी एक चित्र को खोलें।
  2. पहले एक के ऊपर एक नई परत के रूप में दूसरी छवि जोड़ें।
  3. "अंतर" के लिए शीर्ष परत के मिश्रण मोड को सेट करें

परिणामस्वरूप छवि में काले हिस्से दिखाते हैं कि मूल चित्र समान हैं और कुछ भी हल्का अंतर दिखाता है।


जब आप उस तरह एक बड़े काले शून्य के साथ छोड़ दिए जाते हैं तो अंतर केवल वास्तव में बहुत मदद नहीं करता है। :)
कैबबी

आप हमेशा परिणामी छवि पर स्तरों को समायोजित कर सकते हैं। जब भी मैंने इस तकनीक का उपयोग किया है, मेरे पास बहुत सारी तस्वीरें हैं जो बदलावों को देखने में सक्षम हैं :)
दान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.