顯示具有 95361100 朱家祥 標籤的文章。 顯示所有文章
顯示具有 95361100 朱家祥 標籤的文章。 顯示所有文章

2008年12月25日 星期四

成績回顧

期中成績
平均:98

期末成績
week11:97.69
week13:100
week15:97.27
平均: 98

期中期末平均:98+98= 98

98*0.8 = 78

再加上自評 78 + 9 = 87 (不包含老師10%)

自評:9

有一次早上睡死了,沒來上到課。
真是罪過呀。



==========================

期末回顧

遙想公瑾當年,小喬初嫁了,雄姿英發………
離題了冏。

我是到大三以來第一次上老師所教授的課,
早在前一年就耳聞老師的上課style,這一次果然感受到了。

或許之前有修過黃世育老師的課,就有過類似的經驗了
就是自己先閱讀,然後有問題再問老師,
這有其成效,只是大或小的問題。

這門課老師似乎一直強調我們要有閱讀英文的能力,
而有些同學也說了因為這關係,讓自己閱讀書時越來越快,

老實說要我們一個禮拜看完一章是沒問題,一個禮拜看完六章也沒問題,
主要是自己有吸收到多少的問題而已。

有時候我就會想到我姨丈曾跟我說過
你要有"廣度"還是要有"深度"?

這問題我當時聽了 有點愣住,
我姨丈就跟我說,他是先有一定的深度之後才去有廣度


又跟我說一個故事
有兩個人在聊天,一個是數學家一個是科學家
他們是好碰友,那小科就問了小數一個物理方面的問題
可是小數卻是知道那個問題的答案
而小科以為小數不知道,
於是小數就跟小科說出答案,小科就大驚了,說沒想到你居然會知道。

我承認我有點忘了故事內容,大概應該是上述那樣

好了就不談這個了。

修這門課讓我了解了Matlab的好用之處,至於強不強大,
卻只限於我所知的太少,不知是不是很強大。

祝大家新年都快樂呀~

2008年12月18日 星期四

CH6


Nearest-neighbor interpolation

(較近的鄰近的插補)

figure 6.3 的圖明顯的指出
    X3'  X4'
    ○● ○        X7' X8'
         X5'  X6'  ○ ●
         ○ ● ○    
● ○
X1' X2' 

1    2     3      4

●分別對應1234,因為X1' X2'離 1 較近,所以X1' X2'的值就和 1 相同
X3' X4' 則離 2 比較近所以X3' X4' 的值就和 2 相同
X5' X6' X7' X8' 也是如此,作插補得值會因為離最近的一點而當作相同value
這就是Nearest-neighbor interpolation

至於Linear interpolation
書上說經由直線和把那些插補的value放在直線上

figure 6.4的圖 把四個●筆直的連起來
然後再把插補的值,直直的往上放在線上,去當作插補後的value。

6.2
就講到對 image 作插補
接著,p.122下面是打算把一個 4*4 的 image 經由插補 變成 8*8 的 image
於是又是一串數學計算
算到最後的方程式
就是書上想說的 bilinear interpolation

http://zh.wikipedia.org/w/index.php?title=%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC&variant=zh-tw
上面是維基百科的解釋
雙線性插值是有兩個變數的差值函數的線性差值擴展,其核心思想是在兩個方向分別進行一次線性插值。
看p.123的圖 他所敘述的兩個方向應該是X、Y軸
老實說 維基的解釋我看得霧煞煞冏

這時偉大的 Matlab 又有指令可以去做這件事
imresize(A,K,'method')

A是放 "image",K是排列的要素,method則是要用哪種方法
比如之前所說的 " Nearest "或" bilinear "。
p.125就明顯看出 差異了
原本的 image 是 Figure 6.8,而做鄰近插補的則是Figure 6.9 的 (a)
可以看出因為會和靠近的point相同value,所以會有菱菱角角的。
而經由雙線性插補後,感覺變朦朧了。

6.3

這章蠻多數學計算式子的
cubic interpolation
三次插補
bicubic interpolation
雙立方插補

這兩個插補法的英文看起來還蠻相似的
根據我 google 一下 bicubic interpolation
他可以把 image 明顯改善邊緣鋸齒化的缺陷,

6.4
enlargement by spatial filtering
經由空間性的過濾來放大

zero-interleaved 插入0
在原本的矩陣的行和列之間 插入0進去
那麼矩陣的大小就會變兩倍了。
因為插入了0 會讓整個 image 會有明顯的一小格一小格的黑點

p.132 有到目前的插補法所呈現出來的 image 。

6.5
subsampling (部分取樣)

根據老賴對我的解說是
p.133的左邊的圖原本是分散的,把點跟點之間縮小 
就會變成,右邊的圖了。

6.6
rotation (旋轉)
是對 image 作角度的旋轉。
指令
imrotate(c,60,'bicubic')

第一位置放的是 image 第二是放旋轉的角度,第三是放要做哪種插補運算。

