2007年7月27日 星期五

Meeting - Jiayu 01

次序:05
時間:2007.07.26
地點:教師休息室

內容:
   ①程式介紹
    
    (選用自然圖片較佳)

   ②解答問題
    ⒜做DCT時,不足以形成一個8*8 Block的部分
     其DCT係數做以下安排複製的error較小。
     ... 在DCT之前不足8x8 Block的部分就要補足,而
      (RGB或YCbCr)補足的方法如下

     
    ⒝MCU在?步驟後做。(請原諒我只記得不在量化前)
    ⒞Quantization Table Setting如何調整。
     (請參閱老師的程式)
    ⒟SequentialˋPseudo random(JStegˋOutGuess0.1)
     是依量化後的DCT係數做不同方式的選取,
     與entropy coding無關。

   ③執行各自的程式

心得:
   這次Meeting
   在老師介紹程式的過程中
   第一個重大發現是......
   量化舉陣並非只有一個
   維基上的是Y的量化矩陣
   此外還有一個CbˋCr共用的量化矩陣
   我想我之前聽課時可能魂都飛了吧
   加上又先跳過了學姐程式量化的部分
   以致於如此基礎的常識昨天才知道
   該 反 省 Orz

   第二個重大發現是
   經由小冬同學的動作
   才知道BCB設計程式時
   滑鼠點到哪一行
   下方狀態列就可以看寫了多少行程式
   截至昨天為止
   我都很認真地等待Compiling的顯示
   而且不是每次都能看到
   不是每次都跑得很慢讓我看到...囧

   程式的介面我大多以Photoshop為目標
   看了老師的多功能程式後也深深憂慮到
   不用PageControl的下場是
   未來可能必須開幾十個甚至上百個Form
   所以這幾天想先縮減程式碼ˋ優化命名
   之後再繼續前進
    
   其餘老師程式先介紹過的部分
   就必須待日後實做過
   以更加深印象並發現問題

Meeting 5(07/26)

第五次Meeting
※時間:2007.07.26
※地點:教師休息室

這次Meeting
老師很仔細的跟我們介紹他之前寫的一支程式

裡面有
分析RGB,YCbCr,DCT,QDCT,重建YCbCr,重建RGB
將圖片壓縮為JPEG並調整壓縮比,JSteg....等功能

我跟佳玉稍微Show了一下這幾個禮拜來寫出來的程式
老師說,當做出DCT跟QDCT後,可以嘗試寫寫JSteg等功能

此外,我們向老師預借Information Hiding Class曾出現過的課本

※以下稍作整理提要
1.尚未完成DCT,QDCT的人繼續努力
2.已經寫出DCT與QDCT的人,嘗試寫JSteg (演算法)
 (更進階是使用卡方分析自己寫的程式數據)
3.向老師借課本來研讀Information Hiding歷史
4.研究老師發給我們的程式

2007年7月26日 星期四

Working - 小冬 02

時間:070725(此版本完成)
目標:將YCbCr DCT並Quantization

介面
Code1(Image Open)
Code2(Draw YCbCr)
Code3(DCT&Quanti)

執行

目前功能:
1.Open Picture
2.Draw R,G,B
3.Draw Y,Cb,Cr
4.DCT&Quzntization並未分開

未來調整或新增的功能:
1.改變長條圖的畫法
2.提供Histogram的X,Y軸值
3.試著顯示每個區塊的Y,Cb,Cr值
4.希望以自己的方式引進寫出與佳玉的程式雷同的功能
5.介面

簡易解說本程式概念:
1.雖然說Paper只畫-25~25
但是我的Draw YCbCr會隨著該圖片的DCT值更動長條圖範圍(會超過上面的範圍)

2.在Open Picture的同時
取出R,G,B(可以Draw統計圖)並且算出Y,Cb,Cr值...

3.DCT & Quantizationa
計算Y,Cb,Cr的DCT值,並且量化....雖然使用不同陣列儲存,但工作一同

4.DCT function(此方面參考學姊程式,小細節修改)
※Bug-學姊的程式...Height與Width的處理放反了
※此部分的intIm1QDCTY,Cb,Cr也有點小問題
後來我並未引用,改用別的方式把量化後的值換成整數

心得:
雖然很想要靠自己的能力寫出DCT最核心的部分
但是因為與Math.h不熟的緣故,最後採用學姊的程式來修改

在其他的部分,試著用自己的方式寫了
覺得可以新增的功能很多,也想做更多的嘗試
(不過還沒思索到Stego的部分....orz)

我試著玩過佳玉的程式,也麻煩她真人解說了一些
感覺她的程式很多功能....玩過後希望自己也能做到某些功能
除此之外,希望能挑戰她的功能增強版

總之,第一版本就暫時定案(算是最簡單版)
準備開始挑戰多功能!!

2007年7月25日 星期三

Working - Jiayu 03

時間:xx:00~xx:00(2007/07/23-07/24)
地點:Home
進度:偽Frequency Histogram。

作業:
   ① 顯示介面。


   ② Frequency Histogram of Original Image。
     code
     ... 已修正(2007.08.09/15:02) → code
   ③ Frequency Histogram of Modified Image。
     code
     ... 已修正(2007.08.09/15:02) → code
   ④ 調整Histogram比例。
     nUnit[0]-=20; 或 nUnit[0]+=20;

