वेवलेट ट्रांसफ़ॉर्म


9

मैं एक छवि पर 2 डी हर असतत तरंग परिवर्तन और उलटा DWT प्रदर्शन करना चाहते हैं। क्या आप कृपया सीधे सरल भाषा में DWT 2 डी हार असतत तरंग परिवर्तन और व्युत्क्रम की व्याख्या करेंगे और एक एल्गोरिथ्म का उपयोग कर सकते हैं जिसके लिए मैं 2D haar dwt कोड लिख सकता हूँ? Google में दी गई जानकारी बहुत अधिक तकनीकी थी। मुझे छवि को 4 उप-बैंडों में विभाजित करने जैसी बुनियादी चीजों को समझा गया: एलएल, एलएच, एचएल, एचएच लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि DWT और IDWT पर प्रदर्शन करने के लिए एक कार्यक्रम कैसे लिखें एक छवि। मैं यह भी पढ़ता हूं कि डीडब्ल्यूटी डीसीटी से बेहतर है क्योंकि यह पूरी तरह से छवि पर किया जाता है और फिर कुछ स्पष्टीकरण था जो मेरे सिर के ऊपर चला गया था। मैं यहां गलत हो सकता हूं लेकिन मुझे लगता है कि डीडब्ल्यूटी और डीसीटी संपीड़न तकनीक क्योंकि उन पर DWT या DCT का प्रदर्शन होने पर छवि का आकार कम हो जाता है। आप लोग अपने ज्ञान का एक हिस्सा साझा करते हैं और मेरे ज्ञान को बढ़ाते हैं।

धन्यवाद

पुन :: यह छवि प्रारूप के साथ क्या करने के लिए कुछ भी है। "पिक्सेल का मूल्य" क्या है जो DWT में उपयोग किया जाता है? मैंने इसे छवि का आरजीबी मूल्य माना है।

import java.awt.event.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.io.*;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.lang.*;
import java.util.*;

class DiscreteWaveletTransform

{

    public static void main(String arg[])
    { DiscreteWaveletTransform dwt=new DiscreteWaveletTransform();
      dwt.initial();
    }