6.7
anamorphosis (失真圖像)
Figure 6.25 的圖就發現了下方有個扭曲的不明物體
而書上也有把那不明物體給矯正回來
似乎是用指令
skull = a(566:743,157:586)

還蠻神奇的 話說Figure 6.25 的圖原本就畫那樣還蠻妙的
那時期的畫家的畫風跟現今的人還真是不一樣。


2008年12月4日 星期四

Chapter 5

陳先生生日快樂!!!

Neighborhood Processing
(鄰近地區的處理)

第五章整個主軸就繞在
Neighborhood Processing
只需要知道和 pixel 鄰近的gray 數值
然後再依據這些已知的 pixel(像素值) 的去改變 gray value。
5.1
講到 Mask ,一個移動的 Mask 是一個限定奇數長度的矩形
然而結合了 Mask 和 function 這兩種則被稱為 filter (濾除)

至於
function p.88~p.89 書上就舉了三個
p.88頁是讓 m 矩陣的pixel value 和相對應的 p 矩陣相乘,然後再把全部加起來。

p.89頁有說到Spatial filtering (空間上的濾除) 需要三個步驟

1. Mask 的位置是在 current pixel 之上。
2.算出濾除的要素和在要素的
鄰近地區的所有product(乘積)
3.加上所有的乘積

問:
current pixel的意思是? 
我查字典
current的意思是當前的
是指在 Mask 中任一位置的pixel?
還是?

至於書上寫的Spatial filtering (空間上的濾除) 是
Spatial convolution (空間上的迴旋積運算)
這個convolution運算我就不懂了。

p.90頁有舉例子
在原本的 image 的current pixel 是 e 那一點
並且平均值 也就是在新的 image 所被對應到的pixel 值

Matlab也有指令舉例
對一個5*5的矩陣以3*3的Mask去算平均值

mean2(x(1:3,1:3))

這指令依我的看法
前面的1:3是指從上到下的位置範圍開始
後面的1:3是指從左到右的位置範圍開始
以此類推後面是2:4 是指從左邊第2個開始到第4個範圍
後面是3:5 是指從左邊第3個開始到第3個範圍
整體就是一個3*3的Mask,去算9個value的平均值

所以最後會算出p.91下方的9個vaule

5.2Notation(標記法)
不知道要標記什麼。。。
p.92
寫到平均值的濾除可以用兩個矩陣相乘來表示

5.2.1 Image的邊緣
像figure5.3一個Mask在邊緣上再做平均值的濾除時會因為上方3個pixel是空的
而產生些問題
所以這小節似乎寫了2個方法

Ignore the edges 和 Pad with zero

前面意思是不理會邊緣那些空的pixel
只對在Mask範圍內的pixels作運算


而後面則是填塞0進去那些空的pixel
然後再運算。

5.3 Filtering in Matlab
意思是要轉戰Matlab軟體了。

這裡提到

filter2(filter, image, shape)

這個指令會產生一個跟原本的image相同大小的矩陣。

a=ones(3,3)/9
這個指令看起像是一個3*3的矩陣內都放1,然後再分別除以9
所以a矩陣內的值都是0.111

依此類推
x2=zeros(7,7)
x2(2:6,2:6)=x
這兩個指令意思也應該是一個7*7的矩陣內都放0,
然後

前面的2:6是指從上到下第2個位置範圍開始到第6個位置
把x矩陣的值放入
後面的2:6是指從左到右第2個位置範圍開始到第6個位置
把x矩陣的值放入

所以x2矩陣內的值會像書上的所表示。

問:filter2(filter, image, shape)
中的shape我看書上分別有 'same' 、'valid' 以及 'full' 三種表示
不知道那分別是什麼意思?


答:
經過小紅帽同學的解說
'same' 的意思是經過濾除後的矩陣會和原先的image一樣大小


X矩陣
170 240 010 080 150

230 050 070 140 160
040 060 130 200 220
100 120 190 210 030
110 180 250 020 090
a矩陣

0.1111 0.1111 0.111
0.1111 0.1111 0.111
0.1111 0.1111 0.111

'same' 為了要讓綠除過的矩陣和原先的image一樣大小
所以在濾除過後的矩陣(0,0)位置的值是
Mask這時所蓋住的範圍是 current pixel = 170(詳見p.89圖)

000 000 000
000 170 240
000 230 050


然後再對應的位置相乘再相加
0.1111*0 + 0.1111*0 + 0.1111*0 +
0.1111*0 + 0.1111*170 + 0.1111*240 +
0.1111*0 + 0.1111*230 + 0.1111*50 = 76.6667

依此類推濾除過後的矩陣(0,1)位置的值
Mask所蓋住的範圍是 current pixel = 240

000 000 000
170 240 010
230 050 070

對'same'來說濾除後位置的值 是把原矩陣位置的值放在current pixel 。

========================================================

'valid'則是指對在有效範圍內做運算,只要超出範圍的邊邊的值就不運算。
所以這就和p.90的例子的作法一樣
濾除後的陣列會變小。

