顯示具有 01360912 陳奕穎 標籤的文章。 顯示所有文章
顯示具有 01360912 陳奕穎 標籤的文章。 顯示所有文章

2016年1月7日 星期四

資工四甲 01360912 陳奕穎 期末回顧

是因為已經大四快要離開學校的關係嗎? 總感覺時間過得越來越快,從學期初,在趕專研總審,需要參考他人寫的 APP,剛好第一次作業也是要介紹 APP 因此能一起完成,沒有發生蠟燭兩頭燒的情況,到現在已經是在做期末課程回顧了,明明那些記憶在腦海中還是如此的清晰,就好像發生在昨天那般,但事實是今天已經是我修這門課的最後一次上課了。


我從第一個單元學會了影像的位元深度就是影像的像素格式,位元深度 0 就代表黑白,因為 2^0 = 1 所以影像只能用 0 或 1 來顯示,位元深度 8 就是灰階,2^8 = 256 影像會用 256 種不同程度的亮度來顯示影像,位元深度 24 就是最常見到的彩圖,RGB 各別用 8 個位元來顯示,所以圖片能顯示 256 * 256 * 256 這麼多種的顏色,然後我在第一次作業中學會如何用已學會的知識去分析別人 APP 的功能是怎麼做出來的,讓我以後如果只需要別人 APP 的某個功能時,可以自己寫一個,不用下載整個 APP。

第二個單元讓我切身體會到機率統計課程的重要,因為機率統計沒學好,所以上課老師在說甚麼都只聽得懂一半,聽得懂的那半是怎麼統計 RGB 的數量,聽不懂得那半是怎麼使用統計出來的數據來對影像做均化,上課一知半解,想當然爾,回家做作業當然碰壁碰了很久,好在有這個 blog 能夠去觀摩同學們對均化的見解,並且有好心同學提供的程式碼可以參考,因此我最後才能參悟均化、順利完成第二個作業,均化簡單說,就是要將本來太過集中的色彩,平均分散到 0 ~ 255,例如一張過曝的照片,色彩值可能都集中在 230 ~ 255,我們依照原本數量的比例來讓色彩重新分散到 0 ~ 255,這樣均化就完成了 !    在做這作業時,我還遇到一個令我很棘手的問題──要用甚麼比例才能將這種色彩值過於集中的圖的統計直方圖合適的顯示出來,那時候我是經由胡亂的實驗,然後找到一個我比較滿意的結果當作解決方案,但是在後來的某天上資料探勘時,剛好有簡單的利用到變異數來解決極值的問題,我突然想到,這不是就是我要解決直方圖顯示的最佳方法嗎 !    我只要利用變異數來把數量過於偏激的去掉,這樣我就能算出要顯示統計直方圖的正確比例了,至於那些數量過多的色彩值,就把他們的比例都設為 1 就好了。


我在第三個單元學會了怎麼寫出 Photoshop 的色階與曲線的功能,在教授教完這單元時曾說過這兩個功能能合在一起運作的,那時一開始的想法是怎麼可能!!    我光是要將功能各別做出來就有問題了,這東西怎麼可能還能合併,回家做作業在參考 Photoshop 這項功能時,才知道教授說的是真的,教授是為了讓我們能夠更容易學會這兩項功能的基本原理,所以就把這兩個功能拆成兩小節,作業也只要各別完成就好,但是既然真的可以做到,而且看起似乎並未超出我能力範圍,因此很有挑戰的價值,所以我就把他給合併了 !    我用到了高中學的克拉瑪公式,這時我才有一種,原來以前學的數學真的是都有用處的,老師他們沒有騙我們,可是為什麼他們當初都沒有用這樣的例子給我們看,這樣我一定會更努力學習的XD    不過還好我數學除了機率統計沒學好,其他還算可以就是了。