    static final int TYPE=BufferedImage.TYPE_INT_RGB;
    public void initial()
    {
    try{

        BufferedImage buf=ImageIO.read(new File("lena.bmp"));
        int w=buf.getWidth();
        int h=buf.getHeight();
        BufferedImage dwtimage=new BufferedImage(h,w,TYPE);
        int[][] pixel=new int[h][w];
        for (int x=0;x<h;x++)
        {
            for(int y=0;y<w;y++)
            {
                pixel[x][y]=buf.getRGB(x,y);


            }
        }
        int[][] mat =  new int[h][w];
        int[][] mat2 =  new int[h][w];

        for(int a=0;a<h;a++)
        {
            for(int b=0,c=0;b<w;b+=2,c++)
            {
                mat[a][c]    = (pixel[a][b]+pixel[a][b+1])/2;
                mat[a][c+(w/2)]  = Math.abs(pixel[a][b]-pixel[a][b+1]);
            }
        }
        for(int p=0;p<w;p++)
        {
            for(int q=0,r =0 ;q<h;q+=2)
            {
                mat2[r][p]   = (mat[q][p]+mat[q+1][p])/2;
                mat2[r+(h/2)][p] = Math.abs(mat[q][p]-mat[q+1][p]);
            }
        }
        for (int x=0;x<h;x++)
        {
            for(int y=0;y<w;y++)
            {
                dwtimage.setRGB(x,y,mat2[x][y]);
            }
        }
        String format="bmp";
        ImageIO.write(dwtimage,format, new File("DWTIMAGE.bmp"));
        }

        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

आउटपुट बीच में एक पतली रेखा के साथ एक काली छवि है, जो वास्तविक आउटपुट के पास कम है। मुझे लगता है कि मैंने तर्क को गलत तरीके से समझा है। कृपया गलतियों को इंगित करें। सादर


1
आपको पता चल सकता है कि छवि पर उपयोगी डिस्क्रीट ट्रांसलेट को कैसे लागू किया जाए ।

उपरोक्त कोड मेरे लिए बहुत

जवाबों:


15

क्या आप कृपया सरल भाषा में 2D हारा असतत तरंग परिवर्तन और व्युत्क्रम DWT को समझायेंगे

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

मन में ऑर्थोगोनलिटी की इस कसौटी के साथ , क्या दो अन्य कार्यों को खोजना संभव है जो कॉस और पाप के अलावा ऑर्थोगोनल हैं?

हां, अतिरिक्त उपयोगी विशेषता वाले ऐसे कार्यों के साथ आना संभव है कि वे अनंत तक नहीं फैलते हैं (जैसे कि कॉस और पाप)। इस तरह के युग्मों का एक उदाहरण है हर वेवलेट

अब, डीएसपी के संदर्भ में, इन दो "ऑर्थोगोनल फ़ंक्शंस" के बारे में सोचना अधिक व्यावहारिक है क्योंकि दो फ़िनिट इम्पल्स रिस्पांस (एफआईआर) फ़िल्टर और डिस्क्रीट वेवलेट ट्रांसफ़ॉर्मेशन ऑफ़ सीरोल्यूशन (या दूसरे शब्दों में, इन फ़िल्टर को क्रमिक रूप से लागू करना) कुछ समय श्रृंखला)। आप की तुलना और 1-डी डीडब्ल्यूटी के सूत्रों विषम द्वारा और इस की पुष्टि कर सकते घुमाव की कि

वास्तव में, यदि आप Haar फ़ंक्शन को बारीकी से देखते हैं, तो आप दो सबसे प्राथमिक निम्न पास और उच्च पास फ़िल्टर देखेंगे। यहाँ एक बहुत ही सरल कम पास फिल्टर h = [0.5,0.5] (पल के लिए स्केलिंग के बारे में चिंता न करें) भी एक चलती औसत फिल्टर के रूप में जाना जाता है क्योंकि यह अनिवार्य रूप से हर दो आसन्न नमूनों का औसत देता है। यहाँ एक बहुत ही सरल उच्च पास फिल्टर h = [1, -1] को एक विभेदक के रूप में भी जाना जाता है क्योंकि यह किसी भी दो आसन्न नमूनों के बीच का अंतर लौटाता है।

एक छवि पर DWT-IDWT प्रदर्शन करने के लिए, यह केवल कन्वेंशन के दो आयामी संस्करणों का उपयोग करने का एक मामला है (क्रमिक रूप से आपके हर फिल्टर को लागू करने के लिए)।

शायद अब आप यह देखना शुरू कर सकते हैं कि डीडब्ल्यू, लोही, हाईलिओ, हाईलो, हाईएचह एक छवि के कुछ हिस्सों में जहां से DWT आया है। अब, कृपया ध्यान दें कि एक छवि पहले से ही दो आयाम है (शायद यह कुछ समय भ्रमित कर रहा है)। दूसरे शब्दों में, आपको एक्स अक्ष के लिए निम्न-उच्च स्थानिक आवृत्तियों को प्राप्त करना चाहिए और वाई अक्ष के लिए समान सीमाएं (यही कारण है कि दो अक्ष और दो अक्ष प्रति अक्ष हैं)

और एक एल्गोरिथ्म जिसके उपयोग से मैं 2D haar dwt के लिए कोड लिख सकता हूं?

आपको इसे पहले सिद्धांतों से अपने दम पर कोड करने की कोशिश करनी चाहिए ताकि आपको पूरी प्रक्रिया की समझ हो। कोड के लिए तैयार किए गए टुकड़े को ढूंढना बहुत आसान है, जो आप की तलाश कर रहे हैं, लेकिन मुझे यकीन नहीं है कि यह वास्तव में लंबी अवधि में आपकी मदद करेगा।

मैं यहाँ गलत हो सकता हूँ, लेकिन मुझे लगता है कि DWT और DCT संपीड़न तकनीक क्योंकि DWT या DCT उस पर निष्पादित होने पर छवि का आकार कम हो जाता है

यह वह जगह है जहां यह फूरियर ट्रांसफॉर्म के संदर्भ में DWT के बारे में सोचने के लिए वास्तव में "भुगतान" करता है। निम्नलिखित कारण से:

फूरियर ट्रांसफॉर्म (और निश्चित रूप से डीसीटी भी) में, आप MANY SAMPLES (समय डोमेन में) को ONE (जटिल) गुणांक (आवृत्ति डोमेन में) में बदल देते हैं। ऐसा इसलिए है, क्योंकि आप विभिन्न साइनसोइड्स और कोसिनॉइड्स का निर्माण करते हैं और फिर आप उन्हें अपने सिग्नल से गुणा करते हैं और उस उत्पाद का औसत प्राप्त करते हैं। तो, आप जानते हैं कि एक एकल गुणांक आपके सिग्नल में कुछ आवृत्ति (के) के साइनसोइड के एक स्केल संस्करण का प्रतिनिधित्व करता है।

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

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

दो अच्छे ऑनलाइन लिंक (मेरी राय में कम से कम :-)) हैं: http://facademy.gvsu.edu/aboufade/web/wavelets/tutorials.htm और; http://disp.ee.ntu.edu.tw/tutorial/WaveletTutorial.pdf

