顯示具有 99360134 徐賢傑 標籤的文章。 顯示所有文章
顯示具有 99360134 徐賢傑 標籤的文章。 顯示所有文章

2012年11月16日 星期五

99360134 徐賢傑 HW03

         這次的作業,我的程式繼上一個作業繼續加強功能,首先遇到的困難是之前打的程式雜亂無章,不好管理並新增功能。所以首先是整理了所有程式碼,並將之前所有寫過的程式碼大大整理了一番,分類並將重複的程式碼以方法取代。
 
         這張是Windows的預設圖片,挑出來做分析討論
 
原圖
 
 
 
 
 
 
一、平滑化
 
 
假設這是一張圖片15*11的圖片,每一個方格代表一個Pixel,每個方格內也有RGB三個色彩值,
 
由於平滑化是將九宮格內的Pixel加起來再平均除以九,
 

又由於邊框不能算在內,所以只能平滑化最外圍Pixel以內的圖
        為了彌補這個缺點,我有想過利用更大一圈的矩陣去放此圖片,然後去偵測九宮格的外圍八格是否有色彩值,若沒有色彩值就略過,也就是最邊邊的四個角落,是將四格的色彩值加總平均除以四,其他邊邊都是加總除以六,不過好像沒甚麼差別,倒是就沒有複雜化程式碼。
 
平滑化片段程式碼
 
平滑化過後的花朵
 
 
二、銳化
銳化是將九宮格內的Pixel,用下圖的比重去總和
 

跟平滑化相同意思,邊邊一樣是不能運算,
 
        彌補這個缺點,利用更大一圈的矩陣去放此圖片,然後去偵測九宮格的外圍四個方向是否有色彩值,若沒有色彩值就一樣略過,也就是跟平滑化一樣,只取有色彩值的部分作運算,比重也修改,不過也因為不想讓程式複雜化,所以程式並沒有寫上。
 
 
銳化片段程式碼

銳化過後的花朵
 
 
三、胡椒鹽
撒上胡椒鹽是利用在每個Pixel,隨機去決定是否要變化,
 
 假若設定胡椒鹽10%的話,即是產生一個隨機變數(0~100),假如數值再10以內及改變顏色,並且再隨機產生0~1的數值,若是0則黑色,否則白色。
 
 
胡椒鹽片段程式碼

胡椒花!?
     
 
 
四、中值濾波器
 
 
中值濾波器是將九宮格內的色彩值,
取出來之後排序,
之後拿取中間值
另外八格再同樣的作法
 
中值濾波器片段程式碼

這張是胡椒鹽過後使用中值濾波器
 

 
程式總功能

這次的作業,感覺還挺好玩的,總共新增了平滑化、銳化、中值濾波器、胡椒鹽這些功能。了解到網路上的影像處理程式(例 : 美圖修修),是怎麼寫出來的了。如果再加上新功能,使用元件的"點擊畫面"事件功能,點擊到的部分圓圈範圍內平滑化或中值濾波器,即可做到放上大頭照,點擊去除痘疤類似的功能。

2012年10月18日 星期四

99360134徐賢傑



這次的影像處裡作業,我是用C#去撰寫的,因為專研用了C#,怕說又用了Build C++ Xe2去寫,指令會錯亂,於是私底下去查了關於影像方面基本的使用指令。
先前有上過黃世育老師的互動電子技術專題課程,其中有交到OpenCV的一些觀念,私底下也有找過老師詢問影像在記憶體存放位置與概念。
在這學期的影像處理課堂上,也有事先預習課外讀物,並買了老師指定用書,雖然所學淺薄,對影像處理涉略不深,導致課堂上許多地方一知半解,回家也上網查詢許多資料,像是最基本的RGB色彩值也在小畫家上配對玩了許久。
對於程式碼這個部分,在前一週老師課堂上有講解與解釋了程式碼的概念與用法,我再搭配了之前在黃老師的課堂上所到的一些概念,大致上是懂了許多。到了下課也還是有四五位同學問我程式碼的部分,所以在課堂上幫同學舉手提問,對於記憶體的存放位置的問題,也加深與確認自己的概念是否正確。
片是由一個個的點所組成,每一個點又存放了三~四個色彩值(RGB+透明度),程式是將每一個點取出來後再把每個點的RGB分別的色彩值取出,並分類到自己設定的矩陣並且去計算個數,再去做累加或是均化的運算。




