이미지에서 2D Haar 이산 웨이블릿 변환 및 역 DWT를 수행하고 싶습니다. 간단한 언어로 2D Haar 이산 웨이블릿 변환 및 역 DWT를 설명하고 2D Haar dwt의 코드를 작성할 수있는 알고리즘을 설명해 주시겠습니까?구글에 제공된 정보는 너무 기술적인데, 이미지를 4 개의 서브 밴드 (LL, LH, HL, HH)로 나누는 것과 같은 기본적인 것들을 이해했지만 DWT와 IDWT를 수행하기 위해 프로그램을 작성하는 방법을 실제로 이해할 수는 없습니다 또한 DWT가 이미지에서 전체적으로 수행되므로 DCT보다 낫다는 것을 읽었으며 머리 위로 넘어간 설명이 있습니다. 여기서 잘못되었을 수도 있지만 DWT 및 DCT 압축 기술이라고 생각합니다. DWT 또는 DCT를 수행하면 이미지 크기가 줄어들 기 때문에 지식의 일부를 공유하고 지식을 향상시키기를 바랍니다.
감사합니다
Re : 이미지 형식과 관련이 있습니까? DWT에 사용되는 "픽셀 값"은 무엇입니까? 이미지의 RGB 값으로 가정했습니다.
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();
}
}
}
출력은 실제 출력 근처의 짧은 선 사이에 얇은 선이있는 검은 이미지입니다. 논리를 잘못 해석했다고 생각합니다. 실수를 지적하십시오. 문안 인사