Transformasi Wavelet

9

Saya ingin melakukan transformasi wavelet diskrit haar 2D dan DWT terbalik pada gambar. Tolong jelaskan 2D haar discrete wavelet transform dan invers DWT dalam bahasa yang sederhana dan algoritma yang digunakan untuk menulis kode untuk 2D haar dwt.? Informasi yang diberikan di google terlalu teknis. Saya mengerti hal-hal dasar seperti membagi gambar menjadi 4 sub-band: LL, LH, HL, HH tapi saya tidak bisa benar-benar mengerti bagaimana menulis program untuk menjalankan DWT dan IDWT pada sebuah gambar. Saya juga membaca bahwa DWT lebih baik daripada DCT karena dilakukan pada gambar secara keseluruhan dan kemudian ada beberapa penjelasan yang melampaui kepala saya. Saya mungkin salah di sini tapi saya pikir teknik kompresi DWT dan DCT karena ukuran gambar berkurang ketika DWT atau DCT dilakukan pada mereka. Berharap kalian berbagi bagian dari pengetahuan Anda dan meningkatkan pengetahuan saya.

Terima kasih

Re: Apakah ada hubungannya dengan format gambar. Apakah "nilai piksel" yang digunakan dalam DWT? Saya menganggapnya sebagai nilai rgb gambar.

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();
        }
    }
}

Outputnya adalah gambar hitam dengan garis tipis di antaranya, tidak jauh dari output sebenarnya. Saya pikir saya telah menafsirkan logika dengan salah. Tolong tunjukkan kesalahannya. Salam

pengguna1320483
sumber
Kode di atas sangat berarti bagi saya, terima kasih .. tolong beri saya kode java untuk kebalikan dari transformasi haar 2D

Jawaban:

15

Bisakah Anda jelaskan transformasi wavelet diskrit haar 2D dan DWT terbalik dalam bahasa yang sederhana

Sangat berguna untuk memikirkan transformasi wavelet dalam hal Discrete Fourier Transform (untuk sejumlah alasan, silakan lihat di bawah). Dalam Transformasi Fourier, Anda menguraikan sinyal menjadi serangkaian fungsi trigonometri ortogonal (cos dan sin). Sangat penting bagi mereka untuk menjadi ortogonal sehingga dimungkinkan untuk menguraikan sinyal Anda dalam serangkaian koefisien (dari dua fungsi yang pada dasarnya tidak tergantung satu sama lain) dan mengomposisi kembali.

Dengan mengingat kriteria ortogonalitas ini, mungkinkah menemukan dua fungsi lain yang ortogonal selain cos dan dosa?

Ya, adalah mungkin untuk menghasilkan fungsi-fungsi seperti itu dengan karakteristik bermanfaat tambahan yang tidak meluas hingga tak terbatas (seperti cos dan dosa lakukan). Salah satu contoh dari pasangan fungsi tersebut adalah Haar Wavelet .

Sekarang, dalam hal DSP, mungkin lebih praktis untuk berpikir tentang dua "fungsi ortogonal" ini sebagai dua filter Respon Impuls Terbatas (FIR) dan Transformasi Wavelet Diskrit sebagai serangkaian Konvolusi (atau dengan kata lain, menerapkan filter ini secara berturut-turut). selama beberapa seri waktu). Anda dapat memverifikasi ini dengan membandingkan dan membedakan rumus DWT 1-D dan konvolusi .

Bahkan, jika Anda memperhatikan fungsi Haar erat Anda akan melihat dua low pass paling dasar dan filter high pass. Berikut ini adalah filter low pass yang sangat sederhana h = [0,5,0.5] (jangan khawatir tentang penskalaan untuk saat ini) yang juga dikenal sebagai filter rata-rata bergerak karena pada dasarnya mengembalikan rata-rata setiap dua sampel yang berdekatan. Berikut ini adalah filter lulus tinggi yang sangat sederhana h = [1, -1] juga dikenal sebagai pembeda karena mengembalikan perbedaan antara dua sampel yang berdekatan.

Untuk melakukan DWT-IDWT pada gambar, ini hanyalah kasus menggunakan konvolusi dua dimensi (untuk menerapkan filter Haar Anda secara berturut-turut).

Mungkin sekarang Anda dapat mulai melihat dari mana bagian LowLow, LowHigh, HighLow, HighHigh tinggi dari gambar yang telah mengalami DWT berasal. NAMUN, harap dicatat bahwa gambar sudah DUA DIMENSI (mungkin ini membingungkan beberapa kali). Dengan kata lain, Anda harus mendapatkan frekuensi Spasial Rendah-Tinggi untuk sumbu X dan rentang yang sama untuk sumbu Y (inilah sebabnya ada dua Lows dan dua Highs per axis)

