Wavelet-transformation

1D-Wavelets af typen Daubechies-4. Den blå er Wavelet-skaleringsfunktionen - og den røde er den "standard" Wavelet-funktionen.
1D-Wavelets af typen Daubechies-4 i frekvensfunktionsrummet. Her ses det Wavelet-skaleringsfunktionen har flest lavfrekvente frekvenser (blå) - og at den røde "standard" Wavelet-funktion har flest højfrekvente frekvenser.
Et eksempel på en 2D diskret wavelet-transformation som anvendes i billedformatet JPEG2000. Gråtonerne er Wavelet-koefficienter.
2D-Wavelet-koefficienter typisk vist som gråtoner. For hver kvadrat "niveau" (Ø, SØ, S) man går - går man også en Wavelet-koefficient skalaniveau op eller ned - niveauet er definitionsafhængigt - nogle øger den ved Wavelet-dilation og andre lader den falde. Kvadratet mærket "DC" er minimum én eller flere Wavelet-skaleringsfunktions-koefficienter.

Indenfor matematik er en wavelet-række en repræsentation af en kvadratisk integrabel (reel- eller kompleks-værdi) funktion af en bestemt ortonormal række genereret af en wavelet. Denne artikel viser en formel, matematisk definition af en ortonormal wavelet og af den integrale wavelet-transformation også kaldet den integrale wavelet-afbildning.

Formel definition

En funktion kaldes for en ortonormal wavelet hvis den kan anvendes til at definere et Hilbert-basis, som er en fuldstændigt ortonormalt system, for Hilbertrummet af kvadratisk integrable funktioner. Hilbert basen bliver konstrueret som familien af funktioner ved hjælp af dyadiske translationer og dilationer af ,

for heltal . Denne familie er et ortonormalt system hvis det er ortonormalt under det indre produkt

hvor er Kroneckers delta og er det standard indre produkt Fuldstændigskravet er at enhver funktion kan ekspanderes i basis som

med rækkekonvergensforstået som værende normkonvergens. Sådan en funktionsrepræsentation f er kendt som en wavelet-række. Dette medfører at en ortonormal wavelet er selv-dual.

Wavelet-transformation

Den integrale wavelet-transformation eller integrale wavelet-afbildning er integraltransformationen defineret ved

Wavelet-koefficienterne er så givet ved

Her er, kaldet den binære dilation eller dyadiske dilation, og er den binære eller dyadiske position.

Wavelet-kompression

Wavelet-kompression er en form for datakompression der er velegnet til billedkompression (nogle gange også videokompression og audiokompression). Kendte implementationer er JPEG 2000, DjVu og ECW for enkelt billeder, REDCODE, CineForm, BBC's Dirac, og Ogg Tarkin for video. Målet er at gemme billeddata på så lidt plads som muligt i en fil. Wavelet-kompression kan enten være tabsfri eller ikke-tabsfri.[1]

Se også

  • Kontinuert wavelet-transformation
  • Diskret wavelet-transformation
  • Complex wavelet-transformation
  • Dual wavelet
  • Wavelet-modulation
  • Multiresolution analyse
  • Nogle personer genererer spektrogrammer ved at anvende wavelets, kaldet skaleogrammer. Andre personer genererer spektrogrammer ved at anvende short-time Fourier-transformation
  • Chirplet-transformation
  • Tids-frekvens-repræsentation

Kilder/referencer

  • Chui, Charles K. (1992). An Introduction to Wavelets. San Diego: Academic Press. ISBN 0-12-174584-8.
  1. ^ JPEG 2000, for eksempel, kan man anvende 5/3-wavelet til tabsfri (reversibel) transformation og en 9/7-wavelet for ikke-tabsfri (irreversibel) transformation.

Eksterne henvisninger

Wikimedia Commons har medier relateret til:

Medier brugt på denne side

Matrix of wavelet coefficients.svg
Matrix of 2D wavelet transform coefficients.
Daubechies4-functions.svg
Forfatter/Opretter: LutzL, Licens: CC BY-SA 3.0
Daubechies 4 tap wavelet and scaling functions
Daubechies4-spectrum.png
Forfatter/Opretter: unknown, Licens: CC BY-SA 3.0
Jpeg2000 2-level wavelet transform-lichtenstein.png
Forfatter/Opretter: Alessio Damato, Licens: CC BY-SA 3.0

The picture shows a 2 level wavelet transform. For the low-pass and high-pass filters, I have used the same of the JPEG2000, lossy transform, so that this is the wavelet that is used in the JPEG2000 format. In general, it is quite hard to show a wavelet transform properly, because of the different ranges of the different parts. I have made the following choices.

First of all, I wanted to use a picture with both flat surfaces, sharp edges and details. The standard test image Lenna is commonly used for this purpose, but I didn't want to use it because it is not in the public domain. I took a look at the big featured picture gallery con Commons and I have chosen Image:Lichtenstein img processing test.png because it has lots of details in the bottom left, while the top right has almost no details because of the sky. Moreover, the edges of the castle are really sharp, so they can be clearly seen in the wavelet transform.

I have saved the original image in a file called lichtenstein.png, to make it simpler.

Then I have used the following Matlab script:

clear all

%input must be 512x512
img=imread('lichtenstein.png');

img=im2double(img);
img=rgb2gray(img);

% filters in JPEG2000
Lo_D=[0.0267 -0.0168 -0.0782 0.2668 0.6029 0.2668 -0.0782 -0.0168 0.0267];
Hi_D=[0.0912 -0.0575 -0.5912 1.1150 -0.5912 -0.0575 0.0912];

%calculate the 2-level Wavelet transform
[scaled, vertical, horizontal, diagonal]=dwt2(img,Lo_D,Hi_D);
[scaled2, vertical2, horizontal2, diagonal2]=dwt2(scaled,Lo_D,Hi_D);

%crop pictures (for displaying purpose)
scaled2=imcrop(scaled2,[4 4 127 127]);
horizontal2=imcrop(horizontal2,[4 4 127 127]);
vertical2=imcrop(vertical2,[4 4 127 127]);
diagonal2=imcrop(diagonal2,[4 4 127 127]);
horizontal=imcrop(horizontal,[4 4 255 255]);
vertical=imcrop(vertical,[4 4 255 255]);
diagonal=imcrop(diagonal,[4 4 255 255]);

%increase contrast (for displaying purpose)
vertical=imadjust(abs(vertical));
horizontal=imadjust(abs(horizontal));
diagonal=imadjust(abs(diagonal));
vertical2=imadjust(abs(vertical2));
horizontal2=imadjust(abs(horizontal2));
diagonal2=imadjust(abs(diagonal2));

%put them all together
transform=zeros(512,512);

transform(1:128,1:128)=scaled2;
transform(1:128,129:256)=horizontal2;
transform(129:256,1:128)=vertical2;
transform(129:256,129:256)=diagonal2;
transform(1:256,257:512)=horizontal;
transform(257:512,1:256)=vertical;
transform(257:512,257:512)=diagonal;

imwrite(transform,'Jpeg2000_2-level_wavelet_transform-lichtenstein.png');

If I had placed all the transforms one next to the other, I would have got a picture wider than 512x512, with some odd behaviour close to the edges. In order to avoid those problems, I have cropped the transforms so that I can easily put one next to the other to get a 512x512 picture. In general, it is not a good idea to discard information, but here I just wanted to create a simple and clear example.

In order to show the derivatives, I have taken the absolute values (I want to show the magnitude of the derivative), then I have improved the contrast to make them look clearer.