顯示具有 95361045 賴政宏 標籤的文章。 顯示所有文章
顯示具有 95361045 賴政宏 標籤的文章。 顯示所有文章

2008年12月19日 星期五

Week 16

首先是成績計算的部分:

期中的成績在這一篇文章
http://hwshow-ipc.blogspot.com/2008/11/blog-post_21.html
期中平均成績:97

期末成績:

     A B C
Week11: 10 0  1 => 100

Week13: 12 1  0 => 100

Week15: 12 2  1 => 95

期末平均成績: 98

現在才發現從期中考之後到學期末,只有3次作業而已......

---------------------------------------------------------------------

再來是自己評分的部分:

我想給自己9

我覺得每次的作業,我真的都花了不少的時間在做。
我每次上課也都有去,不過有時候會晚一點到教室,大約9點15~30分左右。
上課的時候,我覺得我也有在聽老師上課。
所以我給自己9分,我覺得我沒有達到10分的境界,應該還是有進步的空間。

---------------------------------------------------------------------

期末回顧:

  不知不覺的這學期就突然接近尾聲了,感覺好像上星期才開學的不是嗎......?

  這堂課跟其它課上起來的感覺真的很不一樣,因為這是在所有的科目裡面,我唯一會在上課前先預習的一科。其它科目的課,都是老師在上課時先教,然後我回去再複習。而這堂課則是剛剛好相反,都是我先回去預習之後,老師上課的時候再來教比較關鍵和比較難的部分。

  我發現當我有先看過課本的內容後,在老師上課講解時,就能比較容易理解上課的內容,而且還可以發現自己原先在看原文書時,有誤解的一些地方。這種感覺和老師先在學校教完之後,再回去預習是完全不一樣的。

  這門課還有另一個重點,就是老師一直提到的原文書閱讀。就這樣自己慢慢的看原文書,過了一個學期之後,雖然沒有誇張到能力大增,但是至少真的能發覺,自己在原文的閱讀能力上是有增加的。

  舉例來說,像在上其它門課時,很多老師用的都是原文的投影片。之前真的是連投影片上的英文都不想看,只是把圖片看看後,勉強了解課本的內容而已。而現在就比較能有耐心慢慢的去看,在能看懂投影片上的英文之後,就能更清楚的了解那門課所上的內容了,不會像之前一樣感覺很抽像。

  不過由於是原文書+我們要先自己看,所以上課的進度就會比較慢。還好老師也不會趕進度什麼的,就順著大家的速度慢慢教。比起教的"量"來說,"質"可能才是更重要的,我真的能深深的體會到這個道理,因為那種跟不上進度時,老師卻繼續往下教的經驗我是有的,最後整個成績當然就不是很好看。

  我得承認自己不是那種天才型的學生,沒辦法在上課時,就把老師所教的內容通通都消化、理解,所以通常回家還要花一些時間自己去看書。只要有一次沒有跟上進度的話,後面整個都完蛋了,尤其是數學類型的科目。

  最後希望老師能在我們四年級的時候,開這一屆四年級有開的"數位內容趨勢"這門課。不知道為什麼,看到名字就想去選...... 在經過老師大概的介紹之後,又更想去選了。

祝大家聖誕節和新年都快樂呀~

2008年12月17日 星期三

Chapter 6

  Chapter 6的標題出現了一個挺有趣的字—Geometry。這個字在Yahoo奇摩字典的幫助下,我知道意思了。Geometry:幾何學。Image Geometry(影像幾何學)是什麼呢?一剛開始看到這個字讓我覺得很抽象,沒有辦法具體的想像出這到底是在做什麼樣的影像處理。

  不過再看完標題下面的一些介紹之後,就可以大概知道這一章要教的是什麼東西了。介紹這邊有提到,我們常常會需要改變一張影像的形狀、大小甚至是旋轉,來做很多的用途,感覺上要做這些影像處很不簡單呢!在一開始介紹的部分,出現了一個查完字典也看不懂的名詞(專有名詞?)—affine transformations

