星期四, 11月 30, 2006

Week 11: 課程紀實 (2006/11/30): 3D Watermarks

本週程式撰寫主題是: 使用者可以使用滑鼠任意點選浮水印要放置的位置。由於今天同學們在黑板上所提出的問題剛好是 10 個, 所以課程不用測驗的方式進行, 改採用引導的方式。同學的問題中, 有提到 3D 的浮水印製作, 因此, 黃老師請同學先用 Powerpoint 中的文字藝術師先製作一張屬於自己的 3D姓名, 放到我們作業的專屬部落格 im-hwshow 中, 然後就可以將這張 3D 浮水印用程式加入到圖片中。

第二堂課我們根據同學填寫的教學反應問卷回應的內容, 與某些同學做個別訪談。小溫認為我們的課程應該更生活化一點。因此, 我介紹了這星期天我在新竹煙波飯店所接觸到的創意小舖。創意小舖主要是將現場拍攝的個人數位相片經過去除背景處理, 再與美麗的風景照片合成, 最後製作成各種商品。基本上, 我認為受過我們多媒體課程訓練過的學生, 要寫這樣的程式是沒有問題的, 同學應該可以清楚知道自己擁有哪些能力, 接下來, 同學應該努力在這些能力上發揮自己的創意, 將來才有可能靠此能力在社會上存活下來!

影像創意小舖 ( Week 11)
煙波小舖現場拍攝相片的背景為單純的綠色, 這樣的設計可以方便去除背景!!

影像創意小舖的商品 ( Week 11)
當場製作出來的馬克杯, 一個要價NT. 250, 比起一般的馬克杯高出了數倍。

第三堂課, 我們一一解答同學寫在黑板上的各個問題, 除了再次講解 ScrollBar 這個元件之外, 也介紹了 ProgressBar 這個元件與其使用方式。比較值得一提的是 卉妤 提出了一個將浮水印在藏在影像色彩值的最低位元(LSB)之中的神奇問題, 我和黃老師都很好奇卉妤竟然知道這樣的作法, 真的很不簡單呢! 對於資訊隱藏有興趣的同學, 可以前往我的 研究興趣 網頁看看!!

神奇的問題 ( Week 11 )

本週同學除了必須完成程式作業外, 我們還讓同學領取了 數位內容月刊 9 月號, 同學必須選讀其中一篇文章, 並在自己的網誌中寫下心得與大家分享。
 

星期四, 11月 16, 2006

Week 9: 課程紀實 (2006/11/16): Programming Test

今天的課程一開始, 黃老師就請同學針對課程內容, 提出問題, 並寫到白板上。並和同學約定, 如果全班提不出 10 個問題, 那今天就會用上機實測的方式進行。由於同學只提出了六個問題, 我們便開始了今天緊張又刺激的上機實測。

實測的題目是一組與可視浮水印 (visible watermarking) 相關, 由淺到深的連鎖題, 前面兩題同學的表現普遍都很不錯, 第二題第一位做完的同學是柏盛, 這個我們一點也不意外, 不過, 第二位做完第二題的同學是 怡妌, 這點就大大超乎我和黃老師的預期! 因此, 下課前我們給了怡妌一點小小的鼓勵, 希望班上其他同學能夠快快跟上進度!!



 

星期四, 11月 09, 2006

Week 8: 課程紀實 (2006/11/09): Color Histogram



今天的第一堂課, 黃老師首先介紹我們的下一個程式實作的目標: Visible Watermarking, 並用 實例 讓同學了解什麼是 Visible Watermarking。

接著, 黃老師請同學開始練習將一張彩色影像的 R, G, B 顏色分別萃取出來, 有不少同學, 如 彥鋒, 兩三下就把程式寫出來了, 表現很不錯。

第二堂課, 我開始講解什麼是 Color Histogram。為了讓同學了解 Color Histogram 對一張影像的意義為何, 我從影響數位相機的光圈, 快門, ISO, 曝光值 開始講解, 然後問同學一張曝光過度的相片, Histogram 可能的分布為何?



