ubuntu ImageMagick तुलना करें: PSNR परिणाम से सफेद मैचों को अनदेखा करें



image-processing diff (2)

मैं दो समान रंग पीएनजी फाइलों की compare करने के लिए compare कर रहा हूँ उन्हें ~ 27 के एक पीएसएनआर मूल्य मिलता है

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

क्या यह किसी अन्य टूल में compare करके या फैक्टरिंग के द्वारा ऐसा करने का एक तरीका है?

मैंने सेटिंग को सफेद करने के लिए -transparent-color की कोशिश की, लेकिन इसका कोई प्रभाव नहीं पड़ा।

यह मेरा आदेश है:

compare -compose src -metric PSNR img1.png img2.png diff.png

संपादित करें:

compare --version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org

convert --version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org

सफेद पिक्सेल की अनदेखी के बारे में मेरा विचार कचरा हो सकता है, लेकिन मैं अब भी बेहतर तुलना हासिल करना चाहता हूं।

स्पष्टीकरण देना:
इस स्थिति की कल्पना करें: आप दो छवियों की तुलना करते हैं, वे थोड़ा भिन्न होते हैं फिर आप उन छवियों के लिए एक बड़ी सफेद सीमा जोड़ें आप फिर से भिन्न होते हैं और पाते हैं कि परिणामस्वरूप पीएसएनआर मूल्य में कुछ राशि बढ़ी है। मैं क्या चाहता हूं यह एक नकारने का तरीका है। जाहिर है सफेद सीमाएं दोनों छवियों में समान हैं ...


मार्क सेशेल की तरह, मैं पूरी तरह से नहीं समझता कि आपका असली इरादा क्या है आप किसी भी (लिंक) नमूना छवियां प्रदान नहीं करते हैं जो कि आप समझ सकते हैं कि आप क्या कर रहे हैं।

तैयारी

यही कारण है कि मैं खुद को 4 नमूना छवियों को बनाया है यहां पहली जोड़ी है:

  • बाएं एक JPEG है
  • सही एक पीएनजी है

मतभेद कम हैं - आप यहां नग्न आंखों के साथ उनको पुन: प्रस्तुत किए जाने पर शायद ही मुश्किल पाएंगे। दोनों छवियां 482x642 पिक्सल हैं:

यहाँ दूसरी जोड़ी आती है फिर,

  • बाएं एक JPEG है;
  • सही एक पीएनजी है

इन दोनों को प्रारंभिक जोड़ी के चारों ओर एक सफेद फ़्रेम को जोड़कर 1002x1002 पिक्सल तक बढ़ा दिया गया है। निम्नलिखित प्रजनन में वे इस वेब पेज के अंदर अलग-अलग स्केलिंग के कारण छोटे दिखाई देते हैं:

इसलिए दूसरी जोड़ी के "महत्वपूर्ण" भागों काले फ़्रेमों में निहित हैं। बाहरी बाड़ों पर सफेद फ़्रेम समान है।

तुलना

अब दोनों जोड़े की तुलना करने देता है। लेकिन मैं सिर्फ पीएसएनआर मीट्रिक की तुलना को सीमित नहीं करना चाहता। मैं सभी उपलब्ध मीट्रिक देखना चाहता हूं हम इस आदेश के साथ उपलब्ध मीट्रिक सूचीबद्ध कर सकते हैं:

compare -list metric
 AE
 Fuzz
 MAE
 MEPP
 MSE
 NCC
 PAE
 PHASH
 PSNR
 RMSE

पहली जोड़ी के लिए मीट्रिक वापस करने की मेरी आज्ञा यह है:

for metric in $(compare -list metric) ; do  \
   echo -n "Metric ${metric} :  " ;         \
   compare                                  \
      -metric ${metric}                     \
       http://i.stack.imgur.com/TEjAd.jpg   \
       http://i.stack.imgur.com/p8JsE.png   \
       null: ;                              \
   echo ;                                   \
done

पहली जोड़ी ( "महत्वपूर्ण" भाग केवल ) के लिए परिणाम (थोड़ा पुनः स्वरूपित) यहां है:

Metric AE    :  123789
Metric Fuzz  :     948.522      (0.0144735)
Metric MAE   :     381.318      (0.00581854)
Metric MEPP  :       3.5399e+08 (0.000209349, 0.32549)
Metric MSE   :      13.7285     (0.000209483)
Metric NCC   :       0.998307
Metric PAE   :   21331          (0.32549)
Metric PHASH :       5.43771
Metric PSNR  :      36.7885
Metric RMSE  :     948.522      (0.0144735)

दूसरी जोड़ी के लिए मीट्रिक वापस करने की मेरी आज्ञा यह है:

for metric in $(compare -list metric) ; do  \
   echo -n "Metric ${metric} :  " ;         \
   compare                                  \
      -metric ${metric}                     \
       http://i.stack.imgur.com/gBruS.jpg   \
       http://i.stack.imgur.com/8NJeB.png   \
       null: ;                              \
   echo ;                                   \