我查到的意思:
affine:【數】仿射的。
transformations:變化;轉變;變形;變質。
查完還是......不懂。

  6.1我看起來的感覺像在教數學...... 這小節的標題Interpolation:添寫;插補,我猜應該就是之前老師有說過的內插法了。看過這邊之後的心得就是,看文字和算式真的很難懂,不過看了那個圖之後,大概就可以懂個7、8成了。課本有用nearest-neighbor interpolation(中文不知道......但是意思大概知道)和linear interpolation(線性的內插法??不知道怎麼翻譯......)兩種方式來做內插找出中間值。

  我覺得nearest-neighbor interpolation這種方法比較簡單,而且也超容易了解的。不過它的效果真的是讓人不敢恭維(真的是太爛了啦!),我有先偷看後面p.125頁那個圖,(a)就是用這種方法來做圖片放大的,而(b)則是用bilinear interpolation的方式將圖片放大,就我個人是比較喜歡(b)圖的效果。

  6.2的部分是在說明將內插法應用在影像處理上的方法,這邊有多一個叫做bilinear interpolation(雙線性的內插法),我不是很清楚知道它跟linear interpolation到底差在哪裡,難道是因為bilinear interpolation是用在二維平面上有x和y,所以叫做雙線性嗎??至於6.2後面就是有用範例實作2種方法的差異,好像是把4x4的圖放大到8x8,就是我剛剛上面提到的那2張圖啦。

  6.3說明的內插法我就看的不是很懂了,這個General interpolation的說明,看起來很像以前不知道哪一門數學課有教過類似的東西。但是可以確定的是,它處理出來的圖好像又比bilinear interpolation的圖還要好一些。在p.132頁那邊有4種圖的比較,我是覺得Bicubic那個看起來效果比較好呢。

  6.4這部分跟Chapter 5有些關係,是用Filter來做內插法的影像處理,而且又有介紹另一個類似內插法的東西,zero-interleaved(其實我也不確定這是不是內插法......)。不過說真的,這邊感覺很困難,感覺做了很多的矩陣運算。我看不懂zero-interleaved這個它做的到底是什麼,最後的那4張圖,就經過它處理的變最奇怪。

  6.5....好像只有一面而已,原來把圖片變小也有一個英文的專有名詞—image minimization,外國人還真喜歡創造專有名詞啊~ 還有另外一個粗體字,subsampling,這個字我直接打在Yahoo的字典上找不到,後來我把sub和sampling分開查。Sampling:抽樣的意思。那合起來是叫做"子 抽樣"嗎??還真難翻譯...... 啊後面那個畫圈圈的我就看不是很懂,是把(a)圖縮小之後,那些點就會連在一起,變成(b)那樣嗎?

   終於說到6.6了,又快沒時間了。這一小節也挺有趣的,它是在介紹圖片的旋轉,我覺得這個最難,它出現三角函數了啦!! 不過在Matlab裡面好像有一個函數,它可以直接做到圖片旋轉的功能,就是imrotate(image,angle,'method')。直接輸入要旋轉的圖片、角度和要使用的內插法,它就可以直接幫我們把圖片旋轉了耶~ 我沒想到圖片做旋轉也會用到內插法,內插法的用途還真是廣呢! 在這節最後的2張圖,我依然覺得Bicubic interpolation的內插法看起來比較舒服=ˇ=
 
  最後6.7則是把圖片拉長,就是長寬比例會變的不同。這邊介紹還蠻短的,讓我比較注意到的是它範例的圖片。因為好奇為啥會有那顆骷髏頭,我還特別去找了一下那幅畫......
http://www.wga.hu/frames-e.html?/html/h/holbein/hans_y/1535a/index.html
居然再那麼久以前(西元1533年),就已經有人在做人工的影像處理了!!


  那個骷髏頭這幅畫是真的有的喔!原來這也是那時候得一種藝術,它們會在畫前面放一種工具,然後就可以看出那顆骷髏頭了(奇摩知識+ 好像是這個意思)。

2008年12月4日 星期四

Chapter 5

  第五章的內容是在第四章裡有提到過的Neighborhood Processing,再繼續更深入的說明。一開始我都習慣先把一個章節從頭到尾大概翻過一次,我覺得這一章好像特別長,而且有蠻多經過影像處理後的圖片,看起來Neighborhood Processing的應用範圍應該是很廣的。

  5.1主要是在介紹Neighborhood Processing的基本處理方式,以下是我看完這一節的感覺。我覺得它跟Point operations(單一點處理:需要原本影像一個點的資料,處理後對應到新影像的一個點)相同的地方在於,原本影像的點處理後,都會對應到新影像上面的一個點。不同的地方就是Neighborhood Processing需要用到原本影像的點旁邊很多鄰近點來做計算,但是Point operations只需要一個點就可以計算了。這邊只要看P.89頁的圖5.2,應該就可以比較容易了解我上面到底在說什麼了。

  在這一節裡面有幾個名詞,Mask指的是一個原本影像要處理的點加上它鄰近點形成的矩形(或是其他形狀)。將一個Mask與function做運算後得到的矩陣就叫做Filter。不過那個linear filter我就不是很了解了,線性指的是什麼意思呢?
--------------------------------------------------
  在第13週的時候,老師已經說明linear的意思了,還把他以前做的投影片拿出來看。大家都看到了一個很熟悉的公式,原來在以前的線性代數就已經有教過了,但是卻沒有幾個人真的去了解這個公式所代表的意義。看來我的學習方式有需要改變一下了,像我從小學到現在學過了很多的東西,但是當真正要用到的時候,我卻不知道要用到以前學過的東西來解決問題。

  5.2是在說明可以用矩陣(Matrix)的方式來做Neighborhood Processing的數學運算,矩陣......都已經忘的差不多了XD。

  5.2.1是在說明當要處理影像最旁邊的點時,會遇到最邊邊的點並沒有全部的鄰近點這個問題(因為都在最邊邊了,旁邊當然就沒有東西啦)。課本上有提到用2種方式來解決,一個是Ignore the edges(忽略邊邊),另一個是Pad with zeros(把沒有鄰近點的位置放0進去)。這兩種方法的說明,可能是我自己英文能力的問題,我看得一知半解的不是很確定,希望老師上課的時候能大概的解釋一下
--------------------------------------------------
  這個部分老師也有提到過,他還在黑板畫出大概的示意圖,看了黑板的圖之後我大概就能了解這2種方式的差別了。加上老師也有一個步驟、一個步驟慢慢的舉例說明,聽完之後就比較能知道課本上在說什麼東西了。

  5.3這一小節主要是在介紹用Matlab來實作Neighborhood Processing的影像處理方式。這邊有用到一個函數,filter2(filter,image,shape),shape這邊課本有用到3種,samevalidfull。我看了很久才大概知道它到底是在算什麼,filter應該是給程式每一個點要做影像處理的方式,課本上這邊給的a是說,目標的點要和它周圍的8個點相加再取平均。image則是放入要做影像處理的圖片,課本上的x是在5.1時就已經定義好的矩陣,在課本上p.90頁那邊。shape則是設定這個函數處運算完後要輸出的矩陣大小(還是形狀?)