========================================================

'full'看他字意思就是全部!
然而這個所展現出來的方式 就是老師上課講解過的火車頭相撞的方法去算
一開始就是開始和a矩陣相乘再相加的值 = (0,0)

000 000 000
000 000 000
000 000 170

(0,1)

000 000 000
000 000 000
000 170 240


以此類推下去。
濾除後的矩陣會變大,因為全部都運算進去了。

========================================================

fspecial 這指令有很多選擇,
可以讓我們很簡單的創造很多不同的濾除
p.95頁 書上就有舉平均值的濾除 用fspecial來做運算
這裡就不再多加敘述了。

5.3.1 Separable Filter
可分離的濾除?

這感覺和p.92頁那邊的例子好像差不多?
就把一個矩陣分成兩個矩陣相乘
像他舉的例子3*3的矩陣
他換成 3*1 的矩陣 乘上 1*3 的矩陣

5.4 Frequencies : Low - and High - Pass Filter

頻率:低頻和高頻的通過濾除

Low - Pass Filter 也就是讓低頻通過
High - Pass Filter也是是讓高頻通過

p.98頁
那個矩陣是和p.97頁下方的矩陣作對應相乘,然後再相加
(150*1)+(152*-2)+(148*1)+(147*-2)+(152*4)+(151*-2)+(152*1)+(148*-2)+(149*1)
=11 = 新的image的pixel

之後就先stop吧
第五章份量蠻多的。慢慢消化中

===========================

p.98就有舉例 fspecial 的運算方法 " laplacian " 和 " log "(Gaussin)
至於 laplacian (拉普拉斯) 在Matlab 是怎麼運算呢?
是和數學方面一樣那樣運算嗎?


p.99有說到
Make negative value positive
(讓負數是存在的?)

書上說明是說這個方法只能在特述情況下
他舉的例子看不明白。。。

Clip value
(刪除數值?)

書上說應用 thresholding type operation
對灰階數值X擴展,經由濾除得到Y值
thresholding type operation 是什麼意思?

這邊真不好說明,書上都有解釋 打上來也沒意思
自己看了又不太解真想略過他

p.100 mat2gray這個指令是
根據書上說法是在任何矩陣裡
最小的value 讓他 = 0.0
最大的value 讓他 = 1.0
然後按照最大最小的比例去轉換數值
而且輸出類型是 double 型態。

5.6 Edge Sharpening
其功能是將影像銳利化及增強對比。
unsharp mask(銳利化遮罩)
銳利化第一章 好像有講過了。

2008年11月22日 星期六

期中大回顧

    A   B   C
week4 11   1       → 100

week6 11           → 100

week7 10   1   1    → 96

week8 14   1        → 100

平均:99分


果然如同老賴同學所說的 
星期四晚上吃飯時他跟我說,今天下午老師講了將近兩節課的互評系統
猜明天會不會也會如此。果然如此!
老師蠻強調課堂正義的,至於怎麼強調其他同學都有說明了。
我是覺得互評系統的功用,應該不止於老師方便改成績,而是還有包含
自己該如何正確地表達方式,能讓其他人所能理解,
而不是東扯一點西扯一點,就算你講的是對的說不定,也會有人看不太懂你所表達的意思。
假設有些人表達能力就真的比較差一點,也可以藉由這種方式,一點一點的去試著改變
只看個人願不願意去改而已。心態上的問題!

還有就是培養自己去觀看別人所寫的心得,看文章是怎麼看的呢?
看他寫的長度?還是看他排版好不好?還是看他內容的正確性以及是否表達的蠻清楚呢?
當別人以自己的想法不同時可以在意見那邊說明自己看法,又或者可以請教老師。
這樣應該可以幫助自己也可以幫助別人吧?

有些人或許會依照上敘的看法,也有些人或不不會。
至於該怎樣去看,就看個人怎麼看了。講再多不會改的還是不會改

對於bolg的撰寫,對我來說應該就是一種紀錄吧,一個下次我再重看書看不懂的時候,
可以幫助我快速回憶的東西
看別人寫的心得,自己再打上經由別人所寫的心得,自己有吸收了解到固然是好,
又或者都沒理解到。
但假如被看的人寫的是錯的呢?我該說沒理解的人幸運?還是該說有理解的人不幸呢?

在blog的草稿拿別人寫的當範本,自己再修改大家都看的到,
別忘了bolg有自動儲存的功能。這句的意思當然不是提醒下次別在草稿修改。
而是修這門課的動機是什麼?
增進自己知識,讓我學習到好多東西之類的 大眾化說法誰都會說吧。。。
還是是老師上課輕鬆、這門課好過。
不予置評。

2008年11月13日 星期四

Chapter 4

影像處理的進度也慢慢地進入到了第四章
4.1

大概講出影像處理可以分成三類基本的資訊顯示
從最複雜的轉換成簡單的。

1.Transforms(轉換)
大概意思是 transform 允許一些有效和強大的演算法
我們可能考慮用一個 transform,把整個 image當成單一大的區塊來做處理。

