2015-07-11 8 views
7

मैं वर्तमान में वेवलेट्स में डाइविंग कर रहा हूं और कुछ चीजों के बारे में थोड़ा उलझन में हूं।लिफ्टिंग (ऋणात्मक मूल्य, विज़ुअलाइजिंग, एलएच एचएल भ्रम) के साथ असतत वेवलेट ट्रांसफॉर्म लीगल 5/3)

सबसे पहले, यह होमवर्क नहीं है। केवल मनोरंजक कोडिंग के लिए।

बेहतर समझ हासिल करने के लिए, मैंने सी में लीगल 5/3 वेवलेट के लिए उठाने की योजना लागू की, जहां तक ​​मैं देख सकता हूं, ऐसा लगता है। मैं इसे उलट सकता हूं और मूल छवियों को सही ढंग से पुन: उत्पन्न किया जाता है। छद्म कोड में, मेरा आगे डीडब्ल्यूटी इस तरह दिखता है:

// deinterleave splits the low band from the high band 
// (e.g. 1 0 3 0 6 0 8 1 11 becomes 1 3 6 8 11 | 0 0 0 1) 

for each row in image: 
    dwt1d(row) 
    deinterleave(row) 
for each col in image: 
    dwt1d(col) 
    deinterleave(col) 

लेकिन मैं चीजों के एक जोड़े के साथ संघर्ष।

  1. dwt को लागू करते समय, मैं अपनी रूपांतरित छवि वापस लेता हूं, लेकिन मान सीमा से बाहर हैं [0 - 255]। इसलिए मैं उन्हें शॉर्ट्स में स्टोर करता हूं। कुछ नकारात्मक हैं, और कुछ बहुत बड़े हैं। अब यहां दिखाए गए अनुसार उन अच्छी दिखने वाली छवियों को प्राप्त करने के लिए मैं उन्हें कैसे प्रदर्शित कर सकता हूं: (http://www.whydomath.org/node/wavlets/images/Largetoplevelwt.gif)? अगर मैं imshow (छवि, []) के साथ मैटलैब में अपनी छवि दिखाता हूं, तो मेरा आउटपुट इस तरह दिखता है: http://i.imgur.com/dNaYwEE.jpg। तो, क्या मुझे अपने उप बैंड पर कुछ बदलाव करना है? यदि हां, क्या कोई मुझे समाधान के लिए इंगित कर सकता है या मुझे बता सकता है कि क्या करना है?

  2. साहित्य में, मुझे कभी-कभी लगता है कि उप बैंड इस तरह के आदेश दिए गए हैं: [एलएल एलएच; एचएल एचएच] और कभी-कभी इस तरह: [एलएल एचएल; एलएच एचएच]। उत्तरार्द्ध, मैं ज्यादातर देखता हूं जब पेपर जेपीईजी 2000 के बारे में है और यह भी मेरे एल्गोरिदम का उत्पादन करता है। हालांकि मैटलैब में, lwt2 फ़ंक्शन का उपयोग करते समय, यह पूर्व लेआउट देता है। मैटलैब से आउटपुट के साथ अपने आउटपुट की तुलना करते समय भी मैं इसे देखता हूं। ऐसा लगता है कि एलएच और एचएल मिश्रित हैं। ऐसे कैसे हो सकता है? फर्क पड़ता है क्या? क्या इसे दृढ़ता के बजाय उठाने का उपयोग करने के साथ कुछ करना है?

  3. क्या इससे वास्तव में कोई फर्क पड़ता है कि कोई पंक्तियों को पहले करता है और फिर कॉलम या वीज़ा बनाम? जब मैं ऑर्डर स्विच करता हूं तो मुझे अपने आउटपुट में कोई फर्क नहीं पड़ता। एकमात्र चीज जो अलग होगी वह यह है कि एलएच एचएल बन जाता है और एचएल एलएच बन जाता है। हालांकि, यह मेरे दूसरे प्रश्न को हल नहीं करता है क्योंकि आउटपुट वही है। मुझे लगता है कि यह सिर्फ उल्लेखनीय है। तो क्या इससे कोई फर्क पड़ता है? मैंने कागजात देखे जहां वे कॉल-पंक्ति करते हैं और अन्य जहां वे पंक्ति-कर्नल करते हैं। जेपीईजी 2000 के संबंध में दोनों।

बहुत बहुत धन्यवाद। अगर कोई मेरे मुद्दों पर कुछ प्रकाश डाल सकता है तो मैं बहुत आभारी रहूंगा।

सधन्यवाद, मार्कस

+0

मैं इस प्रश्न के साथ कुछ मुद्दों को देख सकता हूं। *** 1 ***। आपने तीन प्रश्नों को एक में रखा है। उन्हें अलग-अलग प्रश्नों में विभाजित करें। *** 2 ***। आप एक [mcve] (http://stackoverflow.com/help/mcve) की आपूर्ति नहीं करते हैं। जब तक आप ऐसा नहीं करते हैं, तब तक अपने सवालों का जवाब देना बहुत मुश्किल है। *** 3 ***। आपके प्रश्न (ओं) को वेवलेट्स के सिद्धांत से संबंधित देखा जा सकता है और कुछ (मैं यह नहीं कह रहा हूं लेकिन कुछ हो सकता है) लगता है कि यह कहीं और है। इन्हें संबोधित करने से शायद आपको एक बक्षीस से अधिक मदद मिलेगी। – kkuilla

+0

बिंदु 3 के संबंध में: आपको लगता है कि यह कहां से संबंधित होगा? –

+0

मुझे यकीन नहीं है, मुझे डर है। यदि आप 1 और 2 को संबोधित करते हैं तो अंतिम बिंदु शायद अप्रासंगिक हो जाएगा। – kkuilla

उत्तर

4

मैं एक WDR छवि संपीड़न प्रणाली के निर्माण के बारे में एक ब्लॉग लिखा था। आप और अधिक यहाँ पढ़ सकते हैं:

http://trueharmoniccolours.co.uk/Blog/

(आप ध्यान दें हूँ कि मैं एक बहुत ही उर्वर ब्लॉगर नहीं हूँ;))। इसमें डब्लूडीआर छवि संपीड़न के अपने स्वयं के सी ++ संस्करण को लागू करने की आवश्यकता होनी चाहिए। अगर मुझे एक संदेश आग लगने के लिए स्वतंत्र महसूस न करें और पूछें!

  1. हां यह वास्तव में दस्तावेज के तहत "फीचर" है जो मैं काम कर सकता हूं। डीडब्ल्यूटी से लौटाया गया मूल्य वास्तव में एक छोटा है और इसकी सीमा -255 से +255 की आवश्यकता होती है। अब निश्चित रूप से -255 8-बिट रंग का उपयोग करते समय सीधे प्रस्तुत करने योग्य नहीं है। इस तरह के लोग आमतौर पर 2 से मूल्य विभाजित करते हैं और प्रदर्शन के लिए 128 जोड़ते हैं (डिस्प्ले न भूलें डिबगिंग के लिए सिर्फ एक उपकरण है)।इस तरह आप 0 को 128 के रूप में ले जाते हैं और इसलिए एक ग्रेस्केल छवि पर "मध्य ग्रे" होता है।

  2. यह वास्तव में कोई फर्क नहीं पड़ता कि आप आगे बढ़ने के तरीके को विपरीत तरीके से बदलते हैं।

  3. नहीं, इससे कोई फर्क नहीं पड़ता। जब आप कार्यान्वित करते हैं कि गंतव्य पिक्सेल कहां लिखना है, तो आप इसे लिखने के लिए स्वतंत्र हैं जहां आप पसंद करते हैं (उदाहरण के लिए पूरी तरह से अलग छवि के लिए)।

संपादित:

d = s[n + 1] - ((s[n + 0] + s[n + 2])/2); 

तो 255, 0, 255 का एक स्रोत छवि के मामले में ... कि परिणाम होगा: अपनी टिप्पणी के बारे में लीपापोती 5/3 उठाने समीकरण इस प्रकार है -255 के विज्ञापन में। से शुरू होने से अधिकतम 255 मिलेगा, इसलिए आपको निश्चित रूप से -255 to +255 श्रेणी में होना चाहिए या आपके कार्यान्वयन में कुछ गड़बड़ है।

+0

अरे गोज़, आपके उत्तरों के लिए बहुत बहुत धन्यवाद। 1 के बारे में: मेरी रूपांतरित छवि वास्तव में सीमा के भीतर है (-185, +295) .. शायद क्योंकि मैं 5/3 करता हूं? तो अगर मैं 2 से विभाजित करता हूं और 128 जोड़ता हूं, तो मैं अभी भी uint8 रेंज से बाहर हूं। Matlab के माध्यम से दिखाते समय छवि अभी भी वास्तव में अच्छा नहीं लगती है। –

+0

@markus_p: मैं गणित पर थोड़ा सा जंगली हूं लेकिन मुझे पूरा यकीन है कि परिणाम -255 से 255 रेंज में होना चाहिए। मैंने अभी गणित के माध्यम से जांच की है और यह समझ में आता है। यदि आप अपना कोड पोस्ट कर सकते हैं तो मैं आपको बता सकता हूं कि कोड कहां गलत हो रहा है। – Goz

संबंधित मुद्दे