2008年12月25日 星期四
期末回顧
w11 - A3 B8 C1 → 76
w13 - A5 B3 C3 → 74
w15 - A11 B2 C1 → 95
期末平均成績:82
學期成績:(期中)85*0.4+(期末)82*0.4+(自評)7+(老師)? = 73.8 + ?
自評:
自評的部份,我給自己打7分。
對於期中之前的我有好好在學習影像處理,
雖是規規矩矩的執行課本上教導的指令,
不過此時的我並沒有瞭解到上這門課讀這本書不僅僅是輸入指令測試結果而已,
在此時就態度而言我認為自己還算認真。
而我不得不坦承,自己在期中過後顯得過於怠惰,
雖然作業都有在寫,
且已掌握到唸這本書的方法與原則,
卻未能比之前更為好好的加以探究。
根據以上幾點我給自己評為7分,
給予了期中以前自己的努力以及期中過後掌握到要領的自己一個肯定,
並對後期怠惰的自己扣除了部份的分數。
期末回顧:
這個...,總覺得我有點點點把回顧跟自評都混在一塊了囧"
講講上課方式好了。
上課是輕鬆的,
老師以輕鬆的方式帶領我們上這門課,
還會不時的提供各式各樣的new informations,
並傳導自學>老師傳授知識。
還有作業的上傳方式,(抱歉我總是老話重提)
這種分享給大家自己從課本中摘取到的成果並提問,
不僅自己可以學到東西,
課本上未能理解的,
也可以經由其他同學的學習成果得到幫助。
提問的部份也有老師或同學會幫忙解答,
給了提問的同學答案,
也讓回答的同學對自己習得的知識更為有印象(應該是這麼說沒錯..)。
總之對於這部份我蠻喜歡的。
實為感謝老師這學期以來的教導,讓我學到不一樣的東西!
2008年12月18日 星期四
Chapter6
interpolation就是作內插法嘍!
舉例:一線段可以以多種方式表示,差別就是單位的不同,也就是比例了。
nearest-neighbor interpolation是在把附近的點的值取用來填補因比例大小不同而造成區間的空白。
而linear interpolation是把兩點區間用線性的概念去計算兩點間空白應填上什麼值。
6.2 Image Interpolation
這小節是在對影象做內插法,使影像擴充,那在這部份提及到的內插法,他是使用了bilinear interpolation,雙線性內插法。老實說我沒看懂雙線性內插法,不過看了西里斯同學的說明以後瞭解了。(感謝萬分)
雙線性內插法是對圖片做了三次的線性運算,(舉例方式是從西里斯同學那參考並借來說明的! 再次感謝!)
6.3 General Interpolation
Cubic Interpolation跟線性內插法是一樣的原理,但線性是用於二維,而Cubic Interpolation是用在三維。
Bicubic interpolation的功用主要是將鋸齒狀的效果改善,雖然最後呈現的效果是模糊的。我看了p.128的圖,認為它跟bilinear interpolation很像,but是做了更多線性的計算。
(這一小節也沒能很完全理解之,所以使用了圖片觀察法判斷了一下)
6.4 Enlargement by Spatial Filtering
知道要補0擴大影像,但後面有點不解。
6.5 Scaling Smaller
又稱image minimization,就是將影像縮小。
縮小影像有一種方法,即把兩個點中間的pixel移除,叫 image subsampling。
移除的pixel範圍是看你想要縮多小。
比如說現在要將圖片縮為1/4,也就是(1/2)*(1/2),透過image subsampling的動作,會把圖片(橫向軸,縱向軸)==>pixel(i,j)中的i與j除以2,若有餘數則把該點去除掉。
但如果處理的對象是high-frequency的影像,處理出來的結果可能就不太好了。
6.6 Rotation
應用到了三角函式矩陣來旋轉圖片。
把圖片視為很多個點,再將欲旋轉的角度套用進三角函式矩陣,計算出新的每個點的位置,形成一張新的圖片,也就是旋轉過後的圖。
6.7 Anamorphosis
這小節提到了Anamorphosis,譯為失真圖像,也就是歪像。
在16、17世紀時候的畫家很流行使用這種技術。
在看到這一節的時候,我想起了之前在網路上看到的一幅畫,我覺得跟這節應該也算是有所關係。
以下這幅畫是很多年前一位畫家畫的,一直以來都沒有人知道他想傳達的究竟是什麼。