--------------------------------------------------
  這個問題老師只有大概帶過去一下而已,不過我猜測應該只是設定輸出矩陣的大小吧!因為形狀應該都是矩形的,好像不會有圓形、三角形或是其它奇奇怪怪的形狀等等。
  
  不過在它的範例中,我看的不是很懂它做的是什麼樣的影像處理。看起來好像是在說明不同大小的Mask,做出來的影像處理效果不同。這邊好像也是將鄰近點做平均來輸出,然後影像顏色就會變得比較接近,看起來就變得模模糊糊的。不過程式碼那部分就不是很懂了,好像有出現一個fspecial('average')的函數,還有5.3.1那邊根本就像是在做矩陣的教學,那一小節我就先沒有去看了......

  5.4我覺得這邊開始越來越難了,出現frequencies(頻率)這個字,感覺上難度就增加了。在這邊課本用到fspecial()這個函數做了不同的處理,5.3的時候是用average(平均),這邊用了laplacian和log兩種運算的方式。雖然詳細的部分看不懂,不過看它輸出的圖就大概可以知道,用這個方法可以找出圖片上線條的部分(輪廓),外型就可以很清楚的分辨出來。希望老師能說明一下fspecial()這個函數和這一小節的影像處理方式

--------------------------------------------------
  以上是上個星期的進度,接下來由於篇幅的關係(盡量不要太多,已經快1500字了= =),我就不一一打出課本上的內容了。


  5.5這邊的高斯濾波器(Gaussian Filters)感覺很難,因為這邊的程式碼有用到fspecial()這個函數,但是我還不是很懂這個函數到底是在做什麼用的,而且我也忘記高斯的運算方式了,所以就不是很懂這一寫小節,是用什麼樣的方式來做運算的。我有看到最後那個用高斯濾波器處理後的圖片,感覺跟5.3那邊的結果很像,影像都會變成模模糊糊的樣子。只好等下星期老師來解釋囉......

  5.6這一小節是在用Filter來做影像銳利化的處理,在p.106頁那邊的圖,老師有預告說下星期會講解,我自己看了一下,感覺不是不會很懂,而是非常的不懂。因為那個圖根本就沒有橫軸和縱軸的單位和說明,我完全看不懂它想表示的意思是什麼呢。也只好期待下星期老師的說明說哩 !

  5.7標題就和前面很不一樣,這邊用到的方法是非線性濾波處理。在這邊又用到了另一個函數nlfilter(),我不知道為什麼這邊用了一個最大和最小的函數,然後用filter會將影像處理成p.111那2張圖的樣子......

  5.8這一小節我覺得比較有趣,它教我們用Matlab來做區域性的影像處理。之前教過的影像處理都是一整張圖的,但是在這邊看到它的範例圖片時,就會覺得很特別,它可以只針對一張圖片上的一小個區域來做影像處理,期它的部分還是維持原本的樣子。

  我發現我看原文課本的時候,常常會誤會書上的一些意思,還有漏掉一些蠻重要的東西。像是第13週的時候,老師講解很久的convolution我就沒有注意到,好像我自己會不知不覺的去忽略掉一些很難的東西。看來在英文閱讀能力方面還需要大大的加強了,在閱讀原文書時的集中力降低速度真的是比中文書還要快很多呢......

2008年11月21日 星期五

期中回顧&平時成績

首先是平常成績的部分:

    A  B  C
Week4: 8   4  0 => 91分

Week6: 13  1  1 => 98分

Week7: 15  0  0 => 100分

Week8: 14  2  0 => 98分

平均是96.75

期中回顧:

這一個選修課可以算是在大學中所有課裡面最特別的課吧!
老師並不像其他的老師那樣,有一定的進度、照著課本上課等等。
感覺起來老師要教我們的是自己主動學習的態度,而不是只為了考試才去讀書。

老師之前就有問過我們到底是為了什麼而讀大學的?
好像就是要我們自己去想,我們的目標到底是什麼?
還特別把大學的學費算給我們看,連我們如果翹一堂課,損失的是多少錢都算出來了。

還有老師說這堂選修課最主要的目標,就是讓我們有真正閱讀過原文課本的經驗。其實我的情況就跟老師說得差不多,在一、二年級的時候雖然也有一些課是用原文的課本,但是我都沒有真正的去讀它,頂多只是圖片和關鍵字看一下而已。考試只要有看例題或是上課聽老師講解,其實原文課本就算沒什麼看,那科也能考及格。

但是在上這堂課的時候,就不能用之前的方法那樣去"看"原文課本了。因為老師要我們真的慢慢去看,一章一章的讀,然後再將心得和遇到的問題寫在部落格上。剛開始真正讀原文課本時,還真的是很累,光是一面就可以看很久,尤其是很多單字都是專有名詞,查字典之後還是不知道它的意思。就是因為這樣,到現在已經過了半個學期了,我們的進度也只有讀到第四章而已。

不過因為沒有進度的壓力(其實還是有一點,因為每週的要交作業在部落格上),所以原文課本看起來就會比較輕鬆一些,在不知不覺中,慢慢的已經看得越來越順了。大概知道要配合著一些圖片來讀文章,還有要實際的去操作程式,這樣就可以更容易了解課本上再說明的東西。

另外老師常常在上課時提到許多關於資訊業目前的趨勢,像是提到最新的業界新聞、或是讓我們看數位時代雜誌等等。身為一名就讀資訊工程系的大學生,不能只是像國中、高中那樣,只是把學校的課本應付一下,然後去考試。應該要開始多關心一些現在資訊產業發展趨勢,最新的動態等等。如果我們未來決定要走資訊業這一條路的話,勢必會接觸到這一些資訊的變革。