第四個單元是在教空間濾波器,在這單元知道了影像處理還有分空間域的影像處理、頻率域的影像處理,空間域就是直接對空間域上的像素色彩值進行處理,而頻率域則會先轉換成頻率域上的係數後才進行處理,處理完再轉換回來,最常見的轉換方式是傅立葉轉換,大概是因為頻率域太困難了吧,所以這個單元都是在講空間域的影像處理,畢竟我連甚麼是傅立葉都不太清楚....,雖然在學工程數學時好像有聽過。    這個單元教我們怎麼做出平滑、中值、銳化濾波器,讓我們清楚明白他們的運作原理,還有適用在甚麼情況,平滑是把遮罩內的像素點拿來做平均,目的是為了讓影像模糊、減少雜訊,適用在人類想要美化自己的照片,例 : 將臉上的痘痘變得比較不明顯,中值濾波器是將遮罩內的像素拿來排序後,再取中間的那一個,也有模糊影像的效果,不過最厲害的是能夠去除影像中的脈衝雜訊,適用在想把影像中很明顯的白點或黑點給去除,銳化的功能則跟平滑相反,然後我直到今天才知道,原來功能相反,在數學上也就代表著反運算,然後我又再一次見識到數學的強大了 !    在做作業時,我曾經嘗試想要用一個 n 來自由調整遮罩的大小,但是基於我的數學並不是這麼好,所以完全不知道怎麼推導出銳化濾波器遮罩所需要的係數,只完成可以自由調整平滑跟中值濾波器的遮罩大小,雖然可以調整中值濾波器的遮罩大小,但是如果遮罩太大,我的程式還會因為排序排太久,要等待很久才會出現結果,總之就是還不完全就是了。

第五個單元,最後一個單元,在教色彩的模型,我睡過頭,結果少聽了一堂課,雖然後面看投影片知道這單元的作業要怎麼做,但是少了那堂課,我明顯的感覺到我對色彩模型不是非常的了解,比之前一知半解還慘,一知半解還可以回家慢慢想,或是上網查資料,但是現在完全無思緒可以想,更別說是上網查資料了,這件事著實令我懊惱許久,但也只能謹記這個教訓,不貳過了,在作業方面,這次基本上沒有遇到太大的問題,除了做 YUV 模型時,我想就是我漏聽的那堂課所教的,所以我完全搞不懂 YUV 模型的範圍到底是甚麼,最後我是用 0 ~ 255 做出來的,但是完全不明所以啊 !


這門課除了給了我們許多有關影像處理的基本,還讓我們獲得豐沛有關影像處理最新或已經存在很久但我從來不知道的影像項處理技術的資訊,像是機器人的人臉辨識系統、只要修改影片的其中一張影像就能套用整部影片、汽車的自動導航......等,不勝枚舉,而且加入這門課的 Facebook 粉絲頁讓我理解到社群媒體只要用在好的方面,你也能從中得到許多收穫,結論就是不論是這門課所授的知識亦或其所提供之資訊,我皆深得其惠 !

2016年1月2日 星期六

資工四甲 01360912 陳奕穎 HW5

這次的作業要做出三個 RGB 色彩模型和一個 YUV 色彩模型,並且要能利用這幾個色彩模型來幫一張只有灰階的影像上色,實作我們是用一張彩圖只取其中的 Y ,然後再加上使用者選擇的 U 跟 V 來產生一張新的圖,這是之前就有的作業,這次教授加了一個新的作業──對彩圖取 U 跟 V ,加上使用者調整的 Y 來產生一張新的圖,實作如下圖。

一開始未選擇顏色

從 R = 0 的 GB 平面選左下角的顏色

從 R = 255 的 GB 平面選左下角的顏色

從 G = 0 的 RB 平面選左下角的顏色

從 G = 255 的 RB 平面選左下角的顏色

從 B = 0 的 RG 平面選左下角的顏色

從 B = 255 的 RG 平面選左下角的顏色

從 Y = 0 的 UV 平面選左下角的顏色

從 Y = 255 的 UV 平面選左下角的顏色

新的功課──保留彩圖 U 跟 V 讓使用者選擇 Y


取彩圖 U 跟 V,Y = 0 的結果

取彩圖 U 跟 V,Y = 180 的結果

實驗──保留彩圖 U 跟 V 讓 Y = 使用者選擇 Y + 彩圖原來的 Y


