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)

2007年7月19日 星期四

Meeting 4(07/19)

第四次Meeting @070719
其實我不太清楚今天到底算不算一次Meeting
不過老師說可以寫一下紀錄,所以就寫了。

http://arduino.tw/
↑這是我們今天聽課的重點

使用一塊版子接著麵包版...
把程式灌進去後可以做一些簡單的互動

成果
程式碼1(紅綠燈)
程式碼2(八個燈,由講師提供)

本來最終目標是接線跟程式都要自己來
但因為時間不夠的關係
把線接好後使用講師提供的程式碼就可以用了

本來沒打算寫到紅綠燈的
因為黃老師說要創意寫多燈
所以我就做了綠燈5秒,黃燈1秒,紅燈2秒的小東西

2007年7月17日 星期二

Meeting 3(07/17)

第三次Meeting @070717
※延續上週的課題

JPEG規格書

根據上週發下來的作業,我們在這次Meeting時提出問題。
1.DCT coefficients的Histogram(所有問題的源頭)
 上面的是藏資料前
 下面的是使用J-Stego藏資料後
2.卡方攻擊法的 公式
 0 < p < 1 越接近1表示越有可能藏資料,0則相反

※此次Meeting形式上全員到起

2007年7月16日 星期一

Working - 小冬 01

因為腦中只記得老師要我們繪製長條圖
所以當我要練習繪製長條圖時
已經忘記老師要我繪製怎樣的長條圖了...Orz

由於學姊的程式,已經將圖片的R,G,B,Y,Cb,Cr取出存入陣列中
所以我擷取了一小部分的程式,來製作了以下方向略嫌錯誤的程式。

《以YCbCr練習繪製長條圖》
程式碼
程式的介面

Paper的部分
我粗略的把介紹閱讀一遍並嘗試用自己理解的部分來翻譯
目前還在Hide and Seek小標題的部分。

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之前
    但因當時此部落格尚未創立
    所以未記錄

2007年7月15日 星期日

Meeting 2(07/12)

第二次Meeting
時間:09:00~16:00 (07/12)
地點:S302
※此後每一次Meeting地點跟時間同上
 若有不同才額外註記。

由於老師交代的程式作業,
一時之間還抓不到主意(不知道該怎麼寫才好)
所以這次Meeting僅對於Paper有問題的地方提出討論。
老師很熱心的指導我們銘傳大學圖書館,線上電子資料庫的使用方式
還有可以使用Google來查詢一篇Paper一共被其他論文引用了幾次。
以及該如何在文章中解說我們引用了哪篇Paper

(雖然目前還是有點小混亂...orz)
我相信這些東西,對於以後我們要整理資料,以及
如果有心想考研究所,都很有幫助。

下午,老師好像在忙研究所學長的畢業口試(聽說的)
我好像被鬼打到寫了一支奇怪的程式(還自以為那就是作業)....囧\

程式的內容是把學姊寫的程式中....
YCbCr那部份抓出來然後統計YCbCr的數量後繪製長條圖...
但是後來重看Paper才驚覺自己可能寫的不是作業....lol
(只好當作我在練習怎麼畫長條圖了....OTZ)

※此次Meeting佳玉因故缺席,紀錄上可以不必簽到
※等我Meeting紀錄整理ok,會在日後放到網路上。

Meeting 1(07/10)

第一次Meeting
時間:09:00~16:00
地點:S302

一早還沒睡醒
黃老師到的時候就先說了一些Vector Quantization(?)的概念。
(那似乎並不是我們專研會用到的,不過還是跟隔壁組的一起聽了)
傳送資料會傳送壓縮後的資料以及他的CodeBook,壓縮比是4還是某個公式就有點忘記。

接著是李老師找了一篇Paper給我們閱讀
[那篇Paper的Download位址:http://niels.xtdnet.nl/papers/practical.pdf]

還有跟我們解說了卡方攻擊法(Chi-Square Attack)(該篇Paper有提到)
並且交代了第一次的作業:閱讀Paper以及寫程式。

稍稍紀錄一下卡方攻擊法。
在我的印象中,卡方攻擊法是以(0,1)(2,3)(4,5).....(14,15)一組一個單位
取出他們的DCT係數(?<-總之有一個值)
找出每一組的平均值,然後畫出一個曲線。
正常的曲線,會是中央一做山,
有問題的曲線,會是兩座山(中央下陷)
由於,資料量藏越多東西會越接近那個曲線,
意即,每組的單數跟偶數的資料量越接近,就表示他們越有可能藏東西。
[以上就是我印象中的卡方攻擊法]

但是我有一點忘記X軸座標跟Y軸座標所代表的東西是什麼了

※此次Meeting全員到齊。

Files

專門放老師給我們的資料

JPEG 相關網站: [From老師的blog]
1. Joint Photographic Experts Group
2. 規格書 ITU 11505 T.81
3. Wikipedia: JPEG
4. 維基百科正體中文: JPEG

Papers:
1.Hide and Seek

程式區:
1.可欣學姊的程式
2.老師的JPEG程式
3.Chi-Square(BCB)
4.Chi-Square(Matlab)

文件:
1. 94專研題目簡介 版本一 版本二

其他:
1.如何使用BCB call Matlab

Test

這是一個專研用的BLOG~