老師在11週的時候,也花了很多的時間再說明互評系統的一些問題,像是有人亂投票、給人情票或是評分人數不平均等等。但是我沒想到的是,最後老師在問要用哪一種評分方式的時候,大家在投票時居然選擇用老師導出來的新公式來算成績,也就是所謂合乎"課程正義"的算法。雖然說成績算出來並不會差很多,而且能夠解決投票人數不平均的問題,但是就是因為這個關係讓我少了2個100分......(上面我的成績中,有2個用原本的算法會是100的,現在卻變成了97= =)

最後,希望老師在之後上課時,能多講解一些同學在部落格提出來的問題。我發現自己看過一遍之後,再聽老師講解一次,這樣就比較容易理解課本上要表達的東西了。

突然想到,這週上課時早上的出席率很差,老師有問說要怎麼樣才能提高。我覺得最主要是因為老師平常都沒有點名,所以很多人就覺得有沒有去上課都沒什麼差。我認為點名還是有一定的影響力,如果改成隨機一次上課點名,然後沒到的同學要扣總成績X分(辛華昀老師之前好像就是這樣威脅我們的......),這樣應該多少會提升一點出席率吧= =

2008年11月7日 星期五

Chapter 4

  非常緊急的在第10週時,把第4章的心得給打了出來,沒想到老師居然說延後一個星期再交,所以在這邊我需要把開頭的部分再修改一下。感覺上課文的內容真的是越來越難了。在第一次大概的略讀過後,可以看到這章裡面有很多的圖表、長條圖和數學算式等等。可想而知,在這一章節裡又有許多要用到數學運算來做影像處理的方法了。

  4.1其實就已經看不太懂了......我看起來課文像是在說,影像處理時可能會分成3種類別,要先將複雜的不知道什麼東西轉換成簡單的,然後再進行影像處理。那個4.1的流程圖我覺得大概看的懂一些,就是要先將影像轉換過後,再做影像處理。處理完之後的影像,再轉換為原來的影像格式。
----------------------------------------------------------------------------------
  老師好像還沒有提到Transforms的部分,希望在第11週時也能大概的說明一下。

  然後有2個粗體字Neighborhood processingPoint operations,這2個我只能看懂表面的意思,但是不確定那是不是書本上實際想表達的意思。Neighborhood processing好像是說需要一個小範圍的像素值來做影像處理,Point operations則是只要處理一個點(像素)就好了,不用管它附近其它點的值。不知道課本真正想解釋的是不是這個?或者是英文的問題讓我又誤解了......
----------------------------------------------------------------------------------
  這個問題再第10週上課時,老師有大概的講解過了,沒想到居然跟我猜到的意思差不多。主要就是差在影像處理一個點時,需不需要其他鄰近點的資料。

  接下來4.2的圖表,那個New values和Old values的圖表看不懂。一個是加上128,另一個減128,加上128會使得原本灰階值大於126的點全部都變成白色(因為127就大於126,127+128=255),而減128則是讓元素灰階值小於129的點全部變成黑色,但是圖表的那條線到底想表達什麼東西,還是完全看不懂。
----------------------------------------------------------------------------------
  這個問題再經過老師的說明之後,我終於知道這個圖要怎麼看了,原來是要將初始值對應到處理過後的值,由這個圖就可以大概的看出影像是在做什麼樣的處理了。

  後面的b3~b5那些圖,大概知道書本想做什麼實驗給我們看。一個是將所有的灰階值除以2,所以整個圖片會變暗,另一個是全部乘上2,所以圖片會變亮,第3個比較特別,先除以2之後再加上128。這種做法使得顏色之間的差距縮小,處理後的圖片看起來對比會變得比較不明顯(也就是顏色都差不多的意思)。

  我自己隨便代了2個數字來實驗,假設有2個點, 1個灰階值是200,另一個是100,這樣他們顏色差距還有200-100=100。然後同時除以2就會變成100和50,在加上128,這時候就變成228和178,2個點的顏色差距變成了228-178=50。 當2個顏色值的差距縮小了之後,在圖片上看起來顏色就會比較接近,也就是對比變弱了。

  4.2最後的那個圖則是互補色(complement),互補色就是用255減去目前的的灰階值,算出來得到的值就是目前顏色的互補色了。在灰階圖片中,用互補色輸出的圖片,就是原本顏色較深的部分會變得較淺,而原本較淺的地方則會變得較深。在這個地方,因為剛好我有選修2年級的數位媒體概論,而那節課有練習用BCB做RGB(彩色影像)的互補色,所以在課本的這一部分就比較能了解。

  再來是4.3的Histograms(長條圖), 我記得這邊老師在剛開學的時候,好像有提到一些這章節的一些內容。那個時候好像是在說明MATLAB的指令,有一個指令是在畫長條圖的,老師剛好就用灰階影像的顏色值來當作例子。

  當長條圖顯示顏色都很靠近時(課本上圖4.8的長條圖,灰階值大部分都在70~150之間),那圖片看起來顏色就會都很接近,細微的地方感覺會不太清楚。在4.3.1的地方在說明Histogram stretch,在4.3.2則是在說Histogram equalization。這2個我查完字典還是想不出來到底要怎麼翻譯,Histogram stretch是長條圖延伸、展開、拉直??Histogram equalization則是長條圖平等化、均等化??

  我只依稀的記得,老師在剛開學的時候有提到,如過因為所有顏色太接近,而造成影像看起來不太清楚的時候,只要將長條圖的顏色讓他平均一點的分配,從0~255都有用到一些的話,圖片的一些細微輪廓部分就會可以看得出來了,也就是會變得比較清晰一些。

  最後的4.4看不太懂,因為課本上也沒有什麼範例圖片,只有一些圖表和數學算式。加上期中考的關係,所以那部份我就還沒有去讀了。最後希望老師也能像講解第3章一樣,來說明一下第4章的一些內容,有些東西上課聽老師說果然比自己一直看書還要容易了解。