因為如果 Y 完全都由使用者設定就會出現像上面兩張圖一樣奇怪的畫面,因此我後來又做了一項實驗

如果使用者控制 Y = 0 ,Y 就會是原來彩圖的 Y

如果使用者有調整 Y,那 Y = 彩圖的 Y + 使用者的 Y

產生下面這樣的效果
使用者控制 Y = 0

使用者控制 Y = 130

討論 :

在這次得作業中碰到的問題有兩個,第一個是在用教授提供的灰階的範例程式碼,因為有些宣告沒有被宣告在範例程式碼內,沒有被宣告的分別是下面這三個

LOGPALETTE  GrayPalette
PALETTEENTRY PaletteEntry
HPALETTE GrayPaletteHandle

再來就是不論在講義或是我去維基百科上面看到 YUV 的範圍各別是

Y是 [0,1]
U是[-0.436, 0.436]
V是[-0.615, 0.615]

但是我無論怎麼想就是想不到這個範圍怎麼來的,而且套入計算也產生不出所要的 YUV 模型圖,最後我 YUV 的範圍是用 [0, 255] 這個範圍才產出跟講義一樣的模型圖

心得 :

    這次的作業不難,在撰寫程式碼都算是很簡單就寫出來,但是有一些原理的東西我就完全不知道為什麼這樣做就可以出現對的結果,像是 YUV 的範圍,在維基百科裡雖然寫了很多看起來像是在解釋的東西,但是我完全看不懂......,然後還有因為對 XE2 還是不是很熟悉,所以每次在找需要的功能都還是找很久,像是 Trackbar 要怎麼設定它的間隔,就讓我花了很多時間,我看了蠻多之前有修課的人的 blog,想看他們是怎麼設定的,結果發現他們都沒有設定......,所以只能靠自己了,最後找到 Frequency 這個屬性可以設定間隔,而 PageSize 這個屬性可以設定按一下 Tracebar 要移動多少,最後附上這次作業的程式碼
標頭檔

2016/1/7 Edit

因為有同學在參考我的 Blog 後,對我提出疑問,我才發現到我沒有解釋我的程式的功能,所以我就來補上了。

 我這個程式的功能是在利用色彩模型為一張灰階影像上色,我建立的色彩模型總共有四個,依序是

GB 平面 R 可以調 (上面左邊數來第一個)

RB 平面 G 可以調 (上面左邊數來第二個)

RG 平面 B 可以調 (上面左邊數來第三個)

UV 平面 Y 可以調 (下面左邊數來第三個) 

只要使用滑鼠在色彩模型你想要的色彩上點一下,灰階影像 (下面左邊數來第二個) 就會變成你選擇的顏色了,這時你如果去調整你選擇的色彩模型下面的 bar,上色了的影像會因為你選擇的顏色改變了而一起改變,然後最近因為有學 GitHub ,所以就把以前寫過的程式都丟上去了,以下就是我這個作業 GitHub 的連結,阿同學有興趣想載下來的話,只要把檔名為 Project1 以及 Unit1 的載下來放在一起應該就能執行了

2015年12月12日 星期六

資工四甲 01360912 陳奕穎 HW4

作業四要我們做三個濾波器,分別是平滑、中值、銳化,用處各不相同,平滑是為了移除影像中的一些小細節,中值是為了去除雜訊,銳化和平滑正好相反,銳化是用來凸顯細節,實作如下圖。

平滑(Normal)

我有 Mask 用 7 x 7 所以看起來模糊很多

平滑(Weight)

雖然有模糊,可是很不明顯

中值

先將圖片灑上胡椒鹽

去除 6% 的胡椒鹽,效果顯拔

銳化(Normal)

沒有考慮角落的銳化

有考慮角落,效果非常顯著