dan sebuah algoritma yang menggunakan yang saya dapat menulis kode untuk 2D haar dwt?

Anda harus benar-benar mencobanya untuk mencoba kode ini sendiri dari prinsip pertama sehingga Anda mendapatkan pemahaman tentang seluruh proses. Sangat mudah untuk menemukan kode yang siap pakai yang akan melakukan apa yang Anda cari, tetapi saya tidak yakin ini akan sangat membantu Anda dalam jangka panjang.

Saya mungkin salah di sini tapi saya pikir teknik kompresi DWT dan DCT karena ukuran gambar berkurang ketika DWT atau DCT dilakukan pada mereka

Di sinilah "membayar" untuk memikirkan DWT dalam hal Transformasi Fourier. Karena alasan berikut:

Dalam Transformasi Fourier (dan tentu saja DCT juga), Anda mengubah BANYAK SAMPEL (dalam domain waktu) menjadi SATU (kompleks) koefisien (dalam domain frekuensi). Ini karena, Anda membuat sinusoid dan kosinusoid yang berbeda dan kemudian mengalikannya dengan sinyal dan memperoleh rata-rata produk tersebut. Jadi, Anda tahu bahwa koefisien tunggal Ak mewakili versi skala dari sinusoid dari beberapa frekuensi (k) dalam sinyal Anda.

Sekarang, jika Anda melihat beberapa fungsi wavelet Anda akan melihat bahwa mereka sedikit lebih kompleks daripada sinusoid sederhana. Sebagai contoh, perhatikan Transformasi Fourier dari High Pass Haar Filter ... High pass Haar filter terlihat seperti gelombang persegi, yaitu memiliki tepi yang tajam (transisi tajam) ... Apa yang diperlukan untuk membuat EDGES SHARP? .. ... Banyak, berbagai sinusoid dan co-sinusoid (!)

Oleh karena itu, merepresentasikan sinyal / gambar Anda menggunakan wavelet menghemat lebih banyak ruang daripada merepresentasikannya dengan sinusoid DCT karena SATU set koefisien wavelet mewakili LEBIH BESAR KOEFISIENSI DCT. (Topik yang sedikit lebih maju namun terkait yang mungkin bisa membantu Anda untuk memahami mengapa ini bekerja dengan cara ini adalah Penyaringan Cocok ).

Dua tautan daring yang bagus (menurut saya setidaknya :-)) adalah: http://faculty.gvsu.edu/aboufade/web/wavelets/tutorials.htm dan; http://disp.ee.ntu.edu.tw/tutorial/WaveletTutorial.pdf

Secara pribadi, saya menemukan buku-buku berikut ini sangat membantu: http://www.amazon.com/A-Wavelet-Tour-Signal-Processing/dp/0124666051 (Oleh Mallat) dan; http://www.amazon.com/Wavelets-Filter-Banks-Gilbert-Strang/dp/0961408871/ref=pd_sim_sbs_b_3 (Oleh Gilbert Strang)

Kedua buku ini benar-benar brilian tentang masalah ini.

saya harap ini membantu

(maaf, saya baru memperhatikan bahwa jawaban ini mungkin berjalan agak lama: - /)