----------------------------------------------------------------------------------
  老師在第10週時一上課就說,其實最後這部分是最簡單的。它只是用了一個方法,讓影像處理時執行的速度加快。就是先將較麻煩的運算先算過,然後把輸入的資料和運算過後的資料儲存在一個表格裡面。接下來當影像處理的時候,只要查表就可以得到輸出的值,不需要在每個點都運算一次。

2008年10月27日 星期一

Chapter 1-3

  之前打的文章幾乎都是類似閱讀筆記之類的,內容大部分是將課本的內容看懂後,再用Matlab實際操作實驗,最後附上一些截圖再發文這樣子。對於問題的部分可能就比較草草的帶過,像是直接說XXX的部分看不太懂這樣,但是卻忘了要把問題弄懂才是最重要的部分

  這次既然是要寫第一到第三章還有不懂的地方,那我就老實的說好了。其實在1.1的Images and Pictures我到現在還是沒有分得很清楚,這兩個的英文單字翻譯成中文字的意思感覺上幾乎都一樣。但是不知道在影像處理的領域裡,這兩個單字是不是有不同的意義?是經過影像處理的Pictures就叫做Images嗎?

  還有1.3的Image Acquisition and Sampling那邊課文部分也看不是很懂,整體上的感覺,好像是在說明用數位相機之類的視訊設備,將我們眼睛所看到的畫面存起來,也就是將影像轉換成數位的形態存放在硬體中。我有點2008w4的標籤去看一些其他同學的心得,發現有不少人特別去查資料,像是CCD、CMOS等等的名詞。這些好像是一些視訊設備的感光元件,用來將眼睛看到的那些畫面(也就是可見光)儲存起來。不過總感覺還是一知半解的,還是覺得老師在上課的時候說明會比較容易了解,我一直覺得那些會感光的元件是很神奇的東西......

  第一章的大部分都只是簡單的介紹而已,還沒有比較困難的地方,大部分都是英文看不懂...... 再來就是第二章了,第二章主要是在說明用Matlab來進行影像處理的一些基本指令,所以課文前面的地方都是在說明一些指令,就算課文的內容(英文=.=)看不懂,在Matlab上打上去,看看結果也就大概懂個七、八成了。

  但是我卻在前面漏掉了一些地方,第四週上課的時候,有同學問我一個問題。在課文前面的範例程式碼,可以將滑鼠移到顯示影像上面,然後左下方會顯示座標與RGB的數值。但是他發現RGB的數值卻是0.XXX,我們之前學到的都是0~255才對,所以我們都覺得很奇怪,但是我卻沒有發現到這個問題。

  接下來,這個問題我在第七週的時候終於搞懂了。因為第三章的地方有出現類似問題的探討,原來是圖片儲存的型態不一樣。用uint8格式儲存的話,顏色就是從0~255。但是用double格式來儲存時,Matlab就改成用0~1來判斷顏色的深淺了,這個方法可以有更多的顏色變化。這個問題就是我在第二章前半部沒有注意到的,下次可要再注意一點了......

  剛剛說的都只是前半部而已,第二章真正有問題的地方是在後半部,因為後半部比較偏向說明,而不是只有程式碼而已。一直到2.4左右都還能了解課本上想表達的東西,但是因為2.5的課文真的是很冗長,那個時候就還沒有全部看完。

  2.5提到的是影像的格式,課本上提到了10種影像格式,每個格式它都有說明。但是我真正有碰過的格式也只有JPEG、BMP和GIF而已,TIFF還是用了Matlab的時候才有碰到而已,其他的根本就沒有聽過...... 不知道其他的格式特性是什麼?在哪些地方有可能會用到?還是說影像的格式上百種,有很多根本就不重要,只要了解其中幾個比較常用到的就好了......?為什麼書上會選擇用TIFF的檔案格式來做影像處理的範例?還是說大部分的影像處理都是使用TIFF檔呢?課本上解釋它特性的那一部分也看得不是很懂......

  第二章就是後面比較有一點問題而已,第三章我覺得是老師講解最多的部分。先是第六週的時候,解釋了ambient lighting(漫射光)Bit Planes這兩個東西。然後第七週的時候又有說明colormapBINARY IMAGES和為什麼數值大小相同,儲存的資料型態不同,imshow 這個指令的輸出就會不同的原因。

  因為老師已經有講解第三章很多的內容了,所以基本上前面的內容都比較沒有問題了。不過3.6的Quantization and Dithering這一小節,我覺得蠻難懂的。一開始是減少灰色深淺的數量,從課本上的圖片還得出來。但是到最後只有2種顏色的時候,並不是黑色和白色,而是深灰色和淺灰色,這邊我就不知道為什麼會這樣了。還有後面的Dithering,可以說是完全看不懂它在做什麼......

  1~3章比較大的問題大概就是這些了,總覺得看到一些比較有難度的影像處理方法時,課文就比較難懂。在說明的部分,我覺得很多原文書都喜歡把東西說得很複雜,明明就是一個很簡單的東西,但是當作者用很長的篇幅去描述時,整個感覺就變得很難了,害我都只能從課本上的圖片差異來自己推斷......

2008年10月20日 星期一