心得    

    作業四依舊花了我不少時間才完成,我花了好多時間在處理邊界值,在邊界的地方用九宮格會超出去,然後只取九宮格有的地方,權重要重算,而且我又不是很想用很多 if else 來做判斷,所以著實令我傷透了腦筋,大概有兩天多的時間都在想這個要怎麼解,最後才想出一個我比較滿意的方法。
   
    這關過了以後,就很順利的把三個濾波器都寫出來了,可是我的銳化濾波器一直會有奇怪的顏色,檢查了很久,公式都沒有錯,完全找不出哪裡有錯,所以我就想,肯定是我在哪裡老師有說但我又有漏掉沒聽到。
   
    於是我就去 blogger 裡面翻找之前有修這門課的人寫的程式碼出來參考,順便看看他們是怎麼解決邊界值問題的,不看沒事,一看晴天霹靂阿 !    原來只要忽略掉邊界值就好......,反正一張圖有沒有去改邊界值,人眼是看不出來的,這問題害我白白花了好多時間,結果只要這麼簡單就解決了,不過有看到跟我一樣在跟邊界值奮鬥的勇者,而且它還是用 if else ,我內心就比較沒那麼難受了,因為至少我知道了我不是孤獨的 !
   
    然後果不其然,我確實漏聽了,我的銳化濾波器少了判斷新的値是否大於 255 或者是小於 0 ,如果大於 255 就要等於 255 ,如果小於 0 就要等於 0 ,加上這個判斷式後,我的程式就很完美的呈現出我想要的結果了。

程式碼在這裡 :
標頭檔
程式碼

2015年11月21日 星期六

資工四甲 01360912 陳奕穎 HW03

因為我有兩位教授不與學校一起考期中考,而是另外選時間考,所以我直到這星期二 (11/17/2015) 期中考才算結束,然後我從星期三開始做這個作業,加上寫這個部落格,花了我大概三天半的時間。

在期中考前,我還沒著手做這作業,我有看 PPT,以為我已經懂了 ,可是沒有實際動手推導過一次公式,結果我就在本科的期中考上得到了一次慘痛的教訓──被扣了十幾分有關這個作業的題目,期中考結束後,我著手做這個作業,當然就有動筆推導過一次公式,才發現原來我對這個章節的公式推導完全理解錯誤! 
我一直以為 Input、Output 的公式是一樣的,以為我們只是在把它們做結合,整合成一個比較方便的公式,但他們完全是相反的公式在做結合與推導。

在實作方面,有一個問題讓我非常困擾,那就是如果你用 autosize 雖然可以顯示出完整的照片,但是照片會很大一張,然後 Form 就要拉很大一個,一開始我的解決方案是用小畫家照原圖比例去縮放成比較小的照片,不過這太愚蠢了,後來我發現將 XE2 裡 TImage 元件的 Stretch 這個屬性打勾 (如下圖),這樣就能顯示完整圖,又能調整圖片的大小。

Stretch在這裡



然後,我莫名其妙的在畫 Level 的圖時卡關很久,我不知道我一開始在想甚麼,明明就只要像學弟說的分三段畫就好了 (這次又是參考學弟的想法了......),我一開始卻想用跟畫 Curve 一樣,一點一點的畫,這樣就算了,我的腦袋那時候就好像是鬼打牆,一直想不出怎麼一點一點的畫,我在猜可能是因為這次我要製作的 Level 、Curve 圖的寬跟高都要重新計算比例,我的內心很厭惡這個動作,所以自動中止思考,不管如何,我竟然花了大概兩天左右的時間在想這個明明理解公式後就會是很簡單的東西,真是太不應該了,成果如下圖。

未調整

調整後

再來是 Curve ,Curve 這部分在弄懂了 Level 後,就會覺得都是一樣的東西,不過就是套用的公式不同,不過我也花了一天的時間在這上面,原因是為了將 Curve 與 Level 整合在一起,我本來也是想分開用,但是教授說可以整合在一起而且我看到 PhotoShop 上面真的是合在一起的,還弄得超酷的,所以我也想試試看,其中比較麻煩的點大概就是,該如何知道曲線 
y = ax^2 + bx + c 
 a、b、c 的係數為何吧! 我後來是用高中的克拉瑪公式來求得這三個係數的,怎麼使用? 簡單說就是將 (iInputMin , iOutPutMin) 、 (iInputMax , iOutPutMax)、 (點按的 X , 點按的 Y) 當作參數帶入 y 函式就會得到三元一次聯立方程式,就能用克拉瑪公式了! 