執行:run
   ... 已修正(2007.08.09/15:02) → run

心得:
   這次有大半時間是在拉框
   正所謂線是由無限多個點組成 Orz
   每次手算的預計情形都與實際有差距
   大部分長條的位置ˋ
   左右兩邊長條的位置ˋ
   格線的位置要至於長條的中間ˋ
   留邊......等等
   最後決定憑感覺了
   這個時候就是差不多就好 Orz

   此Histogram的比例縮放方式不同於以往
   由於之前繪製的Histogram是沒有單位限制
   所以即使是數量稀少
   還是會畫出來
   但本次的Histogram由於是單位制
   至少需達一定數量才能顯示
   所以縮放的方式不再是以往的修改長條的長度比例
   而是修改數量單位
   以上是畫完兩種方式之後的頓悟b
      
   介面由於時間緊迫暫時這樣
   這幾天希望能修改至理想的狀態
   目前只取-25到25這之間的DCT係數做個別數量計數
   這幾天也希望能改善至可調整式   

備註:①目前已知的Bug有:
    ⒜每更新一次DCT係數即產生一個新Form
     (Working - Jiayu 02有記載)
    ⒝目前取消顯示視窗未能確實取消顯示
     盡快尋找到關閉其他Form的正確語法後開放功能
    ⒞目前程式不提供超過一次的開圖
    ⒟DCT係數視窗最小化時
     不該作用的OnMouseDown事件仍繼續作用

   ②本隻程式本次更新項目如下:
    ⒜程式中,所有需判斷當下可否執行的部份均做好判斷
     並做適當限制

   ③④承Working - Jiayu 02
   ⑤本程式以隨機加一代替藏匿訊息。
   ⑥以上全部......寫錯程式 Orz

2007年7月21日 星期六

Working - Jiayu 02

時間:xx:00~xx:00(2007/07/20-07/21)
地點:Home
進度:設計顯示YCbCr整數化DCT係數的介面。

作業:
   ① 顯示介面。


   ② 設計。
     code

執行:run
   ... 已更新(2007.08.09/15:02)

心得:
   DCT係數顯示介面
   寫Histogram之前如果不先完成它的話
   我會一直掛心而很難跳過它繼續前進||b
   而且DCT係數也已確定沒算錯
   (參照學姐的方法)
   於是我就先把時間砸在設計上面

   之前在檢查我算的數與參考程式是否相同時
   由於每次都要重拉一次表格的ScrollBar來檢視我要的值
   就我懶惰的本性來說有點辛苦
   於是我想了個應該會較為方便的介面
   依照滑鼠點擊到的點
   顯示該點在做DCT時所屬Block裡的所有DCT係數值

   在這個方法中遇到的第一個難題是
   實際顯示的ChildForm大小ˋ位置不如我調整的
   屬性中我暫時沒有注意到相關設置
   網路上找了一陣子
   也都沒有提到類似問題
   於是使用暴力解決
   即程式碼中提到的初始ChildForm的大小ˋ位置

   第二個難題是
   OnMouseDown()下使用其它Form的StringGrid時
   顯示錯誤訊息...
   "Access Violation at address 004032EB in Module"
   我測試了另一個物件Image1也出現相同問題
   再改測試放在同一個Form時問題未出現
   上網查過這個訊息的意義
   解釋1:試圖訪問一塊已經釋放的內存
   腦中想到的是那個Form早就生出來了
   (OnMouseDown下有先判斷是否已生出)
   怎麼會是已釋放呢?
   (如果內存是我想像的這樣的話)
   該解決方法是打開CPU依位址找出程式設breakpoint
   我在依位址找出之後
   三四個區域我也沒有breakpoint該設哪一區的概念
   於是放棄||b
   之後便開始亂試
   目前成功的解決方法是
   在OnMouseDown下再新增一次顯示DCT係數的Form
   雖然沒有錯誤訊息
   但Form會一直增加(汗
   所以有時間會努力試其他方法修正

   未來幾天想要顯示Double型態的值
   以及讓使用者決定要顯示的大小
   以及新增顯示全部的功能
   ... 已更新(2007.07.22/17:55)
   不過終於可以心無旁騖地進入正題Histogram
   真的要開始寫了Orz

備註:①目前已知的Bug有:
    ⒜每更新一次DCT係數即產生一個新Form(上文有記載)
    ⒝目前取消顯示視窗未能確實取消顯示
     會盡快尋找到關閉其他Form的正確語法
    ⒞目前程式不提供超過一次的開圖
    ⒟DCT係數視窗最小化時
     不該作用的OnMouseDown事件仍繼續作用
    ... 已修正(2007.08.09/15:02)

   ②本隻程式本次更新項目如下:
    ⒜程式中,XY座標ˋRGB值ˋYCbCr值由原本的
     OnMouseDown顯示修改為OnMouseMove顯示
    ⒝程式中,所有需判斷當下可否執行的部份均做好判斷
     但暫無警告訊息提示使用者
    ... 已修正(2007.07.22/17:55)

   ③顯示視窗的選項是以沒有上述的Bug為前提
    所以目前如果點顯示視窗
    還是會在有視窗的情況下再顯示一個
    ... 已修正(2007.08.09/15:02)

   ④目前不足以形成一個8*8 Block的部分
    其DCT係數目前本隻程式先忽略
    待確定後再修改
    ... 已更新(2007.08.03/14:43)