直到有一位賞畫者的出現看了一看這幅畫,之後就只放下了一條金屬柱在畫上便離開了....
在放上一個有鏡面的管子後,鏡面上就反映出了一個穿西裝的人。
2008年12月4日 星期四
Chapter5 Neighborhood Processing
這章是把上一章講述到的Neighborhood Processing再做更深入的講解。
Neighborhood Processing即藉由鄰近的pixel彼此產生一個function,而以下提及的部份就是Neighborhood Processing的應用。
- filter:對要處理的pixel取其周圍的點(包含該pixel)形成一個mask,針對該pixel與形成的mask做處理,產生一個新的點取代原本的pixel。
- linear filter:filter結果產生的新值,如果都是屬於mask裡擁有的值,那麼就把其稱為linear filter。
可以使用矩陣方式來表示filter。
5.2.1 Edges of the Image
filter有一個問題,那就是如果在圖像邊緣做mask,範圍就會跑到圖像外面,而這個小節就是在告訴我們怎樣避免這樣的問題。
方法一:忽略邊緣的地方不做。
方法二:把超出圖像範圍的mask值全部代入0以解決問題。
5.3 Filtering in MATLAB
這節顧名思義就是用MATLAB玩出filter啦!
- filter2(filter, image, shape)
filter處填入你想要成為令為filter的矩陣,至於在MATLAB矩陣製成方式為
- a=ones(x,y)/z
a為任意參數,ones為矩陣名稱,(x,y)為設定的矩陣大小,將(x,y)每個點除以z即形成filter矩陣。
而image即是你想做filter處理的圖像。
shape可代入三種數值:
- 'same':連同邊緣作filter處理,用的即是5.2.1的方法二。
- 'valid':只處理內部(指不含邊緣)的,即5.2.1的方法一,而處理過後的圖片會比原本的圖片小。
- 'full':這部份我就看不是很懂了....
5.3.1 Separable Filters
說明filter也可拆解(如果可拆的話)做處理。
舉例:
- [filterA]=[filterB][filterC],而對imageA做filterA處理等同於對imageA做filterB後再做filterC。
5.4 Frequencies: Low- and High-Pass Filters
5.5 Gaussian Filters
5.6 Edge Sharpening
5.6.2 High-Boost Filtering
5.7 Nonlinear Filters
5.8 Region of Interest Processing
只對一整張圖片的某部份做filter的處理,簡稱ROIs,而其過程稱為ROI processing。
5.8.1 Region of Interest Processing in MATLAB
在MATLAB裡做ROI處理的指令為
- roipoly(image, [欲作處理的區域範圍的列], [欲作處理的區域範圍的行]);
舉一例如圖
↑左下方寫錯,應為(25,75)
如果想在中間(25,25),(75,25),(25,75),(75,75)做ROI,則程式碼寫法為:
roipoly(image, [25 25 75 75], [25 75 25 75]);
5.8.2 Region of Interest Filtering
沒寫完真是對不住,不過這章真的有點多又有些難度orz....
2008年11月27日 星期四
期中回顧
w04: 5 7 1 => 79
w06: 4 5 0 => 85
w07: 11 2 1 => 95
w08: 6 6 2 => 79
=================
平均========> 85
**************************************
其實我到最近幾週才驚覺我一開始對於這一科的唸法不太對,
課本標題說的是 《Introduction to Digital Imageprocessing with MATLAB》 ,
MATLAB只是讓我們當作認識影像處理的工具,
但我卻幾乎以MATLAB程式指令為主在唸這本書,
而沒有在輸入指令後更深入一層去思考他的原理。
在其他方面,
就像之前在CH1 to CH3回顧說的,
對於老師這樣的教學方式我很喜歡,
以及間接地,我原文閱讀的速度真的有提高(至少這課本啦XD)。
以上大致就是我的期中回顧心得。
2008年11月14日 星期五
Chapter4
4.1
影像處理最基本的就是點的處理,主要分成三種:
- Transforms:將像素值改變,但是與原本的形式相同。轉換的方式:先將圖片轉換格式(嗎),然後對轉換過的圖片作處理,再轉回原來圖片的格式(嗎)。它可以作一些運算。
- Neighborhood processing:對被給予的pixel改變其灰階層的值,而我們只需要知道其附近的pixel灰階層的值就可以對該pixel作改變。
- Point operations:與Neighborhood不同,不用去瞭解周圍的pixel,直接對pixel作改變。
4.2
在講解的即是如何利用operations對灰階層作運算,改變其值。p.69底下使用陣列為double的格式大致說明了影像的補集:double分部範圍為0.0~1.0,圖像補集即是用double最大值1.0去減每個pixel。
4.3
- 4.3.1
histogram:將每個灰階值所出現的次數做統計。使用語法:imhist(x)
imadjust(a,b,c,d):將a的灰階值分布拉寬,c是整體分布範圍的變化,對其作的是將全部的灰階值擠到給定[x,y]區間,d是對分布區間寬度作變化,把灰階值拉寬的樣子。b的部份我就理解不能了。
後面4.4的部分依舊不太瞭解...
2008年10月31日 星期五
Chapter1 to Chapter3 Review
比起最初,能理解的部份變多了。
而且有些不懂的地方,老師會在課堂上講解,
如Colormap老師說明過了幾次,
使讓大家能夠理解。
回頭看看前幾次的作業,
我看到了我自己記錄有問題的地方,
再針對這幾個有疑問的地方,去翻課本,
或者是看看同學們是怎麼樣寫的。
發現老師讓我們使用BLOG來寫作業的好處,
就是可以不時回顧自己有哪些問題,
此外,
看著同學們寫的心得,
也可以讓我自己略有所獲,
可以看到我沒注意到的部份或無法自行理解的地方。
最後我還是希望可以知道p.24的pages究竟是?
還有我最無法理解的3.6希望老師稍微帶讀一些部份,
萬分感謝orz
2008年10月23日 星期四
Chapter3
imread這功能已經知道是讀檔的功能了,接著是這章節新講到的一個新指令,image。
image,是matlab一個最基本最簡單最陽春的圖片顯示指令,使用起來感覺不是很方便,如果單用image這指令,結果會如右圖(原圖使用灰階),雖然有軸線,但圖片不僅變形,還變成奇怪的顏色囧"。如果想要正常顯示,必需搭配其他指令。
首先先用size(unique(d)),d為我儲存圖片的變數,查出圖片的灰階共多少層(→我是指level),如果我們想要用imread完整的顯示原圖,就需要使用colormap這指令,並且知道原圖的level共多少,另外還要搭配truesize(顧名思義就是實際大小啦)這個指令。而axis off這個我認為就是看個人啦,需要軸線就不必要打出來,要隱藏那就把它off掉吧!打出指令>> image(d),truesize,axis off,colormap(gray(255))後就像這樣↓
>> [x,map]=imread('Banner.png');
>> image(x),truesize,axis off,colormap(map)
由matlab來幫你記colormap。
3.3我就有點問題了,我不太懂double在做什麼,依我用我的灰階圖片經指令過後看來,會顯示出我原圖描黑線的部份地方。
而在imshow(cd/n),cd為double過的圖片參數,n為數字,如果比原圖level值大則原圖片加深,少則變淡。
有一個我覺得很特別的,>> dl=d>120;,d為我的灰階圖片變數,顯示圖片後會很明顯分為兩種顏色,顯示出圖片的主要輪廓,稱為Binary Images,而dl的class會為logical。
如果再>>dl=+dl,就會將logical改掉,不過我不懂
1.為什麼課本是變成uint8,而我的變成double了?
2.且我的圖再次顯示後,並沒有像FIGURE3.3(b)那般,跟原本顯示Binary Images時是一樣的(就我視覺上看起來)?
3.>> imshow(logical(dl))和>> imshow(double(dl)) 的結果都一樣沒變?
3.4 的部份我看不是很懂文章內容(果然上課不該發恍啊囧""),但有試作了一下:
>> cd=double(d);
>> d0=mod(cd,2);
>> d1=mod(floor(cd/2),2);
>> d2=mod(floor(cd/4),2);
>> d3=mod(floor(cd/8),2);
>> d4=mod(floor(cd/16),2);
>> d5=mod(floor(cd/32),2);
>> d6=mod(floor(cd/64),2);
>> d7=mod(floor(cd/128),2);
圖片從不明顯的輪廓漸漸變成清楚分明的輪廓,而d7的圖跟Binary Images的結果看起來是一樣的。
p.49底下也是看不懂 (炸)
3.5 第一個新指令,imresize(x,n),看名字就知道是更改圖片的大小嘍!x是圖片的變數,n是你要縮放的倍率,如果要讓長寬變一半,那麼在n的地方輸入1/2即可。由於縮小的時候是在一定範圍內(看你訂的縮小倍率)截取一點,做縮小的動作;而放大的時候是讓原本圖的陣列擴張,所以會導致糊邊。so如果你同時對一張圖片縮小1/2又放大了2倍並不會讓圖片變回原樣,反而會變的有點模糊喔!
不過為什麼課本p.51 & p.52圖片比較偏馬賽克化而我的圖是模糊化呢?
3.6 這部份我真的算是完全不瞭解了,因為我的matlab輸入imshow(grayslice(x,128),gray(128))等那個表格裡的指令,看起來是完全相同的,而單看grayslice(x,4)這指令出來的圖,從灰階變成鮮豔到很可怕的圖囧"
到最後,我一直在想是不是我的灰階圖有問題呢??? 一堆看起來跟課本上不同的結果。
2008年10月17日 星期五
Week 4 HW - Chapter 2 心得
imread('檔名.副檔名') 是讀取圖片檔用的指令,通常會使用變數去儲存這個動作,好方便使用其他指令,不需要打那麼長一串~
imshow('檔名.副檔名') or imshow(w) [→w=>變數 ],這個指令就是show出你的圖片啦~!Matlab一開始會預設一個figure1讓你顯示圖片在figure1裡,在這個時候想show出其他圖片,那就會顯示在figure1裡,之前顯示的圖就不見嘍,假如想要多開圖片的話,那就必須在讀取圖片前多使用figure這個指令,功能就是在多開一個可顯示影像的figure。