व्यक्तिगत रूप से, मैंने बहुत उपयोगी पाया है, निम्न पुस्तकें: http://www.amazon.com/A-Wavelet-Tour-Signal-Processing/dp/0124666051 (मल्लत द्वारा) और; http://www.amazon.com/Wavelets-Filter-Banks-Gilbert-Strang/dp/0961408871/ref=pd_sim_sbs_b_3 (गिल्बर्ट स्ट्रैंग द्वारा)

ये दोनों विषय पर बिल्कुल शानदार किताबें हैं।

आशा है कि ये आपकी मदद करेगा

(क्षमा करें, मैंने अभी देखा कि यह उत्तर थोड़ा लंबा चल सकता है: - /)


मैं खुश हूँ कि आपने जवाब दिया। धन्यवाद के लिए आप A_A.Based की गणितीय व्याख्या पर DWT जो मुझे एक IEEE पेपर में मिला है मैंने एक कोड लिखा है। जब भी मुझे सब मिलता है एक काली छवि है, कृपया मेरी मदद करें।
user1320483

डीडब्ल्यूटी करने के लिए कोड लिखना वास्तव में मेरे लिए बहुत मायने रखता है। (कृपया) ^ be.I वास्तव में आभारी होंगे। मैंने ऊपर कोड पोस्ट किया है।
user1320483

आपके कोड में ध्यान देने योग्य दो बातें हैं) कृपया कृपया कनविक्शन के दो आयामी संस्करण की समीक्षा करें (यह इस मामले में उससे सरल नहीं है) और बी) कृपया ध्यान दें कि आपकी "छवि" गुणांक का एक सेट है जो हो सकता है 255 रंगों की सामान्य गतिशील सीमा के बाहर बहुत छोटा या बहुत बड़ा और किसी भी मामले में। इसलिए, आपको अपने गुणांक की सीमा को खोजने और अंतराल को 0,255 पर स्केल करने की आवश्यकता है। क्या आप केवल एक स्तर के अपघटन के लिए जा रहे हैं?
a_A

a) कृपया कनवल्शन के दो आयामी संस्करण की समीक्षा करें (यह इस मामले में इससे आसान नहीं है) मुझे यकीन नहीं है कि आप इस से क्या मतलब है। "छवि" गुणांक का एक सेट है जो बहुत छोटे या बहुत बड़े और किसी भी मामले में 255 रंगों की आम गतिशील सीमा के बाहर हो सकता है इसका मतलब है कि मुझे जोड़ने के बाद यह जांचना होगा कि क्या मूल्य 255 से अधिक है और यदि यह 0 से शुरू होता है? क्या आप केवल एक स्तर के अपघटन के लिए जा रहे हैं? हां, आपका बहुत-बहुत धन्यवाद
user1320483

मेरा क्या मतलब है (ए) यह है कि यदि आप Haar फ़िल्टर लागू करना चाहते हैं (ऊपर दिए गए जवाब के अनुसार) तो आपको यह समीक्षा करनी होगी कि यह संलक्षण के संचालन के माध्यम से कैसे किया जाता है और Haar फ़िल्टर के मामले में यह बहुत है सरल। हां, आपको अपने गुणांक को 0-255 सीमा तक सामान्य करने की आवश्यकता है ताकि आप उन्हें "देख" सकें। जहां तक ​​आरजीबी का सवाल है, कृपया ग्रेस्केल इमेज (सिर्फ एक मूल्य) पर ध्यान दें। आपको पहले यह समझने की जरूरत है कि यह क्या है जो आपको करना है और फिर करना है। "कोड" की तलाश लंबे समय में अधिक समय लेने वाली है।
a_A

8

