討論區快速選單
知識庫快速選單
討論區最近新進100則主題 傑米的攝影旅遊筆記 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
請問用JAVA來寫HAAR小波的問題
更改我的閱讀文章字型大小
作者 : heidi610(heidi)
[ 貼文 2 | 人氣 669 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/8/5 上午 02:20:02
我的目的是要做一階小波
轉完應該是會有4塊LL LH HL HH的圖
下面是我的程式碼
可是跑出來的圖卻是全黑的
可以幫我看看嗎
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.awt.image.ColorModel;
import java.awt.Color;

public class Test444{

public Test444(){
;
}
public static void main(String args[]){
String src_gray = new String("C:\\Documents and Settings\\heidi\\桌面\\論 文資料\\test444\\Lenna_GRAY_512x512.bmp");

Test444 image_io = new Test444();

     image_io.bitTest(src_gray);
}

public void bitTest(String src_file){

BufferedImage src_bi = JAIImageReader.readImageBMP(src_file).createInstance().getAsBufferedImage();

int src_width = src_bi.getWidth();
int src_height = src_bi.getHeight();
Raster src_r = src_bi.getData();

int numBands = src_r.getNumBands();

BufferedImage dest_bi = new BufferedImage(src_width, src_height, BufferedImage.TYPE_BYTE_GRAY);

WritableRaster dest_r = dest_bi.getRaster();


     int [][] ZH = new int[src_height][src_width];
int [][] WH = new int[src_height][src_width];
int [][] LH = new int[src_height][src_width];

int [] iArray = new int[numBands];
for(int y=0; y<src_height; y++){
for(int x=0; x<src_width; x++){
src_r.getPixel(x, y, iArray);
ZH[x][y]=Integer.valueOf(iArray[0]);
}
}


for(int y=0; y<src_height; y++){
int temp=0;
for(int x=0; x<src_width; x+=2){
int K= ZH[x][y]+ZH[x+1][y];
int Q= ZH[x][y]-ZH[x+1][y];
int S = x-temp;
int D = x-temp+256;
WH[S][y]=K;
WH[D][y]=Q;
temp=temp+1;
}
}

for(int x=0; x<src_height; x++){
int temp1=0;
for(int y=0; y<src_width; y+=2){
int G = WH[x][y]+WH[x][y+1];
int J = WH[x][y]-WH[x][y+1];
int g = y-temp1;
int q = y-temp1+256;
LH[x][g]=G;
LH[x][q]=J;
temp1=temp1+1;
}
}

JAIImageWriter.writeImageBMP(dest_bi, "stego.bmp");
}
}

作者 : crazystar(CrazyStar) C++ Builder優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 449 | 人氣 17326 | 評價 2270 | 評價/貼文 5.06 | 送出評價 89 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人heidi610註記此篇回應為最佳解答 2007/8/9 下午 06:06:48

> for(int x=0; x<rc_height; x++){
> int temp1=0;
> for(int y=0; y<src_width; y+=2){
> int G = WH[x][y]+WH[x][y+1];
> int J = WH[x][y]-WH[x][y+1];
> int g = y-temp1;
> int q = y-temp1+256;
> LH[x][g]=G;
> LH[x][q]=J;
> temp1=temp1+1;
> }
> }

應該是最後一段的迴圈所引起的.
1. 垂直掃瞄時, 寬度不是應該變為原本的二分之一嗎? 可是你卻還是用原本的寬度.
2. 你的 x 跟 y 的範圍沒寫好. 若 src_width = src_height, 那還 OK,
    若二者不相等, 那結果就不正確了.
3. 那個 x - temp 跟 x - temp + 256 的用法, 有些多此一舉喲.

:)

for(int x=0; x<src_width/2; x++)
    for(int y=0; y<src_height; y+=2)
{
    ...
}
作者 : heidi610(heidi)
[ 貼文 2 | 人氣 669 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/8/10 上午 12:00:33
很感謝你的回答喔~~我會再努力試試看的~^^
 板主 : 徵求中
 > 影像處理與計算機圖學 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 影像處理與計算機圖學 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
影像處理與計算機圖學
1 Linkin 780 
2 CrazyStar 400 
3 青衫 360 
4 白老鼠(Gary) 330 
5 悠悠深藍 220 
6 none 220 
7 shou 200 
8 ultra 200 
9 ghost 140 
10 ozzy 130 
影像處理與計算機圖學
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875