p.65有圖示
一開始 image 經過 transform後變成 轉換後的 image,
然後再對 image做處理,之後再把處理過的 image反轉換去,
最後就是一張經過影像處理的 image了
那張圖應該是這樣意思吧?

問題:transform到底是在轉換什麼?又該怎麼轉換?
看了一下同學 問的transform只能用在gray 嗎?
我想了又想,才發現 我自己也不是很了解,
所以也想提問說 "transform到底是在轉換什麼?又該怎麼轉換?"


2.Neighborhood processing(鄰近地區的處理)
大概意思是我們只需要知道和pixel鄰近的一小塊,gray leve 的數值
然後去改變這些已知的 pixel(像素值) 的gray level。
老師已解答。

3.Point operations(一點的運算)
意思好像是一個pixel(像素值)的gray value(灰階數值)的改變,
不需要該pixel周圍的資訊

感覺2和3的差別是2要改變gray leve 需要pixel鄰近的資訊
而3則是不用,自己就可以做處理
3也是最簡單的,也被廣泛的運用在影像處理上。

4.2
這節大致上是在講pixel的運算
最簡單的運算是
y=f(x);
f(x)的範圍是0~255,並且包含加減乘除 等四個運算。
然後為了保證他的範圍是在0~255
所以做了一些調整
若y>255 則 y=255
若y<0 則 y=0
p.67的兩張圖就是在舉例說明這個調整
左邊是對所有pixel 加上128
然而當所有的gray value加上128後,原本的pixel大於127都會變成255。

而右邊圖則是用減法,把全部pixel減去128之後,原本的pixel小於128都會變成0。

p.67下面有用MATLAB輸入指令做示範
令我不解的是
b1=b+128; 這個指令
當我輸入之後沒有錯誤,

還有兩個方法可以加128
一個是讓b矩陣轉成double型態在加上128後再轉成uint8型態(範圍0~255)
另一個是利用MATLAB的函數式 imadd
然而書上說會錯誤的那樣寫法
和上述兩個方法,我在workspace那邊看那三個的矩陣內部的數值皆相同。。
看書上錯誤的原因似乎是+這個function在uint8沒有定義??

p.68 (a) b1 是對image 加128 (b) b2 是對image 減128
之後是在對乘和除用image來舉例看之間的差異
p.69 b3 是對其除以2 跟b2 的差異是b2減128後 原本小於128的都=0
而b3是126/2=63 並不會變成0
b4是乘以2倍,5先除以2再加128

以上都是會遵循
若y>255 則 y=255;若y<0 則 y=0
作調整。

書上也有對double型態的image做曲補數的運算
是直接整數1減去該矩陣"1-矩陣"。
對binary 則是用反(~)"~那個矩陣"如書上所示。
假如是uint8型態則直接用imcomplement()這個指令。

4.3
這節主要是在介紹統計圖
axis tight
的意思是會讓長條圖適當的顯示在figure上
如果超出範圍的話他會縮短比例。
依稀記得第一次上課,老師就好像講過image的統計圖
4.3.1contrast stretching(對比延展)
為什麼要延展,老師上課也說過,也拿老師的相機呈現給我們看過了。


按慣例的,小紅帽同學找我一起研究4.3節,我們目前共同的疑問
p.72頁的上面那張圖的右邊那張,根據書上的說法
右邊的圖是根據左邊的圖,應用"Piecewise linear function(片段線性的函數)"畫出來的
我們不了解那到底是怎麼畫的?
還有p.73的中間那張圖,不是說對比延展嗎?為什麼延展後的比例會有所不同?WHY?

另外想問一下
問題: gray level 的意思是?

MATLAB的函數式 imadjust(im,[a,b],[c,d])的功能
依照所輸入的a、b、c、d,能讓 image 如上述的延展開來 figure4.10就是延展的函數圖

至於4.4的 LUT,依照他書上所說的意思
我想應該是pixel value 除以2然後顯示商
value 2 和 3
2除以2後,則顯示商(1);3除以2無法整除有餘數,故仍顯示商(1)。
我想應該是比較節省空間。

2008年10月30日 星期四

Chapter 1-3

基本上 我看的話覺得問題比較大的是書上在解釋那個功用的時候,大部分自己可以去解釋的出來,但是還是也有大部分的解釋,就算我翻譯中文了,也還是不瞭他要表達的意思。
個人小小心得:
我的英文也很破,甚至有次半夜一點多, 李X娟同學 打手機給我問我書上的內容,當下我冏了,我英文比妳還破怎麼會問我書上的內容。
X慧娟同學 說我說明的意思比她自己看的意思,還有道理。我就在想,我什麼時候會說的比她還有道理。。。納悶,我看這本書,我盡量讓自己去閱讀它,遇到不懂的單字第一次先不看他,只看他附近的英文單字意思,第二第三次才去查不懂的單字意思。
所以我看第二章第三章很慢很慢,哈,我看英文課本課文也沒這認真,難怪我英文成績低空飛過。

