ฉันต้องการที่จะทำการแปลงเวฟเล็ตแบบไม่ต่อเนื่อง Haar 2D และผกผัน DWT บนภาพ คุณช่วยอธิบายการแปลงเวฟเล็ตฮาร์ตแบบไม่ต่อเนื่อง 2D และ DWT แบบผกผันในภาษาง่าย ๆ และอัลกอริทึมที่ใช้ซึ่งฉันสามารถเขียนโค้ดสำหรับ 2D haar dwt ได้ไหมข้อมูลที่ให้ใน google นั้นมีเทคนิคเกินไปฉันเข้าใจสิ่งพื้นฐานเช่นการแบ่งภาพเป็น 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();
}
}
}
เอาท์พุทเป็นภาพสีดำที่มีเส้นบาง ๆ อยู่ระหว่างนั้นในระยะสั้นใกล้กับเอาต์พุตจริงฉันคิดว่าฉันตีความตรรกะผิด ๆ โปรดชี้ให้เห็นข้อผิดพลาด ความนับถือ