求出係數後,就跟一般 Curve 是同樣的做法了,還有一點值得注意,那就是帶入的使用者點按的 Y 值,要記得他是從左上角開始算的,所以要先用 Y = imCurve->Height - Y ,再把 Y 帶入,不然就會發生跟我一樣,一直以為是克拉瑪公式算錯,可是怎麼檢查就是沒錯,後來才發現是在這個小地方錯了,結果如下圖。

這是一般 Curve

這是 Level 未加 Curve

這是 Level 加 Curve
結論 :
          PhotoShop 不愧貴為修圖神器,我只不過是做它其中微乎其微一項功能,就令我如此頭疼,而且說實話,雖然我是將 Level 與 Curve 整合在一起了,但是還是有許多 bug 尚待修正,舉例來說,如果你先調 Level 再調 Curve 那它不會有任何的問題,顯示的就像我預想的一樣,不過你要是調過了 Curve 再調 Level 就會顯示不正確的圖,還有 iInputMin > iInputMax 時,會顯示成很奇怪的圖,看來我的學習之路還很漫長。

修正 :
         剛剛在寫部落格寫到結論時,我突然想到我的 bug 是出在哪裡,出在因為我的 Curve 會用到使用者點按的 X、Y 的値,而因為要計算 y = ax^2 + bx +c 要把 Y = imCurve->Height - Y ,只調 Curve 或先調 Level 再調 Curve 不會發生問題是因為每次都會有新的 X、Y 值,但是反過來就會出現大問題了,X 還沒關係,Y 則每次調 Level 就會進行一次 
Y = imCurve->Height - Y
當然就有會問題囉! 
而 iInputMin > iInputMax 時會出現奇怪的圖依舊無解,PhotoShop 的解決方法是不讓使用者能輸入
iInputMin > iInputMax 的値。

2015年11月5日 星期四

資工四甲 01360912 陳奕穎 HW02

作業二

統計一張圖裡 R 在( 0 ~ 255 )各有多少個、G 在( 0 ~ 255 )各有多少個、B 在( 0 ~ 255 )各有多少個再將 R、G、B 統計出來的值畫成 3 張統計值方圖

例:
統計這張圖

畫出來的直方圖以及累積直方圖


再來要對圖片作均化

均化後的統計直方圖與累積直方圖

心得:
        這個作業,讓我體會到了我機率統計沒學好所帶來的後遺症,前面統計跟累積的計算,我在二個禮拜前就完成了,但是均化這部分讓我卡了好久,因為我壓根子不曉得甚麼是累積密度函數,後面是問了學弟以後才知道要怎麼做,但是卻還是不懂為什麼這樣運算後就能讓圖片均化,再來第二個困擾我很久的就是─如何讓統計直方圖、累積直方圖適當的顯示,我一開始都是隨便弄,後面看到學弟的作業後,才知道原來要用要拿來顯示直方圖元件的高以及統計出來的最大值來計算比例,這樣才能稍微顯示出比較適當的圖,但是這種方式在對我找來的這種比較極值的圖,也還是會顯示出很奇怪的圖,就上面的圖那樣,害我一開始還以為是我做錯了,後面找了別張圖來實驗,顯示就很正常,結果如下圖

第二張測試的圖


第二張的直方圖與累積直方圖就顯示很正常

一樣拿來作均化

均化後的直方圖以及累積直方圖


2015.11.18 新增

我回家後又思考了很久,到底要怎樣調比例才能將有非常極端値的色彩統計直方圖用比較正常的圖像顯示,嘗試了很多次終於試出了現在這樣比較滿意的結果如下圖,基本上跟原來的方式一樣,不過不是取最大值,而是取第二大值來做比例的調整,不過我不知道這是不是正確的做法就是了!

用這張圖作範例


原本做出來的色彩統計直方圖