A A
sumber
Saya sangat senang bahwa Anda menjawab. Terima kasih telah membalas A_A. Berdasarkan interpretasi matematika dari DWT yang saya temukan dalam makalah IEEE saya telah menulis kode. Namun yang saya dapatkan hanyalah gambar hitam, tolong bantu saya.
user1320483
Menulis kode untuk melakukan DWT sangat berarti bagi saya. (Harap) ^ ∞. Saya akan sangat berterima kasih. Saya telah memposting kode di atas.
user1320483
Ada dua hal yang perlu diperhatikan dalam kode Anda a) Tinjau versi konvolusi dua dimensi (ini tidak menjadi lebih sederhana dari itu dalam kasus ini) dan b) Harap dicatat bahwa "gambar" Anda adalah sekumpulan koefisien yang mungkin menjadi sangat kecil atau sangat besar dan dalam hal apa pun di luar rentang dinamis umum 255 warna. Oleh karena itu, Anda perlu menemukan rentang koefisien Anda dan skala ke interval 0,255. Apakah Anda hanya menjalankan satu tingkat dekomposisi?
A_A
a) Tinjau versi konvolusi dua dimensi (ini tidak menjadi lebih sederhana dari itu dalam kasus ini) Saya tidak yakin apa yang Anda maksudkan dengan ini. "gambar" adalah sekumpulan koefisien yang mungkin sangat kecil atau sangat besar dan dalam hal apa pun di luar rentang dinamis umum 255 warna. Ini berarti bahwa setelah menambahkan saya harus memeriksa apakah nilainya melebihi 255 dan jika mulai dari 0? Apakah Anda hanya menjalankan satu tingkat dekomposisi? Ya terima kasih banyak
user1320483
Apa yang saya maksud dengan (a) adalah bahwa jika Anda ingin menerapkan filter Haar (sesuai jawaban yang diberikan di atas), Anda harus meninjau bagaimana hal ini dilakukan melalui operasi konvolusi dan dalam kasus filter Haar ini sangat sederhana. Ya, Anda perlu menormalisasi koefisien Anda ke kisaran 0-255 untuk dapat "melihatnya". Sejauh menyangkut RGB, harap fokus pada gambar skala abu-abu (hanya satu nilai). Anda perlu memahami terlebih dahulu apa yang perlu Anda lakukan dan kemudian melakukannya. Mencari "kode" akan lebih memakan waktu dalam jangka panjang.
A_A
8

Saya mulai menulis ini sebelum jawaban dari @A_A , tetapi jawaban itu sangat bagus. Tetap saya berharap yang berikut ini dapat sedikit menambah pengertian Anda.

xHx~

x=Hx~
HH

Gagasan di balik dasar dekomposisi sinyal adalah bahwa sinyal dapat direpresentasikan dalam beberapa cara yang lebih baik dalam basis alternatif. Yang lebih baik , kami maksudkan bahwa sinyal tersebut entah bagaimana lebih dapat diterima untuk diproses, atau dipahami, atau apa pun - itu tidak terlalu penting.

Poin yang perlu diperhatikan adalah bahwa, terutama dengan transformasi ortonormal, sinyal Anda masih merupakan sinyal apa pun basisnya. Anda seharusnya tidak menganggap satu basis entah bagaimana sebagai domain yang benar (saya menggunakan domain sebagai basis makna dalam pengertian umum) .

Sekarang, pangkalan yang berbeda memiliki sifat yang berbeda. Saya yakin Anda mengetahui teorema konvolusi yang menjelaskan hubungan yang berguna antara domain Fourier dan domain waktu. Ini membuat Fourier domain berguna untuk melakukan operasi konvolusi domain waktu.

Secara umum domain waktu (atau piksel) dapat dianggap memiliki resolusi waktu (atau spasial) yang sangat baik dan resolusi frekuensi buruk. Sebaliknya, domain Fourier dapat dianggap memiliki resolusi frekuensi yang sangat baik dan resolusi waktu yang buruk (atau spasial).

Basis wavelet cocok di suatu tempat di tengah dua di atas. Mereka cenderung memiliki resolusi frekuensi yang baik dan waktu yang baik atau resolusi spasial. Salah satu properti dari transformasi wavelet adalah penyebaran gambar alami yang baik. Maksud saya, energi dari gambar dikompresi menjadi beberapa koefisien besar, dan banyak koefisien kecil. Ini berarti sebagian besar informasi penting dari sinyal diwakili oleh seperangkat nilai yang relatif kecil. Ini adalah inti dari kompresi.

Wavelet yang berbeda memiliki sifat yang berbeda. Selain referensi dari @A_A, saya juga merekomendasikan tutorial IEEE ini pada DTCWT. Fokus dari tutorial ini bukan pada transformasi wavelet per se , tetapi alasan saya merekomendasikannya adalah karena wawasan fantastis yang disajikan pada masalah terkait DWT dan bagaimana mereka dapat dikurangi (saya akan mengatakan itu membutuhkan pemahaman dasar pertama). Ini benar-benar menyatukan pemahaman wavelet dengan pemahaman tentang transformasi Fourier dan mengapa yang terakhir memiliki sifat yang bagus.

Jika Anda ingin beberapa kode referensi lain pada transformasi Haar, mantan supervisor saya memiliki beberapa contoh matlab di halaman webnya (file zip di bawah "Kursus Pengkodean Gambar 4F8", HAAR2D.M dan IHAAR2D.M). Ini adalah contoh pengajaran yang sangat banyak.

Henry Gomersall
sumber