Cgapter 3

  這次課本第三章,老師在上課的時候有先講解前面的一點內容,還有解釋比較難看懂的Bit Planes部分,所以自己看課本的時候就比較容易了解它在說什麼了。不過3.3和後面3.5之後的,上課還沒有時間講到,那邊有些比較偏向一點數學的解釋,就看得不是很懂了。

  3.1的部分只是大概的在介紹這一章的重點而已,這章主要是在談影像輸出(Image display),第二章的時候就已經有說到一些了,這章會有比較詳細的介紹。

  3.2的標題是影像輸出的基礎(Basics of Image Display)。將圖像顯示在電腦螢幕上面時,會有很多的因素影響輸出的影像,課本上寫了4個:(1) 漫射光(Ambient lighting),這個如果不是老師在上課時有講到,我可能就直接翻譯成"環境的光"了。(2) 螢幕的類型和設定(The monitor type and settings),螢幕類型指的好像是LCD(液晶螢幕)和是CRT(傳統螢幕)的差異。關於這2個差異我有找一下奇摩知識+,連結請點我。(3) 顯示卡(The graphics card),顯示卡的工作主要就是要將畫面顯示在螢幕上,所以螢幕上顯示的圖像跟顯示卡也是有不少關係吧。(4)螢幕解析度(Monitor resolution),我不確定這個翻譯對不對......解析度越高的螢幕,顯示的畫面應該會越清楚吧。

  課本上教我們使用一個在Matlab裡最基本的影像輸出函數-image(),但是因為這個是很基本的函數,所以它的功能並不會很強,如果直接使用這個函數輸出圖片的話,很有可能會有錯誤,課本上就舉了一個灰階圖片的例子。錯誤的示範老師在上課的時候就已經試過了,所以我就想試試看這個程式的功能到底弱到哪裡,我把Windows的內建JPG圖片讀進來,還好顯示的時候畫面是正常的,其實它也沒有我們想像的那麼沒用。測試圖片如下:






  課本上說如果要避免灰階圖片那樣的錯誤,就要再加入一些設定的指令。(1) truesize,這個指令讓圖片顯示正確的長寬比例。(2) axis off,這個指令讓顯示圖片時,旁邊的長度和寬度表不顯示。(3) colormap(),要修正灰階圖片顯示錯誤最重要的指令。查詢colormap()函數裡輸入的值,要用size(unique(c))這個指令來查詢正確的值,c是存圖片的二維陣列。下面這個圖片是加入這些指令後image(c),truesize,axis off,colormap(gray(247)),最後顯示的正確畫面:



  接下來,課文的後面再實驗如果改變colormap()函數裡輸入的值會產生怎麼樣的結果。我就照著課本改,輸入colormap(gray(512)),輸出的圖片就偏暗了。相反的,改成輸入colormap(gray(128)),圖片就變亮了。

  3.3的標題是imshow函數。當照著課本的第一個範例輸入程式碼時,跑出2個圖片,第一個看起來是正常的,但是第2張卻是白色的,就是課本p.44頁上面的2個圖。好像是因為檔案的格式被轉成double,才會造成這個結果。後面再將轉成double的那個變數除以255,顯示圖片又會正常了。除以512顏色會偏暗,除以128顏色會偏亮。

  這邊的課文說明看不太懂,英文本身就是我的罩門,數學也是我的罩門,所以當英文+數學的時候就變成了罩門中的罩門。我不知道為什麼轉成double型態的時後,它的圖片顯示會有改變。我從Matlab的Workspace點進去看2個變數,裡面的值完全都一樣,只差在一個是uint8另一個是double而已。雖然在Matlab裡面試過了課本的這些範例程式,也大概知道輸出的圖片會有什麼樣的不同,但就是想不通這個函數的輸出方式,為什麼會有這樣的差別?

  3.4則是老師在上課時有特別說明的Bit Planes。它的方法就是取出影像中每個點在2進位的第n個位元,只有單純的0或1,然後用來顯示一張只有黑色和白色圖片。如果取的是較高的位元,那麼輸出的影像跟原本正常的影像會比較類似。但是當取的位元未來越低時,影像就會越來越模糊,最後就變得跟電視收不到訊號所顯示的畫面一樣了。

  如果這邊我自己讀的話,大概又跟3.3一樣看不太懂吧,好家在老師在上課時有說過。因為顏色深的點,那個位置的值就會比較大,在2進位裡高位元有"1"的機率比較高,所以取高位元的值作為0和1(白色和黑色)的判斷條件,和原本圖片就會比較像。反之,如果取較低位元的話,因為就算是深色的點,2進位裡低位元有"1"的機率和淺色的點應該是差不多的,所以黑色點和白色點就會很平均的散布在整個畫面裡。

像電視機收不到訊號一樣的圖= =


  3.5則是在說明圖片的解析度(Spatial Resolution),剛看到課本上的圖,覺得還真是像在打馬賽克一樣呢!解析度就是我們一般說的幾成幾,ex:1024x768。這邊用到imresize()這個函數來降低圖片的解析度,imresize(x,1/2)這個指令會讓圖片的解析度降低一半,圖片大小會變成原本的4分之1。它將原本應該有4個點的值,減少為一個點,這樣的話圖像的解析度就變少了,看起來會變得比較小張。當輸入的指令為imresize(imresize(x,1/2),2),它會將圖片的解析度減少,但是圖片的大小還是一樣大,看起來圖片就會變得模糊。課本上輸入的imresize(imresize(x,1/32),32),解析度只剩下8x8,所以p.52頁的圖3.7(d)就會只變成8x8的格子了。

  因為課本上很多範例幾乎都是灰階的圖片,所以我自己就拿Windows的彩色範例圖片來做實驗,看看能不能用一樣的方式降低解析度。下面的圖是我實作的結果,可以很明顯的看出來第2張圖片變的很不清楚,證明了這個指令也是可以用在彩色的圖片上



  3.6 Quantization and Dithering(量化處理和???),翻譯不知道= ="
