मैं एक छवि से छाया कैसे निकाल सकता हूं?


17

मेरी यह छवि है

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

मैं छवि से छाया को दूर करना चाहूंगा। मुझे पता है कि छाया को हटाने के लिए कुछ अलग-अलग तरीकों जैसे कई रूपात्मक ऑपरेशनों का उपयोग किया गया है:

मैंने उसी छवि के लिए यह मुखौटा बनाया है

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

क्या मेरे द्वारा बनाए गए इस मास्क का उपयोग करने के कुछ अन्य तरीके हैं?

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

अनुरोध के अनुसार इनपुट छवि और समान आकार का मुखौटा:

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

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

संपादित 2: मैं एक 1D अपरिवर्तनीय छवि उत्पन्न करता है, हालांकि यह सही नहीं है

  I = imread('shadow.jpg');
       J = im2double(I);

      R = J(:,:,1);
      G = J(:,:,2);
      B = J(:,:,3);

     [len,wid] = size(R);

     % Generation of 2-D Log Chromaticity Image.
     for i = 1:len
        for j = 1:wid
           if ((R(i,j)*G(i,j)*B(i,j))~= 0)
              c1(i,j) = R(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
              c2(i,j) = G(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
              c3(i,j) = B(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
           else
              c1(i,j) = 1;
              c2(i,j) = 1;
              c3(i,j) = 1;
        end
    end
end

rho1 = mat2gray(log(c1));
rho2 = mat2gray(log(c2));
rho3 = mat2gray(log(c3));

X1 = mat2gray(rho1*1/(sqrt(2)) - rho2*1/(sqrt(2)));                                         %(1/sqrt(2); -1/sqrt(2); 0)
X2 = mat2gray(rho1*1/(sqrt(6)) + rho2*1/(sqrt(6)) - rho3*2/(sqrt(6)));   %(1/sqrt(6); 1/sqrt(6); -2/sqrt(6))

theta = 120;

InvariantImage = cos(theta*pi/180)*X1 + sin(theta*pi/180)*X2;
imagesc(InvariantImage); colormap(gray)

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

समझ नहीं पा रहा हूँ कि मैं यहाँ क्या गलत कर रहा हूँ कृपया मदद करें?


अच्छा प्रश्न! क्या आपने नकाबपोश क्षेत्र में चमक बढ़ाने की कोशिश की है?
दीमा

5
: यहाँ मेरा उत्तर चेक dsp.stackexchange.com/questions/454/...
datageist

सरल शब्दों में, दो अलग-अलग सतहों की परावर्तनता अलग-अलग होती है, दोनों निरपेक्ष रूप से और कैसे वे प्रत्यक्ष बनाम अप्रत्यक्ष प्रकाश को दर्शाती हैं। इसलिए वे छाया में रहने के लिए अलग-अलग प्रतिक्रिया देते हैं और छाया को रद्द करने के लिए अलग-अलग सूत्रों की आवश्यकता होती है।
डेनियल आर हिक्स

दूसरी व्युत्पन्नता का उपयोग करके बढ़त का पता लगाने जैसी अन्य विधियां हैं, ढाल का उपयोग कर, और लाप्लासियन ऑपरेटर।

1
संबंधित प्रश्न: mathematica.stackexchange.com/questions/7414/…
Niki Estner

जवाबों:


11

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

  • मुख्य डोमेन हेरफेर तकनीक यहां बताई गई (सी और मैटलैब कोड प्रदान की गई): http://www.umiacs.umd.edu/~aagrawal/ICCV2007Course/index.html ग्रेडिएंट-इंटीग्रेशन दृष्टिकोण का उपयोग कई इमेज प्रोसेसिंग के लिए किया जा सकता है समस्याएं, आगे के उदाहरणों के लिए स्लाइड / प्रस्तुति देखें।

    सामान्य विचार:

    1. सभी रंग-चैनलों के लिए स्थानिक डेरिवेटिव (ढाल-चित्र) की गणना करें।
    2. वेट-मास्क बनाने के लिए शैडो-मास्क से छाया-सीमाओं का उपयोग करें जो कि छाया-सीमाओं पर शून्य के करीब है और एक निर्दिष्ट-पड़ोस के भीतर एक के लिए बढ़ जाती है, अर्थात किसी दिए गए किनारे-बिंदु पर ऑर्थोगोनल।
    3. छाया-सीमाओं / किनारों को कम / नम करने के लिए सभी ढाल-छवियों के साथ (2.) से वेट-मास्क को गुणा करें।
    4. उपरोक्त लिंक से कोड का उपयोग करके ढाल-छवियों को एकीकृत करें।
    5. आरजीबी-छवियों के लिए, मेरे अनुभव से, मूल छवियों के अलग-अलग चैनलों के औसत की गणना करें, और "मज़ेदार" रंग-कलाकृतियों को रोकने के लिए इन मूल्यों से मेल खाने के लिए एकीकृत छवियों को स्केल करें।
  • मूल छवि-डोमेन में चमक हेरफेर।

    1. वज़न-मास्क बनाने के लिए शैडो-मास्क का उपयोग करें जो कि छाया क्षेत्रों के बाहर एक है, छाया-सीमा के पार एक चिकनी संक्रमण (ऊपर की ओर) और छाया-क्षेत्रों के अंदर एक से अधिक स्केल-फैक्टर होता है। जैसा कि पिछली पोस्ट में सुझाया गया है, स्केल-फैक्टर का अनुमान उस क्षेत्र से लगाया जा सकता है, जो छाया-क्षेत्र की औसत-चमक के साथ-साथ औसत-चमक का उपयोग करता है।
    2. क्लिपिंग के अधीन वेट-मास्क के साथ मूल छवियों (प्रति चैनल) को गुणा करें।

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

आशा है कि मदद करता है, तरह का संबंध है, डेरिक।


2
लिंक मृत लगता है, यहाँ एक कैश्ड संस्करण है
डेलगन

9

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


हाँ मुझे पता है कि लेकिन एक ही समस्या के लिए एक अलग तरीके की कोशिश करने की कोशिश कर रहा था
विनी

@vini: यदि आपने पढ़ा है कि आपको पता होना चाहिए कि आप किस चीज़ के खिलाफ हैं --- सरल रूपात्मक ऑपरेशन इसे काटने नहीं जा रहे हैं। आपने और क्या पढ़ा और आजमाया है? मैं जरूरत पड़ने पर अन्य कागजात सुझा सकता हूं।
इमरे

@ मैं इस चमक को बदलने की कोशिश कर रहा हूं, ताकि छाया का प्रभाव कम न हो, लेकिन सफलता बहुत कम हो सकती है .. क्या किसी किनारे के नक्शे का इस्तेमाल किसी तरह इस छाया को बाहर निकालने के लिए किया जा सकता है .. क्या मुझे लगा कि मॉर्फोलोकल संचालन में मदद मिली है, जो मैंने कोशिश की थी (matlab) छाया को हटाने के लिए
vini

5
@vini: यह समस्या एक-लाइनर समाधान से परे है। लिंक किए गए कागजात (और अन्य भी हैं) पहले से ही ज्यादातर मामलों में समस्या को हल करते हैं, इसलिए यदि आप कुछ नया करना चाहते हैं, तो आपको उनकी कमजोरियों का पता लगाना होगा, और इसका मतलब है कि उन्हें अच्छी तरह से समझना, इसलिए मैं आपसे उन्हें फिर से पढ़ने का आग्रह करता हूं सावधानी से। वे आमतौर पर चर्चा और निष्कर्ष वर्गों में समस्याओं का उल्लेख करते हैं। लॉग-क्रोमैटिकिटी इल्युमिनेशन-इनवेरिएंट प्रोजेक्शन अप्रोच मुझे सबसे ज्यादा प्रॉमिसिंग लगता है ...
Emre

4

कई तरीके हैं जो शैडो डिटेक्शन के बारे में बात करते हैं, अनिवार्य रूप से ज्ञात पृष्ठभूमि के खिलाफ काम करते हैं। छाया क्या है, इसकी कोई पूर्ण धारणा नहीं हैकेवल पिक्सेल रंग देखकर । हालांकि, आपको संदर्भ के बिना छाया की पहचान करने की आवश्यकता है।

हालांकि यह समस्या कठिन है, यहां एक तुच्छ समाधान है - हालांकि आसानी से यह सबसे अच्छा नहीं हो सकता है, लेकिन फिर भी यह आपको कुछ परिप्रेक्ष्य हासिल करने में मदद कर सकता है।

एचएसएल डोमेन में छवि घटकों की जांच करते हैं

रंगह्यू घटक है,
परिपूर्णतासंतृप्ति घटक है, और लपटलाइटनेस घटक है

यह सर्वविदित है कि लाइटनेस बारीकी से छवि के ग्रे समकक्ष से मेल खाती है और यह भी कि छाया अनिवार्य रूप से है

एक अर्ध-पारदर्शी क्षेत्र जिसमें दृश्य पुन: transparent एक्टेंस एक स्थानीय क्षीणन से गुजरता है।

से यहाँ

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

अब, यहाँ, मैं दो छवियों का उत्पादन करने में सक्षम हूँ - जहाँ

  1. इस पहली छवि में हमने लाइटनेस घटक को हटा दिया है (एक निश्चित औसत मान के साथ प्रतिस्थापित)
    यहाँ छवि विवरण दर्ज करें

  2. दूसरी छवि में हमने उसी तरह से संतृप्ति घटक को हटा दिया है संतृप्ति निकाली गई

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

इसके आधार पर, आप "लाइटनेस हटा दी गई" छवि को पृष्ठभूमि के रूप में और अन्य को घटना की छवि के रूप में मान सकते हैं और अपनी दो सूचनाओं के आधार पर छवि को खंडित कर सकते हैं; तो उन क्षेत्रों में जहां छाया एक प्रमुख भूमिका नहीं निभा रही है, अंतर बहुत कम हो सकता है, जहां जब छाया मौजूद होती है तो वह खंड उच्च त्रुटि दिखाएगा।

वैकल्पिक रूप से आप बस दोनों छवि पर स्वतंत्र विभाजन (जैसे क्षेत्र बढ़ रहा है) लागू कर सकते हैं। संतृप्ति-हटाए गए चित्र में अतिरिक्त सेगमेंट होगा जो कि लपट-हटाए गए छवि में मौजूद नहीं होगा जो छाया खंड के अलावा कुछ भी नहीं है।

नोट: आप एचएसएल-लपट-हटाए गए छवि को मूल रूप से अलग कर सकते हैं। HSV कलर स्पेस के साथ-साथ YCbCr के साथ भी ऐसी ही चीजों को आजमाएं।


2

आप नकाबपोश क्षेत्र (छाया) का हिस्टोग्राम ले सकते हैं और रैखिक रंग रूपांतर लागू कर सकते हैं ताकि नकाबपोश क्षेत्र और शेष छवि का हिस्टोग्राम मेल खा जाए।

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

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