Je veux effectuer une transformée en ondelettes discrète 2D haar et un DWT inverse sur une image. Pourriez-vous expliquer la transformée en ondelettes discrète 2D haar et DWT inverse dans un langage simple et un algorithme à l'aide duquel je peux écrire le code pour 2D haar dwt"Les informations fournies dans google étaient trop techniques. J'ai compris les choses de base comme la division de l'image en 4 sous-bandes: LL, LH, HL, HH mais je ne comprends pas vraiment comment écrire un programme pour exécuter DWT et IDWT sur une image.J'ai aussi lu que DWT est meilleur que DCT car il est effectué sur l'image dans son ensemble et puis il y a eu quelques explications qui sont allées au-dessus de ma tête.Je peux me tromper ici mais je pense que les techniques de compression DWT et DCT parce que la taille de l'image diminue lorsque DWT ou DCT est exécuté sur eux. J'espère que vous partagez une partie de vos connaissances et améliorez mes connaissances.
Merci
Re: Cela a-t-il quelque chose à voir avec le format d'image. Quelle est la "valeur de pixel" qui est utilisée dans DWT? J'ai supposé que c'était la valeur RVB de l'image.
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();
}
}
}
La sortie est une image noire avec une fine ligne entre les deux, en bref nulle part près de la sortie réelle.Je pense que j'ai mal interprété la logique.Veuillez signaler les erreurs. Cordialement