這篇感覺也比較困難,我只看得懂前面一點點在做甚麼而已,後面把影像弄成一點一點的那個就不清楚是在幹嘛了。前面感覺只是改變灰階的顏色種類,從最白到最黑有很多種深淺變化,改到最後只剩下p.56頁上面圖的2種顏色。

  我覺得第3章明顯比前2的章節還要難很多,有比較多的數學運算、影像處理的方法(演算法?)等等。感覺就比之前還要痛苦,而且還是有蠻多都沒有懂的地方,希望下星期老師能對於第三章比較難的地方再做一些說明。

2008年10月3日 星期五

Chapter 2

影像處理課本的第2章,終於開始有使用到Matlab來做開啟影像的動作。這部分利用Matlab的操作,順便說明一些圖片的格式和特性,也有解釋一些簡單的Matlab函數。

首先2.1的地方,書上先一行一行的說明程式碼,並讀取一個灰階的影像來做範例。雖然看不懂的單字還是很多,但是因為程式碼的部分目前比較簡單,所以大致上看得懂它這一部分的意思。他用imread()函數將檔名為wombats.tif的圖片讀取進來,放在w變數裡面,然後再用imshow()函數將圖片輸出在新的Figure的視窗上。在imshow()前面加上figure。這邊比較特別的就是它還有一個設定,就是pixval on。多了這一個指令後,當滑鼠移到圖片上時,左下方會顯示滑鼠座標點的色彩值。因為這個影像是灰階影像,所以左下角顯示的值都是0~255。



這是一張我開起來的灰階影像,左下角的地方分別是座標和裡面的數值。
因為是灰階的,所以顯示的值應該只有0~255。


而2.2則是讀取一個彩色的影像,基本上用到的函數都是一樣的。不過這邊有用到size()這個函數,來顯示儲存這張圖片的矩陣大小,讓我們了解在Matlab中,一章圖片的資料是如何放在變數裡面的。還有用到一個很簡單的語法,輸出矩陣內( i , j , k)位置的值。範例是將圖片放在a變數裡面,所以用到 a(100,200,2)這個寫法,用來查看在這個位置內的值。這邊我發現它儲存的是3維矩陣,後來想到除了平面上用到2維的之外,因為還有R、G、B三種顏色,所以還要再用到第3維的空間來儲存R、G、B三種顏色的值。在這小節的最後面,書上有使用到impixel()這個函數。我實際用Matlab測試之後,發現只要打上2維的座標位置,這個函數會就自動回傳同樣座標中第3維中R、G、B的數值了。



這是一張我開起來的彩色影像,左下角的地方分別是座標和裡面的數值。
因為是彩色的,所以顯示的值應該有RGB三種顏色各0~255。


在2.3中,課本使用imfinfo()這個函數來查詢圖片的一些屬性值,像是檔案大小、圖片的存檔格式和長寬等等的資訊。然後利用這裡面顯示出來的資訊,說明彩色影像的儲存方式,有分利用color map來儲存的和直接儲存RGB 3個數值等等,這部分在第一章裡面也有介紹到。在書上程式的範例中,有出現三種ColorType(顏色型態),利用color map減少圖片檔案大小空間的indexed型態,還有真正儲存RGB數值的truecolor型態,最後一個則是灰階影像的grayscale型態。

下面是我實際找一個圖片,使用函數後回應的結果:

>> imfinfo('arch.tif')

ans =

Filename: 'arch.tif'
FileModDate: '12-Jul-2004 11:39:22'
FileSize: 292440
Format: 'tif'
FormatVersion: []
Width: 263
Height: 370
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubFileType: 0
BitsPerSample: [8 8 8]
Compression: 'Uncompressed'
PhotometricInterpretation: 'RGB'
StripOffsets: [37x1 double]
SamplesPerPixel: 3
RowsPerStrip: 10
StripByteCounts: [37x1 double]
XResolution: 75
YResolution: 75
ResolutionUnit: 'Inch'
Colormap: []
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: [255 255 255]
MinSampleValue: 0
Thresholding: 1
Software: 'IrfanView '

2.4的內容比較短一些,標題是Data types and Conversions(資料型態和轉換)。我覺得這個就類似C++中,在宣告變數的時候都會一起說明這個變數的型態,例如:Int、Double等等。課本中就有附上在Matlab裡所使用的Data types表格了,就是在28頁的最下面那邊。裡面有5種,分別是int8uint8int16uint16double,有在前面加上"u"的代表它只能表示正整數,不能存負數。而在29頁最上面的表格則是剛剛在2.3裡所介紹的ColorType,這邊是用來轉換ColorType的函數。其實這些函數並不難記,舉例來說,rgb2gray()這個函數的功能是將 RGB格式的圖檔轉換為grayscale(灰階影像)。這個函數的唸法就是"RGB To Gray",中間的2(Two),發音就是To,這樣就可以很簡單的記住這個函數了。

終於看到了2.5的部分,2.5是在說明影像檔案和存檔的格式,這小節幾乎快占掉第2章的一半。老師上課的時候就有說到,儲存影像的格式其實有上百種,而這邊提到的只是平常比較常見的格式而已。課本上有說明10種,分別是JPEGTIFFGIFBMPPNGHDFPCXXWDICOCUR。就我自己來說,平常最常碰到的大概也只有JPEG、BMP和GIF而已,其他有很多根本就沒聽過......