done

दूसरी जोड़ी के लिए परिणाम (थोड़ा पुनः स्वरूपित) है ( जोड़ा गया विशाल सफेद फ्रेम द्वारा अंतरित किया गया "अंतर" ):

Metric AE    :  133609
Metric Fuzz  :     611.952       (0.00933779)
Metric MAE   :     143.849       (0.00219499)
Metric MEPP  :       4.33273e+08 (8.71895e-05, 0.341176)
Metric MSE   :       5.71428     (8.71944e-05)
Metric NCC   :       0.998137
Metric PAE   :   22359           (0.341176)
Metric PHASH :       0.360076
Metric PSNR  :      40.5951
Metric RMSE  :     611.952       (0.00933779)

यहां एक सामान्य तालिका में दोनों परिणाम दिए गए हैं:

+==============+=======================================+=========================================+
| Metric Type  | Results for "important" image parts   | Results including "unimportant" frames  |
+==============+=======================================+=========================================+
| Metric AE    | 123789                                | 133609                                  |
| Metric Fuzz  |    948.522      (0.0144735)           |    611.952       (0.00933779)           |
| Metric MAE   |    381.318      (0.00581854)          |    143.849       (0.00219499)           |
| Metric MEPP  |      3.5399e+08 (0.000209349, 0.32549)|      4.33273e+08 (8.71895e-05, 0.341176)|
| Metric MSE   |     13.7285     (0.000209483)         |      5.71428     (8.71944e-05)          |
| Metric NCC   |      0.998307                         |      0.998137                           |
| Metric PAE   |  21331          (0.32549)             |  22359           (0.341176)             |
| Metric PHASH |      5.43771                          |      0.360076                           |
| Metric PSNR  |     36.7885                           |     40.5951                             |
| Metric RMSE  |    948.522      (0.0144735)           |    611.952       (0.00933779)           |
+==============+========================================+=========================================+

नोट: पीएसएनआर मीट्रिक के साथ दो समान छवियों की तुलना करने से एक inf (infinitiv) मान होगा।

अब अपने खुद के निष्कर्ष निकालें ...

विचार-विमर्श

तुलना मैट्रिक्स को समझना एक सीधे आगे संबंध नहीं है

पीएसएनआर की आपकी समझ थोड़ा सा लगता है, कैसे मैं अपने ' संपादित करें: ' की व्याख्या करता हूं

स्पष्टीकरण देना:
इस स्थिति की कल्पना करें: आप दो छवियों की तुलना करते हैं, वे थोड़ा भिन्न होते हैं फिर आप उन छवियों के लिए एक बड़ी सफेद सीमा जोड़ें आप फिर से भिन्न होते हैं और पाते हैं कि परिणामस्वरूप पीएसएनआर मूल्य में कुछ राशि बढ़ी है।

क्योंकि पीएसएनआर के लिए बढ़ते मूल्य का मतलब है कि दो तुलनात्मक छवियां एक-दूसरे के लिए थोड़ा अधिक समान हो गई हैं! (बेशक, छवियों के चारों ओर सफेद (या अन्यथा रंग के) तख्ते / सीमाओं को निकालने का आपका इरादा अभी भी उचित दृष्टिकोण है। यह देखने के लिए कि कैसे करें, मेरे उत्तर के अंत में देखें ...)

छवि तुलना मेट्रिक्स के लिए बेहतर महसूस करने के लिए, आपको कुछ सरल "छवियाँ" पहले बनाना चाहिए। फिर इनके साथ प्रयोग करना शुरू करें।

यहां एक सुझाव है कि मोनो-रंग वाले "पैच" की एक श्रृंखला बनाने के लिए, जो प्रत्येक का आकार 100x100 पिक्सल है:

for col in black white blue green red; do               \
  convert -size 100x100 xc:${col} xc-100px-${col}.png ; \
done

प्रायोगिक कार्य: प्रत्येक दूसरे के खिलाफ प्रत्येक 100x100 पिक्सेल पैच की तुलना करें।
प्रशन:

  • अगर आप "ब्लैक-नीले" या "रेड-ग्रीन" मेट्रिक्स के विरुद्ध "ब्लैक-व्हाइट" मैट्रिक्स को जोड़ते हैं तो क्या उल्लेखनीय है?
  • क्या आपके कुछ परिणाम अप्रत्याशित हैं? ऐसा क्यों?

अब 200x200 पिक्सल के साथ पैच के लिए ऐसा ही करें:

for col in black white blue green red; do               \
  convert -size 200x200 xc:${col} xc-200px-${col}.png ; \
done

प्रायोगिक कार्य: प्रत्येक दूसरे के खिलाफ 200x200 पिक्सल पैच की तुलना करें
प्रशन:

  • क्या 200x200 छवियों के संबंधित "रंग 1-रंग 2" मीट्रिक 100x100 छवियों के समान "रंग 1-रंग 2" मीट्रिक से विचलित करते हैं?
  • क्या कुछ मीट्रिक हैं जो समान परिणाम अपने संबंधित काउंटर पार्ट्स में वापस करते हैं? ऐसा क्यों?