第三堂課, 我們談到了什麼是 Dynamic Range, 也介紹了一篇國科會簡訊網的相關文章: 高動態範圍影像(High Dynamic Rang Imaging): 數位攝影跟數位錄影的新生代



下星期, 我們希望同學可以帶數位相機到課堂上來, 然後當場拍一些照片, 實際去分析影像的Histogram, 這樣同學會更有感受。另外, 今天課堂上講解到的數位相機基本概念, 請參考 "數位相片編修聖經" (施威銘主編, 旗標出版), 第五章: 曝光調整!

同學們, 請在下星期上課前, 研讀一些有關數位相機的相關文章, 在課堂上分享心得。(列為學期成績重大參考依據, 請大家告訴大家!)
 

課程實作目標: Visible Watermarking


我在另一部落格 Lee's Stego Research NotesGoogle AdSense 廣告, 無意間看到了這個專門做 Visible Watermarking 的軟體, 就想到其實這個軟體的基本原理非常簡單, 和之前在 影像處理課程Homework 3 是一樣的, 因此就決定將這門課的色彩處理部分的程式實作目標設定成寫一個具有簡單的 Visible Watermarking 功能的程式。

要完成這樣的目標, 當然會有一些色彩處理的基本能力需要養成, 我們課程會在未來幾週將一些基本觀念讓同學了解, 希望同學可以盡早達到所設定的目標。


Software for adding visible watermarks to digital photos



 

星期五, 11月 03, 2006

Week 7: 課程紀實 (2006/11/02): 8-Puzzle Using Top & Left

本週的課程主題同樣是 8-puzzle 程式實作, 接續上週的討論, 繼續完成遊戲。由於同學們的進度快慢不一, 因此我們今天的策略是讓進度快的同學上台分享他對整個程式設計的構想與如何完成實作。



課程一開始是由 博欽 開始分享, 然後是 柏盛。 為了達到移動分割後小圖片的目的, 博欽用上星期所教的 TCanvas::CopyRect method; 柏盛則是用 TPicture::TBitMap::Assign method 的方式。

至於如何判斷空白的位置, 博欽使用了一個變數來儲存, 柏盛則是用來一個陣列 ImageFlag[3][3] 的方式來記錄。



最後, 黃老師比較了各種不同的方式, 點出差異點在哪, 而不是直接評論哪個方法較好... 希望同學都能夠用自己的方式思考、實作、找出問題、解決問題、然後分享。



在第三堂課, 我則是示範了我的方式, 直接將影像物件的位置移動, 而不去改變影像內容。換句話說, 就是直接改變 Top 與 Left 兩個屬性值。每一張小影像我分別用 im00, im01, im02, im20, ... im22 來表示。im22 設定為空的影像, 把其 Visible 屬性設定為 true, 然後將 im22->Top 與 im22->Left 分別用 iEmptyTop 與 iEmptyLeft 紀錄之。

當每一張小影像被滑鼠 Click 時, 則啟動 OnClick 事件處理程序: 判斷空格是否在旁邊, 如果在旁邊, 則該影像的位置與 iEmptyTop 與 iEmptyLeft 值交換。如果不在旁邊則不做任何處理。

假設我們用 iDeltaTop 與 iDeltaLeft 來記錄某個影像與空影像的差距。所以,
iDeltaTop = abs(im00->Top - iEmptyTop);
iDeltaLeft = abs(im00->Top - iEmptyLeft);

有了這個差值, 我們就很容易用下列式子來判斷 im00 這張影像是否在空格的旁邊,
if ((iDeltaTop==0)&&(iDeltaLeft==100) || (iDeltaTop==100)&&(iDeltaLeft==0))

每一張小影像的大小為 99*99, 加上白色分隔線, 所以相鄰小影像的距離為100, 相鄰的兩張小影像, 至少必須再同一排, 或是同一列, 所以必須有一個差值為 0。

至於兩個數值要互換, 只要用一個 iTemp 即可。同學應該是沒問題的!