ImageMagick का उपयोग कर एक छवि "डिफ"




image-processing diff (2)

मैं दो छवियों के बीच अंतर कैसे प्राप्त कर सकता हूं? मेरे पास मूल छवि है। किसी ने मूल छवि के सटीक डुप्लिकेट पर लिखा है। अब, मुझे मूल की तुलना छवि पर लिखे गए और छवि प्रारूप में केवल लेखन को निकालने की आवश्यकता है।

उदाहरण: मेरे पास एक घर की तस्वीर है। किसी ने एक प्रतिलिपि ली और कॉपी पर "हैलो!" लिखा। मैं किसी भी तरह से दो चित्रों की तुलना करना चाहता हूं, घर को हटा सकता हूं, और "हैलो!" शब्दों की एक छवि के साथ छोड़ा जाना चाहता हूं।

क्या यह ImageMagick के साथ संभव है? मुझे पता है कि छवियों के बीच सांख्यिकीय अंतर पाने के तरीके हैं, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं।


जबकि compare कई अनुप्रयोगों के लिए एक अच्छा काम करता है, मैंने पाया कि कभी-कभी मैं एक अलग दृष्टिकोण पसंद करता हूं, खासकर जब छवियों की तुलना करना जो अधिकतर ग्रेस्केल हैं:

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

विचार निम्नानुसार है: file1.png और file2.png दोनों को ग्रेस्केल में कनवर्ट करें। फिर परिणामस्वरूप छवि के लाल चैनल के रूप में पहला, हरा चैनल के रूप में दूसरा। ब्लू चैनल इन दोनों से darken कंपोज़ ऑपरेटर का उपयोग करके बनाया गया है, जिसका अनिवार्य रूप से न्यूनतम लेना है।

तो दोनों छवियों में सफेद चीजें सफेद रहती हैं। दोनों छवियों में काले रंग की चीजें काले रहती हैं। चीजें जो पहली छवि में सफेद होती हैं लेकिन दूसरी मोड़ में काला लाल होती है, और चीजें जो दूसरे में सफेद होती हैं लेकिन पहली बार हरे रंग में काले होती हैं।

परिणाम आपको एक अच्छी तरह से रंग-कोडित छवि देता है जहां आप आसानी से पहले इनपुट के साथ हरे रंग को जोड़ सकते हैं और दूसरे के साथ लाल। यहां एक उदाहरण दिया गया है जहां मैं KaTeX से लाटेक्स से आउटपुट की तुलना करने के लिए इसका उपयोग कर रहा हूं (इससे पहले कि मैंने इसे बेहतर बनाने के लिए कुछ बग तय किया हो):

आप कुछ कहां बदलते हैं और फिर उपरोक्त का उपयोग करके यह देखने के लिए compare करके, दृष्टिकोणों को जोड़ सकते हैं कि यह कैसे बदल गया है।


मेरे अपने पसंदीदा ये हैं:

 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

ऊपर दिए गए 2 आदेशों के बीच एकमात्र अंतर: पहला व्यक्ति दो छवियों के बीच एक पीएनजी फ़ाइल के रूप में दृश्य अंतर दिखाता है, दूसरा पीडीएफ के रूप में।

परिणामस्वरूप diff फ़ाइल सभी पिक्सल प्रदर्शित करती है जो लाल रंग में भिन्न होती हैं। जो अपरिवर्तित हैं वे सफेद दिखाई देते हैं।

छोटा एवं सुन्दर।

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

अगर आपको किसी कारण से डिफ़ॉल्ट डिफॉल्ट (72 डीपीआई) की तुलना में उच्च रिज़ॉल्यूशन की आवश्यकता है - तो बस उचित- -density पैरामीटर जोड़ें:

 compare -density 300 image1 image2 -compose src diff.jpeg

इलस्ट्रेटेड उदाहरण

उपरोक्त आदेश की विविधताओं के परिणामों के कुछ उदाहरण यहां दिए गए हैं। नोट: तुलना की गई दो फाइलें पीडीएफ फाइलें भी थीं , इसलिए यह इनके साथ भी काम करती है (जब तक वे 1-पेजर्स हैं)!

बाएं: पाठ केंद्र के साथ छवि : मूल छवि सही: लाल पिक्सेल में मतभेद (= पाठ)।

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

यह वही आदेश है जिसे मैंने ऊपर बताया था।

बाएं: पाठ केंद्र के साथ छवि : मूल छवि सही: 'seagreen' पिक्सेल में मतभेद।

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

यह आदेश डिफ़ॉल्ट लाल के बजाय अंतर पिक्सेल 'seagreen' बनाने के लिए पैरामीटर जोड़ता है।

बाएं: पाठ केंद्र के साथ छवि : मूल छवि सही: ब्लू diffs (लेकिन डब्ल्यू। कुछ संदर्भ पृष्ठभूमि) एल

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

यह आदेश -compose src भाग को हटा देता है - परिणाम compare की डिफ़ॉल्ट व्यवहार है जो एक हल्की पृष्ठभूमि के रूप में 2 अलग-अलग छवियों में से पहला है। (इस बार भिन्न पिक्सेल को नीले रंग में दिखाई देने के लिए जोड़ा पैरामीटर के साथ।)





difference