在這邊書上用到dumphex()這個函數,還有在31頁附上這個函數內的程式碼,我不確定這個函數是內建的還是這個作者自己寫的。書上利用這個函數抓出圖檔內部分的資料,再利用這些資料說明剛剛列出10種圖檔格式的特色、差異性等等。最後這一章說明的部分比較多,我沒能夠慢慢的把全部都看完。只好立用老師今天介紹的"泛讀",而我用的是泛讀中的泛讀來看完這一節的。

最後,我覺得第2章除了最後一小節比較難讀之外,前面有程式碼的部分,只要利用Matlab實際操作一下,大概就能知道那個部分要說明的是什麼東西。感覺起來我覺得有比第1章簡單一些,可能是因為敘述說明的部分,用Matlab課本上的程式,就能體會大概的內容了吧。

2008年10月2日 星期四

WEEK 4

這一堂課老師花了一些時間,帶我們看影像處理課本的第一章。經過了3個星期,終於開始進入影像處理的主要課程內容,感覺之前因為處理訂書、申請共同作者等等花了很多時間。

雖然這不是第一本的原文課本,不過說真的,之前課程只要是用原文課本的,我幾乎都沒什麼在看課本內的文字,就算有也只是看一下圖片和解釋圖片的文字而已。當然最主要的原因就是我本身的英文能力不強,不過那也就算了,連我覺得我自己記得的英文單字量可能都是全班數一數二低的,所以一堆單字通通都看不懂......

就是這些原因,如果我真的要一個字一個字看的話,可能花上一個星期在翻譯那些單字,也趕不上老師上課的進度...... 結果大學讀了2年,閱讀原文課本的能力好像也沒啥進步。不過之前大部分用原文課本的都是數學類課程,所以只要上課有聽老師講解,然後看得懂課本上的那些圖形和例題,基本上考試也不會有很大的問題。

但是這次影像處理的課本,好像有不少的地方都是在說明理論,或是介紹一些影像處理的方法。這樣的話不看課文內容的話,就會很難了解作者想要讓我們知道的東西,這次可能只能乖乖的把課文慢慢看完了......

老師上課的時候講解的速度其實蠻快的,而且也不是像英文課那樣一行一行的翻譯,只是大概的說明這部分課本是在說明的什麼東西。所以我回家自己看的時候,還是困難重重...... 從第一章的的第一個頁開始看,天啊~ 怎麼第三個單字就看不懂! 後面當然也不用多說,根據我的估計大約10個單字裡面有一半,甚至6、7個單字看不懂,不知道那是甚麼意思。

至於解決的辦法,當然是最簡單也是最常見的查英文字典了。從以前一本厚厚的字典,到後來常見的電子辭典,現在連網路都有字典可以用,所以我現在都改用網路字典查單字了。雖然字典的進步給我們帶來很大的方便,但是書本上的單字,卻還是得一個一個的用按鍵打進去才能查單字......

說真的,第一章我還沒看完。真的是太多看不懂的單字了,我光是看1.1好像就快花了一個小時,查單字之外還要看出整個句子的意思,第一次這樣慢慢看原文書真的是非常痛苦。第一章只是大概的作揖些影像處理介紹,像是把圖片變得比較銳利(sharpening)和把影像變清晰(deblurring)等等。

接下來是Matlab的部分,上次老師有讓我們去Matlab的官方網站去看看,線上有提供什麼我們用的資源。後來發現Matlab有中文官方網站,好像是代理商的,也有另外一個Matlab研發公司的英文網站。英文官方網站的東西好像比較多,只可惜很難看得懂.......

Matlab課本裡面影像處理的範例,很多感覺都會出現錯誤。像是有些函數只能用在灰階影像或是其他什麼限制的,可是書上又沒有特別說那個函數的限制,真的蠻麻煩的。

2008年9月18日 星期四

Matlab 初體驗

第一次接觸到Matlab的時候,覺得和我之前學過的程式語言最大的不同點,就是它是直譯式的語言。
它不像C++要把全部的程式碼打完之後,然後編譯才能執行。
Matlab只要打完一個指令,馬上就直接執行了。
像是打個a=1+2,按一下Enter馬上就出現a=3。

我剛開始還覺得這樣好像蠻厲害的,不過後來在書上看到直譯式語言的缺點。
那就是程式執行的速度,會比其它需要編譯的語言還要來的慢很多。
不過Matlab用呼叫C函數的方式來解決這個問題,可以在Matlab的程式中,
呼叫C函數來處理運算比較複雜的部份,這樣就可以有效的增加執行速度了。

在看Matlab這本書的目錄時,我有看到一篇的標題就是影像處理。 我還以為Matlab就是用來做影像處理的軟體,後來發現他不只是能用在影像處理上。 還可以畫數學函數,不管2維還是3維立體的函數圖它都能畫出來。 更厲害的是它還能夠用來處理一些微積分的問題,不過那部份好像也蠻不簡單的。 Matlab也可以像BCB那樣設計視窗介面的程式,我覺得這套軟體真的是太多功能了..........

我注意到的另一個地方,就是這程式語言他幾乎所有的運算都是用矩陣的型態來運算的。
就算是只打一個a=1,程式還是會把它當作是1x1的矩陣,我覺得這點蠻特別的。
我想到圖片的存檔方式又剛好是陣列的存檔方式,影像處理用Matlab好像很適合。

我覺得這個程式語言要用得好的話,就要很熟悉它有哪些函數可以用。
Matlab這本書裡面每一章節幾乎都是在說明函數的應用,有哪些用來畫圖的,有哪些是用來做矩陣處理的。
我發現在這本書的後面有附上很多的函數,還有說明那個函數的頁數。
這點還蠻方便的,當不太記得某個函數要怎麼使用的時候就可以從那邊來查了。