मैंने @A_A से उत्तर से पहले यह लिखना शुरू कर दिया था , लेकिन यह उत्तर उत्कृष्ट है। फिर भी मुझे आशा है कि निम्नलिखित आपकी समझ में थोड़ा जोड़ सकते हैं।

तरंगों के बारे में चर्चा और इतने पर संकेतों के आधार अपघटन के बारे में सामान्य चर्चा में आता है। इसके द्वारा, हमारा मतलब है कि हम अपने सिग्नल को कुछ आधार मैट्रिक्स, के उत्पाद के रूप में और वेक्टर हमारे सिग्नल को वैकल्पिक आधार (आधार अपघटन), । वह है: आधार मैट्रिक्स आमतौर पर एक orthonormal मैट्रिक्स है (जैसे असतत फूरियर मैट्रिक्स, Hae तरंगिका मैट्रिक्स), लेकिन जरूरत ऐसा न हो - अनुसंधान के पूरे क्षेत्र हैं जो संकेतों को अधिक-पूर्ण शब्दकोशों में विघटित कर रहे हैं, जिसका अर्थ है एकxHx~

x=Hx~
HH यह व्यापक से लंबा है (उदाहरण के लिए न्यूनतम एल 1-मानक एल्गोरिदम के माध्यम से)।

सिग्नल के आधार अपघटन के पीछे विचार यह है कि सिग्नल को वैकल्पिक आधार पर कुछ बेहतर तरीके से दर्शाया जा सकता है । तक बेहतर है, हम मतलब है कि संकेत किसी भी तरह अधिक संसाधन के लिए उत्तरदायी है, या समझने, या है जो कुछ भी - यह वास्तव में बात नहीं करता है।

ध्यान देने वाली बात यह है कि, विशेष रूप से ऑर्थोनॉर्मल ट्रांसफ़ॉर्म के साथ, आपका सिग्नल अभी भी आपका सिग्नल है, चाहे वह किसी भी आधार पर हो। आपको एक आधार के बारे में किसी भी तरह से सही डोमेन नहीं होना चाहिए (मैं सामान्य अर्थ में आधार का अर्थ करने के लिए डोमेन का उपयोग करता हूं) ।

अब, अलग-अलग ठिकानों में अलग-अलग गुण हैं। मुझे यकीन है कि आप फूरियर डोमेन और समय डोमेन के बीच उपयोगी संबंध का वर्णन करने वाले प्रमेय प्रमेय से अच्छी तरह परिचित हैं। यह फूरियर डोमेन को समय डोमेन कनवल्शन संचालन करने के लिए उपयोगी बनाता है।

सामान्य समय में (या पिक्सेल) डोमेन को उत्कृष्ट समय (या स्थानिक) रिज़ॉल्यूशन और खराब आवृत्ति रिज़ॉल्यूशन के रूप में माना जा सकता है। इसके विपरीत, फूरियर डोमेन को उत्कृष्ट आवृत्ति संकल्प और खराब समय (या स्थानिक) संकल्प के रूप में माना जा सकता है।

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

विभिन्न तरंगों में अलग-अलग गुण होते हैं। @A_A के संदर्भों के अलावा, मैं DTCWT पर इस IEEE ट्यूटोरियल की भी सिफारिश करता हूँ। ट्यूटोरियल का फोकस तरंग परिवर्तन पर प्रति नहीं है , लेकिन इसका कारण मैं यह सलाह देता हूं कि यह शानदार अंतर्दृष्टि के कारण है जो डीडब्ल्यूटी से जुड़ी समस्याओं पर प्रस्तुत करता है और उन्हें कैसे कम किया जा सकता है (मुझे कहना होगा कि इसके लिए एक बुनियादी समझ की आवश्यकता है हालांकि पहले)। यह वास्तव में फूरियर परिवर्तन की समझ के साथ तरंगों की समझ के साथ संबंध रखता है और बाद वाले के पास इसके अच्छे गुण क्यों हैं।

यदि आप Haar परिवर्तन पर कुछ और संदर्भ कोड चाहते हैं, तो मेरे पूर्व पर्यवेक्षक के अपने वेब पेज ("4F8 इमेज कोडिंग कोर्स", HAAR2D.M और IHAAR2D.M के तहत ज़िप फ़ाइल) पर कुछ matlab उदाहरण हैं । ये बहुत अधिक शिक्षण उदाहरण हैं।

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