==========================================================

就像p44頁下面那個指令,就是老師上課回答同學的問題,就是 為什麼矩陣內數值相同,但是秀出來卻截然不同。
書上指令下面就是有解釋老師所解釋的意思了,可是我卻不瞭解那所闡述的。
所以我就看看同學們的問題,看看自己了不瞭解同學的問題,說不定問的剛好是大家的問題。
==========================================================

Images and Pictures

舉凡用電腦顯示出來的圖片影像就稱為image

比如洗出來的相片,或者是一般的圖畫等實體的圖片,就稱為picture

這樣的解釋,問過五或六個人後,其中一位給我的解釋
這樣的解釋也讓我比較清楚什麼是 image 什麼是 picture。
至於那位給我的解釋是否就是那樣,請老師講解一下吧。
===================================================
這是補之前2.5節的image 檔案和類型
所以去搜尋了一下其中幾個的解釋,書上的解釋有些難理解。

BMP
全名:BitMap Picture
解釋:最普遍的影像格式。
但無法壓縮全彩圖片,檔案有過大的問題。

TIF
全名:Tagged-Image File Format
解釋:跨平台、提供非破壞性壓縮、品質佳,影像處理業界常用。
掃描原始圖檔建議使用。

GIF
全名:Graphic Interchange Format
解釋:最多只能存256個色數,但支援透明圖、動畫圖、交錯圖及非破壞性壓縮。
網頁動畫、有明顯線條、色彩單純的圖適用。如圖表、地圖、漫畫...等。

JPEG
全名:Joint PhotoGraphic Experts Group(聯合影像專業團體)
解釋:JPEG組織所制定的破壞性壓縮格式圖檔,有驚人的檔案減肥能力。
適用於色彩豐富的照片,網頁上的圖檔最常用。

PNG
全名:Protable Network Graphics
解釋:針對網路新興的圖檔格式,重點在於改進現有JPEG跟 GIF的缺點

=================================================

再來是有同學來問我2.3的Index color image
他問說他輸入
figure, imshow('emu.tif'), pixval on
這個指令後 ,他的pixel value為什麼會是有小數點?
而下面的指令卻是整數呢?
figure, imshow(em), pixval on
這邊我一看就知道也是老師上課解釋的 color map的問題
我就跟他解釋說,那個指令是直接秀出image 而不是先把image 儲存在矩陣內再imshow該矩陣,
我跟他說那樣做,是有差別的,因為這會牽扯到colormap的問題,如果先把image 儲存在矩陣內再imshow該矩陣的話,會有一個問題,就是該image原先的自己colormap會沒有存到,
而導致秀出來時會索引到系統預設的colormap,所以顯示出來的pixel value是0~255
因為em矩陣的類型是uint8,其range是0~255。
所以要怎樣才能在秀出矩陣時能跟原來的 image 一樣呢?
[em,emap]=imread('emu.tif');

這是再把image 的pixel value存在em矩陣內,並把該image 的colormap也存在 emap矩陣內,
這時看一下emap 矩陣的類型是 double ,而 double 的range 是0~1
所以emap 矩陣內的是被em給索引的colormap。

figure, imshow(em,emap), pixval on
imshow(em,emap), 這個就是指定emap矩陣被em矩陣索引。
我這樣解釋給陳同學,他說大概懂,我是不知道我表達的好不好,不知道他真的懂嗎,所以還是請老師解釋一下。

========================================================

我自己的問題是p10頁的neighborhood這個名詞的意思?以及他的功用是什麼?
雖然老師好像有解釋過,但我聽得懵懵懂懂,所以就此機會趕快重問了。

========================================================

還有就是3.5節,我的問題就是,我按照指令去輸入,去改變newborn的解析度
從64*64 32*32 16*16 8*8 等我的image顯示出來的只有很模糊,沒有書上那樣明顯的馬賽克
疑問~?

========================================================

題外話一下,今天跟同學聊了一下老師用的互評系統,就是就算老師提早開放讓大家可以先放作業到互評系統那裡,這樣是可以讓那些沒來的有可以被評到;但是反過來想,來上課的人很少,那麼可以投票的人不也相對的少了,似乎對有來上課的人有些不公平(?)
雖然老師也說沒評的人也會扣分。
對互評系統的小小問題。
========================================================
po文打心得,主要目的應該是看自己學了什麼,而不是自己學了多少。
有的人在上程式設計時,真的也沒背程式碼指令,丟給他一個題目,他想一下演算法
劈哩啪啦,一下子就把該題目的程式碼寫完。
我該說他厲害還是他資質比較高?

每個人打心得本來就會有多有少,主要看你有沒有那個心去打一份閱讀後的心得。
個人自己的心得重點有點出來,說不定,你自己的想法也可能啟發其他同學原本的對那一事物的看法想法,這樣也很讚的!

嘖,不知不覺嘮叨了一大堆。
有傷眼睛的話見諒~

2008年10月23日 星期四