अब 100x100 पिक्सेल पैच में से प्रत्येक के चारों ओर एक 50 पिक्सल चौड़ी लाल फ्रेम जोड़ें परिणामस्वरूप छवियां 200x200 पिक्सल के आकार का भी होंगी:

for img in xc-100px-*.png ; do \
   convert                     \
     ${img}                    \
    -mattecolor red            \
    -frame 50x50               \
     redframed-${img} ;        \
done

प्रायोगिक कार्य: अपने खुद के तुलनात्मक जोड़े बनाएं। (आप जानते हैं कि 200x200 पिक्सेल 'मोनो-रंग' पैच की 200x200 पिक्सेल 'रेडफ्रैमेड' पैच के साथ भी तुलना की जा सकती है ...)
प्रशन:

  • उचित तुलना क्या हैं?
  • क्या आप जानते हैं कि -metric phash केवल एक ही है जो आपको विभिन्न आयामों ( चौड़ाई x ऊँचाई ) का उपयोग करने वाली छवियों की तुलना करने की अनुमति देता है?

छवियों के चारों ओर एक मोनो-रंगीन फ्रेम 'ट्रिम' कैसे करें

आप एक ऐसी छवि के चारों ओर किसी भी 'फ्रेम' को निकाल सकते हैं जो समान रूप से रंगीन पिक्सल से बना है छवि ऑपरेटर -trim लिए इसे स्वचालित रूप से प्राप्त करेगा (यह सफेद रंगों से भिन्न रंगों के लिए काम करता है।)

convert reframed-xc-100px-blue.png -trim +repage output.png

identify redframed-xc-100px-blue.png  output.png
 redframed-xc-100px-blue.png PNG 200x200 200x200+0+0 8-bit sRGB 3c 322B 0.000u 0:00.000
               output.png[1] PNG 100x100 100x100+0+0 8-bit sRGB 2c 285B 0.000u 0:00.000


अपडेट किया गया

ठीक है, हम उन क्षेत्रों का मुखौटा कैसे बनाते हैं जिन्हें आप पहले से तुलना करना चाहते हैं? इसलिए, यदि आप ऐसे क्षेत्रों की अनदेखी करना चाहते हैं जहां दोनों चित्र सफेद हैं, तो आप यह कर सकते हैं:

convert a.png b.png                   \
       -colorspace gray               \
       -compose multiply -composite   \
       -threshold 65534               \
       -negate PNG8:mask.png

फिर, जब आप अपनी तुलना करते हैं, तो पहले छवियों को मुखौटा दें:

convert \( a.png mask.png -compose copy-opacity -composite \) \
        \( b.png mask.png -compose copy-opacity -composite \) \
        -metric PSNR -compare diff.png

या के साथ इस तरह की compare में bash:

compare -metric PSNR \
    <(convert a.png mask.png -compose copy-opacity -composite PNG:-) \
    <(convert b.png mask.png -compose copy-opacity -composite PNG:-) \
    diff.png

मैं अभी भी नहीं देख रहा कि आप क्या करने की कोशिश कर रहे हैं, और मैं अभी भी अपनी छवियों को देखना चाहूंगा और आप क्या उम्मीद करते हैं ... हालांकि, मैंने आपकी सलाह ली है और इस पेज से दो समान अक्षरों वाले दो समान चित्र बनाए हैं शब्द बाहर खाली blanked शब्द से

a.png

b.png

इसलिए, अगर मैं उनकी तुलना करता हूं, तो मुझे यह मिलता है:

convert a.png b.png -metric PSNR -compare -format "%[distortion]" info:
33.4539

और इस छवि:

या अगर मैंने ऐसा किया है, तो मुझे यह मिलता है:

convert -fill black \( a.png +opaque white \) \( b.png +opaque white \) -metric PSNR -compare -format "%[distortion]" info:
7.25418

और इस छवि:

परन्तु मैं अब भी कोई नहीं हूँ जो आप के बारे में समझदार है क्योंकि मैंने सब काम किया है और आपने मुझे जवाब नहीं दिया है

मूल उत्तर

यह बेहतर होगा यदि आप अपनी छवियों को पोस्ट कर सकते हैं, तो हम देख सकते हैं कि आप क्या कह रहे हैं, लेकिन तुलना करने के लिए इस तरह convert करने का प्रयास करें:

convert a.png b.png -metric PSNR -compare diff.png

तो आप पूर्व-प्रक्रिया में इस तरह जोड़ सकते हैं कि तुलना करने से पहले सभी सफेद क्षेत्रों को काला करें। आप लगभग-सफेद रंगों को पकड़ने के लिए -fuzz 10% भी जोड़ सकते हैं।

convert -fill black 
   \( a.png +opaque white \) \
   \( b.png +opaque white \) \
   -metric PSNR -compare diff.png




diff