以下借用老師的小鳥圖
Histogram之後






均化之後

小鳥圖




另外比較還在深入探討的是所謂的均化”(equalization)的含意到底為何?

用意是為了將圖片對比呈顯更鮮豔,我寫的是將每個RGB的色彩值累加後,計算其在整張圖的百分比(除以total_pixel)再乘上255,乘出來的數是0~255之間,並不太了解呈現出來的是甚麼東西?
在思考及猜想後,我將原本RGB的色彩值放入新的乘出來的數
R3[R2[i]] = R[i]; 
//R = 原圖的RGB色彩值陣列;R2 = 乘出來的數值陣列;R3為均化後的直方圖
以下此為實際做出來的圖片
但似乎是與其他學做出來的有點出入..


研究了許久
b.SetPixel(i, j, Color.FromArgb(R2[b.GetPixel(i, j).R], G2[b.GetPixel(i, j).G], B2[b.GetPixel(i, j).B]));
這行指令實在是研究了很久才出來的

也是將均化的部分觀念釐清才有的成果

這張圖是我在去年跨年2011到2012年到福隆海水浴場所拍的
在台灣的第一道曙光

        因為天色昏暗,也沒有使用閃光燈,而且使用的是手機照相,因此整張圖顯得昏昏暗暗且模糊,下面是這張圖的Histogram。











經過均化(Histogram Equalization)處理之後


經過處理過後,其實可以發現很明顯的場景地點和山脈,當時人群是很擁擠的!





然而我發現一件很奇妙的事情,均化之後的Histogram累加圖,都是三角形形狀且呈現了階梯型的形狀!!






均化其實可以將昏暗的圖片把顏色對比明顯的呈現出來,然而我想了又想,有了個疑問!!!
假如均化可以將昏暗的圖片呈現明顯的顏色對比,那如果放上一張太過亮的圖片呢?會不會將顏色對比也顯現了出來?
於是我翻了翻自己的圖片庫找到了一張大一時期,和同學騎車上山賞景的一張拍得太亮的照片



可以明顯看到三種色彩值在255(最亮)的地方飆高!






均化過後,很奇怪的事發生了,結果不如自己猜測....








看到這個照片變成這樣,其實思考了一段時間,是不是背景"白"的部分太多,導致百分比會像這樣子差距這麼大,感覺色差完全失控。


看了一下累加的部分,依然是階梯狀,但在顏色Level.254的地方,累積的部分才41~42%左右,可見有58%的部分全部都是"白色"。

或許是這張圖太過於慘白,所以沒辦法顯現出原本的色彩,也或許是相機不夠好沒辦法將背景的顏色細微差別拍
程式打到最後,其實會越想越多,想加入的功能越寫越多,不過還是能細分成幾個方法,加入新的功能只要呼叫幾個需要的方法就可以完成。自己也有請教參考過其他人的程式碼,很多地方其實可以是縮減的,除了精簡更要效率,現在訓練自己除了邊打程式,還要邊想怎麼做個整理,才不會到最後維護不易。

剛寫出來這樣的程式碼,當程式編譯過且圖片跑出來的時候,不禁開始思考,原來網路上許多圖片編輯軟體,原來就只是這樣而已,再加上許多功能上去而已


接著就又有想要寫寫看轉換成灰階的程式,當作是自己的練習與磨練。等到有空閒的時間就會試著寫寫看。
<<我的程式是完全自己手動打的,完全無抄襲,我堅信自己手動寫過操作過才能真正了解其中含意,以下附上自己做的程式,我知道許多功能尚未出來,但沒有可以詢問的對象,只能慢慢從網路上尋求資源,若有BUG敬請見諒>>