修改過後的
再來讓我想很久的就是均化的原理,我終於明白教授上課時以及下課回答我的疑問時所說的是甚麼意思了,就只是把原來圖的色彩值範圍按照比例平均分化到 0 ~ 255 這個範圍,
舉例來說,原圖的 R 可能原本只有在 200 ~ 255 之間才有,但是我們把它照比例 
( 累積統計 [ i ] / 累積統計 [ 255 ] ) 分化到 0 ~ 255 範圍 ( 乘上 255 ),作用就是會把本來色彩值都集中在 255 附近,過曝的圖,讓它因為色彩重新平均分化到 0 ~ 255 而變得曝光沒有那麼嚴重,若是太暗則會變成沒有那麼暗,一般很清晰的圖就沒甚麼太大差異了

2015年10月11日 星期日

資工四甲 01360912 陳奕穎 HW01

我要介紹的Mypic是一款在App Store上就可以免費取得的App,他其實是一個相簿遊覽器,他裡面有許多的功能,當然也有有關我們這門課所學的對於影像做處理的一些功能,下圖就是Mypic在App Store上架的畫面


下載安裝完成後,將它打開,你會發現就像下圖一樣,裡面空空的,一張照片也沒有,你會覺得奇怪,我手機裡面照片明明有很多啊 !  怎麼會一張也沒有,不用擔心,你的照片並沒有不見,但是為什麼會看不見呢 ?  這是因為iPhone採取了一種叫做沙盒的保護機制,什麼是沙盒,簡單的說就是資料夾,大家都知道在電腦上安裝好程式會有一個資料夾存那個程式,就跟電腦一樣沙盒就是在手機上的一個存放你App的資料夾,而且這個資料夾只有你的App可以存取避免其他App會對你的資料進行更改,阿你手機上有的照片是存在Apple內建的名叫“照片”的相簿遊覽器的沙盒內,所以Mypic的沙盒內當然不會有照片,所以你要先進行匯入照片的動作

空空的Mypic

接下來示範的是一連串匯入照片的動作:

匯入前要先新增相簿

 進入相簿後一樣空空的

這時候有兩種選擇,一種是用匯入的
一種就是按下面那個相機圖案就可以
進行新照片的拍攝

有了照片就可以開始今天的主題了—照片的影像處裡

首先先來導覽一下他有哪些功能吧!

加強:以Apple做的幾種套餐進行色彩值變更
方向:改變影像的Orientation
裁切:將影像做切割
Color : 可以細微的進行色彩值變更


Lighting : 對色彩值進行變更
銳利化:不太確定這是怎麼做的
繪圖:讓使用者畫的圖與影像疊合
文字:讓使用者輸入的文字跟影像做疊合


紅眼:我看不太出來有改變什麼....
美白:固定的改變色彩值,但是用者可以用觸碰決定要改變的位置
淡斑:將使用者觸碰的一個小圈內的色彩值進行演算法運算後做改變
模糊:固定的改變色彩值,但是用者可以用觸碰決定要改變的位置


對焦:使用者選擇的範圍外的色彩值進行模糊的演算法運算後做色彩值變更
飛濺效果:一開照片被做灰階處理,要由使用者用筆刷選擇要將哪裡恢復成原來的色彩值
疊加層:將照片用圖型例如圓形圍起來的範圍外的的色彩值變成全黑或全白
Vignette : 以橢圓的中心點向外進行色彩值漸層處理

這些功能裡面最有感觸的就是疊加層了,因為這個大概是我目前可以自己撰寫程式碼達成的影像處理吧!  只要運用前幾個禮拜學的程式碼,然後加入一些範圍判定,把一些範圍外的色彩值變成全黑,我想應該就行了。

希望修完門課我能學會怎麼用程式碼來對影像進行銳利化、加文字之類的,不然我都只能用別人做的App,雖然自己做的或許效能不比別人做得好,但是能自己做感覺就是好,而且以後說不定需要用到特別的影像處理技術,我有那些基礎,就能拼湊出那個特別的影像處理技術,畢竟我想再複雜的影像處理一定也脫離不出是由那些基礎的變形與組合吧!

疊加層的其中一個效果