有個搭配figure的指令,pixval on,把它開啟的話就是在figure時, 它會根據你的指標指到哪,就顯示 座標 = 灰階值或RGB值。(如右圖左下方)
size(w) ,起初看了課本,雖然能曉得是在給我w的長與寬以及"pages"(pages不太懂是什麼?),不過一直不知道Matlab為什麼沒有給我半個值,我還以為我的Matlab在耍任性囧"。參考了一下同學們的心得,原來是要搭配ans指令才會顯示給我看。
由於不太懂pages的意思,p.24最下面兩行指令的部份我不是很能理解。如:
- >>a(100,200,2) 以及 >>a(100,200,2:3) 的差別?
至於w(100,200,:) 的話我猜想應該是將RGB的值分別列出。
impixel(w,200,100),若w是張RGB的圖,就列出這張圖在高200寬100處的RGB值;若其為一張灰階圖片,那麼顯示的RGB三個值就會一樣,因為R=G=B就是白<=>黑的RGB值囉,灰色和黑白色是一家親,當然也是R=G=B啦!
P.25的2.3部份有點不是能理解他在說明的究竟是什麼。
如果你想知道你圖片的資訊,輸入imfinfo('檔名.副檔名')準沒錯,他所列出的資訊非常的詳細(雖然有的我實在是不太曉得是啥就是了..)
2.4的部份講述的就是資料型態以及資料型態之間、圖片之間的轉換方式。
2.5主要就是在說明各種影像圖片格式的特色囉!而 p.31的dumphex部份就不太瞭解在做什麼了,還請老師講解嘍!
以上就是我在第二章所學到的東西。
2008年10月3日 星期五
Week 4 HW - Chapter One 心得
老實說,對於各Figure底下的段落,我並沒有很仔細地去看,
幾乎都是先根據他給的兩張圖片的差別,以及圖片下方的說明字串,
來判斷段落想描述的是什麼。
Figure1.1到Figure1.3都是將略帶模糊的圖片轉換成更清晰的圖,
以方便供我們"人"去辨識,即是第一頁介紹到的影像處理的目的第一項。
Figure1.4到Figure1.5則是將影像模糊化了,
這是為了讓電腦容易判別圖片亮度深淺的分布,
也就是影像處理的目的二,使機器更易於判別。
而後面一點的部份主要是說明一張圖片的儲存方式及格式,
例如是以陣列方式儲存圖片上每一個點的數值等。
我想這些大概就是我對第一章所理解到的。
對於原文書依然是很不上手,由於第一章可以藉由圖片去瞭解,
再加上老師導讀過,所以才沒那麼大的困難,
之後的章節大概須要自己確實的花時間好好研究一番了吧。