मैं एक छवि पर 2 डी हर असतत तरंग परिवर्तन और उलटा DWT प्रदर्शन करना चाहते हैं। क्या आप कृपया सीधे सरल भाषा में DWT 2 डी हार असतत तरंग परिवर्तन और व्युत्क्रम की व्याख्या करेंगे और एक एल्गोरिथ्म का उपयोग कर सकते हैं जिसके लिए मैं 2D haar dwt कोड लिख सकता हूँ? Google में दी गई जानकारी बहुत अधिक तकनीकी थी। मुझे छवि को 4 उप-बैंडों में विभाजित करने जैसी बुनियादी चीजों को समझा गया: एलएल, एलएच, एचएल, एचएच लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि DWT और IDWT पर प्रदर्शन करने के लिए एक कार्यक्रम कैसे लिखें एक छवि। मैं यह भी पढ़ता हूं कि डीडब्ल्यूटी डीसीटी से बेहतर है क्योंकि यह पूरी तरह से छवि पर किया जाता है और फिर कुछ स्पष्टीकरण था जो मेरे सिर के ऊपर चला गया था। मैं यहां गलत हो सकता हूं लेकिन मुझे लगता है कि डीडब्ल्यूटी और डीसीटी संपीड़न तकनीक क्योंकि उन पर DWT या DCT का प्रदर्शन होने पर छवि का आकार कम हो जाता है। आप लोग अपने ज्ञान का एक हिस्सा साझा करते हैं और मेरे ज्ञान को बढ़ाते हैं।
धन्यवाद
पुन :: यह छवि प्रारूप के साथ क्या करने के लिए कुछ भी है। "पिक्सेल का मूल्य" क्या है जो DWT में उपयोग किया जाता है? मैंने इसे छवि का आरजीबी मूल्य माना है।
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();
}
}
}
आउटपुट बीच में एक पतली रेखा के साथ एक काली छवि है, जो वास्तविक आउटपुट के पास कम है। मुझे लगता है कि मैंने तर्क को गलत तरीके से समझा है। कृपया गलतियों को इंगित करें। सादर