第七週 第三章心得



CH3 Image display(影像顯示)
3-1
在這一章會詳細的介紹 image display ,我們用imshow function並且show出
如何解析空間上的問題和quantization(量子化?)可能影響image的顯示和外觀。
當然還有一個非常主觀的問題是,沒有二個人不會精確地同意不同的image 的特性。最後對一張 image 來說有兩個最重要的特性:就是解析空間上的問題和quantization(量子化?)。

3-2
Basic of image display(基本的影像顯示)
一個灰色數值image的像素值能用一個矩陣來表示,意思就是image內的value可以按照image的位置放在相對應的矩陣位置。
然而在這個的問題就這理是要在電腦螢幕上顯示matrix(矩陣)。
有幾個因素會影響image的顯示比如:
1. ambient lighting
2. the monitor type and setting
3. the graphics card, and
4. monitor resolution

1. 漫射光
光波照射介質質點時,引起共振作用,使入射光會向任意方向分散的現象,且光波頻率較高者,較易被散射。(以上是物理方面的解釋),老師也有舉個例子
像在教室內沒開燈,可是依然會感覺到很亮,那是因為外面的太陽光的漫射進教室內。
2. 螢幕類型和設定
電腦的螢幕像在桌面按右鍵內容,就可以更改螢幕的解析度和色彩品值等等。
3. 顯示卡
顯示卡是顯示影像用的,主要在顯示顏色數、解析度、更新頻率等等
4. 螢幕解析度
螢幕解析度可以調整目前螢幕是由幾乘幾的像素所組成。

一個基本的MATLAB 顯示image的function是指令 image()
這個function 只是簡單的顯示一個矩陣
當然,他也不會有很好的效果。
實際操作一下



這是拿灰階image去試的效果,嗯,果然如傳說中的變成一大片紅色了。

問題:為什麼拿灰階image 會有這樣效果呢?

書上提到事實上去顯示image 我們還需要再加幾個額外的指令
1. Truesize:
顯示一個矩陣的要素就是螢幕的像素。大部分我們會用truesize([256 256])這個指令,他這個指令意思是用在會依據所給的數字,來引導螢幕解析度的垂直和水平進而來顯示image。簡單說就是調整image所要顯示的size大小。不過沒有明確地說明size的話,他會用電腦系統默認值顯示image(?)

2. Axis off:他是關掉中心線標記(不瞭書上意思?)
3. colormap(gray(247)):這個指令可以調整image原先自己的 color map
而去用灰色的色度。

書上就有舉例假如想image暗一點 就在colormap(512)內輸入512
反之,要亮一點就輸入128。

3-3
The imshow function
這邊講到imshow function的用法
我們可以選擇兩個類型可以來顯示矩陣
1. Convert to type uint8 and then display
2. Display the matrix directly

1. 是指轉換成uint8的類型。
2. 是直接顯示矩陣,不作類型轉換。

第二個是可行的,因為imshow顯示矩陣的類型是double,當一個灰階image只要他的矩陣的要素是在0~1之間。
來實際操作一下



這是把左邊灰階的image轉換成double類型後的結果,感覺蠻奇妙的,怎麼會變成那樣,沒辦法完整的看出全部。
下面解釋說若image的values 介於0~1之間的話,Avalue ν並且ν介於0~1之間將被顯示成灰階 255ν。相反地若values 大於1的話將被顯示1(white)
並且values 小於0的話將被顯示0(black)。
很好,看不懂!

再來若要顯示出cd這個矩陣的話,我們需要以0~1的比例,一個最簡單的分法是利用255來區分所有的values。

果然能顯示了,
而且也可以利用這個來敢變image的矩陣的比例
除以512的話整個image變暗了;返之除以128後變亮了!

cd=im2double(c);
這個指令是把原先cd的存values 範圍0~255 轉換成0~1的比例。

而這兩個指令
c2=uint8(255*cd);
第一個是把cd*255轉換uint8類型後存在c2矩陣。

c3=im2uint8(cd);
第二個是利用im2uint8把cd矩陣轉換uint8類型後存在c3矩陣。



再來46頁的
C1=c>120 這個指令
我看不太懂,我看workspace的c1後,他是顯示256乘256的矩陣
Values 是0或1。
但是c1的類型是logical(?) 這是什麼東西?

下面的指令更奇妙
c1 256x256 65536 uint8  array (logical)
這個執行下去出現錯誤。。。我好錯愕
他說c1先前被當作是可變的(好謎呀?)

已解答:那個並不是指令,我誤以為是指令,實際上那是c1的存檔資訊幾成幾,檔案類型等等 by 猛哥

3-4
Bit planes(bit 程度)
這邊應該是把cd矩陣連續除以2的次方然後再除以2取餘數後,
再看final bite 是0還是1,
下圖就是c0~c7的圖



慢慢的從低位元抓出來看final bite 是0還是1,
最後到128時就與原先的image 差不多了。

然而我們也可以利用c0~c7來還原最初的image

cc=2*(2*(2*(2*(2*(2*(2*c7+c6)+c5)+c4)+c3)+c2)+c1)+c0;
這樣就可以顯示出跟c矩陣show出來的image一樣了。



3-5
Spatial resolution(空間的解析)

看書上的圖片解釋,是從矩陣內取出部分的values來呈現一個image
像這個指令 imresize(x,1/2); 秀出來後跟原image不會差太多
而再從x矩陣內再取出部分的values
x2=imresize(imresize(x,1/2),2);
之後,image開始有些模糊了
我又再把x矩陣存了x,x2,x3,x4,x5,x6等
果然image越來越模糊了



最後心得總結:
第三章前面還好,大致上還能瞭解,慢慢的3-5、3-6開始有些許看不明瞭了
或許是不夠時間去看書上的內文,自己一開始看第三章時,先用快速大概看過去,遇到自己不知道意思的英文單字,就看前後文自己大概猜一下意思,還是猜不出來就先放棄跳過,往後面邁進。而且感覺第三章比起第二章整體來說有便困難些了。

2008年10月15日 星期三

第五週 第二章心得

點圖可以放大!

第五周

終於到了第二章,大概翻過後,有明顯地看到幾個有框框的指令
於是乎,要開啟MATLAB 這個程式,來動手DIY。
第一個指令是
w=imread('buffalo.tif');
好奇的是,一開始我忘了打分號,結果再輸入指令那邊變成這樣↓



整個陣列數值都列出來了,輸入完指令後
隨即會把buffalo.tif這圖片轉成矩陣方式存在W矩陣內如下↓



接著再輸入
Figure, imshow(w), pixval on
Show出W矩陣



之後就秀出buffalo.tif這個圖片
然而imshow(‘buffalo.tif’)
也是可以直接秀出圖片,與Figure, imshow(w), pixval on 之間的差別嘛
好像差在於pixval on 在指令那邊會多秀出一些資訊
以及在圖片左下角有串數據,
在書上有說明pixval on,是由c*r = p,c是行(直的 ),r是列(橫的 — )
而p 則是gray value (灰色數值),因為buffalo.tif是8-bit grayscale(灰階)
image而那pixel value(像素數值) 是整數的範圍在0~255。
而imshow()這個則是只秀出圖片。

2-2
講到RGB image,在24那張圖,明顯的表現出RGB三原色用三維空間的數值來表示範圍是從原先的0~255,轉換為0~1的比例。
再來是這個指令 size(a),可以看到該圖片是以幾乘幾的矩陣儲存的



當我們想知道RGB value 在某個特定的位置,我們可以用indexing methods(索引的方法)。
當我輸入a(100,200,2),按照書上的說明會回傳在row 100和column 200位置的第二個顏色Green的數值。
但實際上我輸入後,卻跳出說Index exceeds matrix dimensions.
索引超出矩陣範圍??
解答:事後我才發現我是再找RGB的數值,可是我卻拿灰階的圖片去找,難怪會跳出說找不到。
換成由RGB所構成的圖後,就沒問題了,能如願地找到



Impixel(a,200,100)這個指令更是直接回傳RGB三個數值,與
a(100,200,1:3)這個指令是用分三次表示出RGB的數值還來的簡潔
Impixel(a,200,100)這個指令是藉由pixval on。



2-3

Information about your image(關於你的影像的資訊)
如上所說是有關於你的影像的一些較細節的資訊
像有些資訊通常我們是沒有用,我們大部分只看檔案大小…等等如下↓



2-4
Data types and conversion(資料類型和轉換)
Data types in MATLAB 詳看第28頁 TABLE2.1

Int8   8 bit 整數 範圍:-128~127
uInt8   8 bit 整數 範圍:0~255
Int16   16 bit 整數 範圍:-32768~32767
uInt16  16 bit 整數 範圍:-128~127
Double 兩倍精確的實數 範圍:Machine specific(這是什麼?)

Converting images in MATLAB 詳見第28頁 TABLE2.2

Ind2gray indexed to grayscale 形式:y=ind2gray(x,map);
gray2Ind grayscale to indexed 形式:[y,map]=gray2ind(x);
rgb2gray RGB to grayscale 形式:y=rgb2gray(x);
gray2rgb grayscale to RGB 形式:y= gray2rgb (x);
rgb2Ind RGB to indexed 形式:[y,map]= rgb2Ind (x);
Ind2rgb indexed to RGB 形式:y=ind2rgb (x,map);


覺得指令蠻口語的to 直接是2
還有就是形式那邊的x, y 是指什麼?矩陣?還是要轉換的那兩張影像?

2-5
Image file and formats(影像檔案和形式)

Image 有有四個不同的類型:binary(黑白)、grayscale(灰階)、colored(RGB)、indexed(索引)
對影像資料的儲存有很多很棒的不同形式
像MATLAB 支援了以下形式:
JPEG、TIFF、GIF、BMP、PNG、HDF、PCX、XWD、ICO、CUR等
我們常見常用的就是JPEG、BMP、GIF等等
2-5.3之後就開始對上述的做簡潔的說明
詳見第33頁至第38頁。

疑問:什麼時候要加"分號"呢?
答:沒有加分號的情況, MATLAB 會把執行結果直接顯示在螢幕上, 有加分號則不會顯示! by yklee

2008年10月2日 星期四

第三週心得

開學至現在第三週了,因為前兩周有訂書跟申請作者等活動依序展開,
這周二就可以去領書了,有大概翻過一下,看看圖片。
第一章前面幾節的圖片都有原來的圖片以及經過處理的圖片,兩兩來互相比較差異性。
老師第一章有帶我們導讀,說導讀其實在第一章一開始就講明了什麼是影像處理,
1. Improve its pictorial information for human interpretation, or
2. Render it more suitable for autonomous machine perception.
第一點呢大概翻譯是把圖片顯示給人們容易看得懂
第二點是把圖片處理成讓電腦容易理解
簡單來說就是把影像處理給人看或者給電腦看!
以上就是課本所要講解的內容了。真是精闢呀
不過光知道那樣是不夠的,所以還要繼續努力翻下一頁
p.2那張圖,左邊的是原圖,右邊的是輪廓較清楚的,下面內文說到
要讓image 看起來令人滿意的有兩點
1. 傳統的做法就是讓一個image 看起來比較好看,但是也有可能會變最糟的情況(例如破圖)
2. 人們喜歡他們的影像輪廓清楚、乾淨、精細的,而電腦寧可他們的影像簡單的呈現出來。
比如像有些人希望自己拍出來的照片能夠看起來漂亮美觀點,所以就修的美美的,就是這樣。
p.3左邊的車子圖片是模糊的,而右邊的圖變條狀後,圖片整個就變得比較清楚些。
p.4的右上image我們人看不明瞭但是是用來給電腦看的。
p.6右圖是從左圖沒有失真的情況下局部的取樣來顯示的,
我們看起來是挺粗糙的。
之後講到三原色RGB,RGB三原色用數字來表是則是由0~255表示。
一共會有2553 = 16,777,216種不同的顏色。

問題:
我有個疑問是在p.16的 figure1.19的color map的三列數字是如何得知的?
我當初以為是以255為1,0~255之間看成是0~1之間的比例
原本0變成是0/255 = 0,1→1/255…… 這樣子的,可是我用小算盤按過幾個之後跟書上的數據不同,
所以令我納悶,color map的整串數據是從哪來的?

2008年9月18日 星期四

Matlab 初體驗

Matlab的初次體驗
在上影像處理的第一節,老師舉了個例子
是用一張圖片來問我們,一張圖片是怎麼組成的
通常在電腦裡一張圖片是由RGB三原色所組成的
而RGB會依照顏色深淺由0至255做改變,像0就是黑色,255是白色
一張圖片就像一個2X2的陣列,位在陣列[1,1]的位置他的數值也許是28,
[3,2]位置是128等等
甚至現場還舉了柚子月餅來啟發我們的想法,中間還口誤說成月餅口味的柚子。。
然後就問我們,如果我想知道一張圖片他的數值分別有多少的話,該怎麼做呢
我當下就想了一想,嗯~ 二維陣列 也許兩個for loop 大致上就可以計算出來
也許我這樣想,或許還會有小疏忽的存在
以C++的方式來說
int H[1000][1000];
int H1[256] = 0;
int i = j = 0;
for(i;i<1000;i++ )
{
for(j = 0;j<1000;j++)
H1[H[i][j]]++;
}
for(i = 0;i<256;i++)
cout<<"數值"<< i <<"一共有"<< H1[i] <<"個/n";
以上是假如我用C++來寫的話,我會是那樣寫

第二節後,老師開始請學姐來示範Matlab的妙處
後來老師看不過去,跳出來說明
以上那些程式,用Matlab來寫的話
只需寫一個指令即可!!(大驚)
當老師切螢幕後(第一次沒切成,以為有切,嘖嘖)
就馬上顯示出Matlab的神奇所在
果然只需一個指令,就能把上面我所想的動作,都完成了
然後老師也接著打了一些指令給我們看,
讓我嘆想,一股相逢恨晚感覺湧了上來,當下或許我看到了Matlab的好
或許我還未見到Matlab的缺點之類
感嘆我當初沒去買書,或許就是個不智的選擇
下課後,我自己又再試打著老師剛剛打的指令,於是乎
上網抓個圖片來試試,打好指令按下去,怪怪的,怎麼跟老師所顯示的不一樣
於是求救李X娟同學,問問李慧X同學是我的指令打錯之類的嗎?
(為了保護同學隱私 故用 X 來表示.....)
為什麼我看不到我存的圖片,換手後,她說work是在這一面,
你剛剛看的那一面是只有路徑那一面,當下我真的蠢了,難怪我會覺得不一樣
看來我對Matlab瞭解還是太渺小
以上是我對Matlab的小小初體驗。