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

enter image description here enter image description here

मैं पाइथन में प्रत्येक छवि के एक्सपोजर को सामान्य बनाना चाहता हूं। मैंने सोचा कि मैं निम्नलिखित भोले दृष्टिकोण के साथ ऐसा कर सकता हूं, जो प्रत्येक पिक्सेल मान को 0 और 255 के बीच केंद्रित करने का प्रयास करता है:

from scipy.ndimage import imread
import sys

def normalize(img):
  '''
  Normalize the exposure of an image.
  @args:
    {numpy.ndarray} img: an array of image pixels with shape:
      (height, width)
  @returns:
    {numpy.ndarray} an image with shape of `img` wherein
      all values are normalized such that the min=0 and max=255
  '''
  _min = img.min()
  _max = img.max()
  return img - _min * 255 / (_max - _min)

img = imread(sys.argv[1])
normalized = normalize(img)

इसे चलाने के बाद ही मुझे एहसास हुआ कि यह सामान्यीकरण केवल उन छवियों की मदद करेगा जिनका सबसे हल्का मूल्य 255 से कम है या जिसका सबसे गहरा मान 0 से अधिक है।

क्या किसी छवि के एक्सपोज़र को सामान्य करने का एक सीधा तरीका है जैसे कि ऊपर की शीर्ष छवि? मैं किसी भी विचार के लिए आभारी रहूंगा जो अन्य इस प्रश्न पर पेश कर सकते हैं।

9
duhaime 29 मार्च 2018, 03:21

2 जवाब

सबसे बढ़िया उत्तर

हिस्टोग्राम इक्वलाइजेशन इस तरह की चीजों के लिए आश्चर्यजनक रूप से अच्छा काम करता है। यह आमतौर पर फोटोग्राफिक छवियों के लिए बेहतर होता है, लेकिन यह लाइन आर्ट पर भी मददगार होता है, जब तक कि कुछ गैर-काले/सफेद पिक्सेल होते हैं।

यह रंगीन छवियों के लिए भी अच्छी तरह से काम करता है: बैंड को विभाजित करें, प्रत्येक को अलग से बराबर करें, और पुनर्संयोजन करें।

मैंने आपकी नमूना छवि पर कोशिश की:

after hist equal

libvips का उपयोग करना:

$ vips hist_equal sample.jpg x.jpg

या पायथन से pyvips के साथ:

x = pyvips.Image.new_from_file("sample.jpg")
x = x.hist_equal()
x.write_to_file("x.jpg")
7
jcupitt 3 नवम्बर 2019, 03:28

आपकी छवियों का एक बड़ा नमूना देखे बिना यह कहना बहुत मुश्किल है कि क्या यह आपके लिए काम करेगा, लेकिन आपको "ऑटो-गामा" उपयोगी लग सकता है। ImageMagick और विवरण में एक अंतर्निहित है - ताकि आप स्वयं इसकी गणना कर सकें - यह है:

छवि के गामा स्तर को स्वचालित रूप से समायोजित करें।

यह एक छवि के माध्य मानों की गणना करता है, फिर एक परिकलित -गामा समायोजन लागू करता है ताकि छवि में माध्य रंग को 50% का मान प्राप्त हो।

इसका मतलब है कि कोई भी ठोस 'ग्रे' छवि 50% ग्रे हो जाती है।

यह वास्तविक जीवन की छवियों के लिए अच्छी तरह से काम करता है जिसमें बहुत कम या कोई अत्यधिक अंधेरे और हल्के क्षेत्र नहीं होते हैं, लेकिन बड़ी मात्रा में उज्ज्वल आकाश या अंधेरे छाया वाली छवियों के लिए असफल हो जाते हैं। यह चित्र या कार्टून जैसी छवियों के लिए भी अच्छी तरह से काम नहीं करता है।

आप जाने से पहले बहुत ही सरलता से कमांड लाइन पर इसे स्वयं आज़मा सकते हैं और कुछ ऐसा कोडिंग करने में बहुत समय व्यतीत कर सकते हैं जो काम नहीं कर सकता है:

convert Tribunal.jpg -auto-gamma result.png

enter image description here

आप पहले से अपने कोड के अनुसार -auto-level कर सकते हैं, और एक हजार अन्य चीज़ें भी:

convert Tribunal.jpg -auto-level -auto-gamma result.png
6
Mark Setchell 29 मार्च 2018, 06:45