2007年7月16日 星期一

Working - Jiayu 01

時間:xx:00~xx:00(2007/07/14-07/16)
地點:Home
進度:① RGB轉YCbCr。
   ② YCbCr算DCT係數。

作業:
   ① 設計介面。
    

   ② RGB轉YCbCr。
     code
   ③ YCbCr算DCT係數。
     code

執行:run
   ... 已更新(2007.08.03/14:43)

參考:① 可欣學姐的程式。

心得:
   看別人的程式真的有很大的收穫
   之前課堂上的水平翻轉
   這次學姊的程式
   都讓我學到了一些好方法
   
   陣列的宣告
   過去我只會以int A[100];這樣的形式宣告
   當陣列大小無法預知時
   往往只能設個超大陣列
   資訊隱藏課程寫過的程式
   甚至還很辛苦地建了鏈結串列
   這次學到了又簡單又合適的方法(請參見code)

   在第二部分實作時
   忽然發現學姐程式裡的行列順序與我常用的不同
   ScanLine是先找出列(Y)
   我預設的陣列索引也是先找出列(Y)再找出行(X)
   即int A[1][2][3];表示第一列第二行的第三個值
   即(X,Y) = (2,1)
   我一貫的處理方式是一次一列
   然而paper裡的處理方式是一次一行
   所以兩層for迴圈的寬高順序兩種方式會不一
   也因此發現了學姐程式的一個手誤
   (bug②:開寬高不一的圖會有問題)
   花了一段時間在做兩個不同方式的轉換
   甚至於當滑鼠點擊(X,Y)=(1,2)這個點時
   我該顯示的陣列值應該是A[2][1][n]的
   而不是A[1][2][n]的

   算出來的DCT係數
   參照學姐的程式
   YˋCbˋCr會各有一個
   原本以為每個點只有一個DCT係數
   網路上的資料也都沒有提到數量的問題
   所以這個問題就寫信向老師求證
   ... 確實各有DCT係數

   paper讀到第三張
   研判目前寫的程式應該是屬於JSteg
   但距離藏資料於DCT係數的LSB
   總覺得光以上兩個步驟還差一點
   因為我算出來的DCT係數都是很小的值
   所以這個問題也寫信向老師請教了
   而Histogram在解決完這個問題時
   應該能順利孵出


備註:①目前已知的Bug有:
    不能在還沒開檔成功前按取消
    因開檔成功後所做的ScanLine動作不會先判斷是否開檔成功
    請容許我找一找有什麼判斷方法
    ... 已修正(2007.07.20/20:06)

   ②目前程式因不確定正確與否
    所以DCT係數是隨便用一個Label表示
    確定後未來會以美觀合宜的方式顯示

   ③在這次作業之前應該讀的Paper
    07/12之前我讀到了第二頁DCT之前
    但因當時此部落格尚未創立
    所以未記錄

沒有留言: