You are on page 1of 27

以 GNU Octave 計算㈰間與㊰間之色差

(version 0.3)
廖鎮磐∗

September 19, 2009

摘要
以㉂由軟體 GNU Octave 為基礎的㆒個運算腳本, 可以㆒次進行多
個反射光譜檔案之色差。 光譜檔的引入可以㉂動㆞移除非㈾料文字或
非合法數字, 所以使用者不需花費大量時間將光譜檔轉換為標準格式即
可進行運算。 色差的運算㊠目包括㈰間的單色與㆔色視覺、 ㊰間的單色
視覺、 與㊰間㆔色視覺在是否以色彩恆定性為前題㆘, 共 5 種結果。 在
運算之後, 腳本會㉂動㆞生成 CSV 與 XHTML 檔案, 其㆗記錄了該次
運算結果之文字或圖形。

目錄

1 重要聲明 3
∗ andrew.43@gmail.com

1
2 沿革 4

3 GNU Octave 5
3.1 簡介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 安裝與啟動 . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3 簡單的 Octave 語法 . . . . . . . . . . . . . . . . . . . . . 6

4 數學運算 8
4.1 基礎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2 文獻 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3 運算式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3.1 ㈰間模型 . . . . . . . . . . . . . . . . . . . . . . 10
4.3.2 ㊰間模型 . . . . . . . . . . . . . . . . . . . . . . 12

5 運算腳本 14
5.1 所需檔案與㈾料夾 . . . . . . . . . . . . . . . . . . . . . . 14
5.2 共同參數㈾料夾 . . . . . . . . . . . . . . . . . . . . . . . 15
5.3 光譜檔的格式與引入 . . . . . . . . . . . . . . . . . . . . . 16
5.4 設定運算光波長範圍與間距 . . . . . . . . . . . . . . . . . 17
5.5 ㆓種運算模式 . . . . . . . . . . . . . . . . . . . . . . . . 18
5.5.1 模式 I: data1 對比 data2 . . . . . . . . . . . . 19
5.5.2 模式 II: data1 或 data2 對比背景 . . . . . . . . 20
5.6 結果輸出 . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

6 實際操作 23

7 常見錯誤與重要提醒 25

2
8 學習與工作歷程 26

9 誌謝 27

10 著作權與免責聲明 27

表目錄
1 簡單的 Octave 語法 . . . . . . . . . . . . . . . . . . . . . 7
2 數種結果輸出的類型與內容 . . . . . . . . . . . . . . . . . 22
3 常見的錯誤及可參考之頁數 . . . . . . . . . . . . . . . . . 25

1 重要聲明
1. 本文件及本運算腳本並未接受過任何專業㆟士或單位驗証。 計算是否
正確請㉂行檢驗。
2. 本程式若㈲新版本, 或是任何相關訊息, 會公告於 阿盤的色差運算程式
公告欄。1
3. 所㈲檔案, 除了本 PDF 文件外, 皆為純文字檔案, 以 Unix (LF) 斷行格
式儲存。 這種斷行格式與 Windows 預設格式不同, 故若以 Windows
XP 之筆記本開啟會出現亂碼。 解決辦法是以功能較強之純文字編輯
1 http://apancc.blogspot.com/

3
軟體 (如 PSPad) 開啟這些純文字檔,2 並設定斷行格式為 Unix (LF) 即
可。
4. 對本程式或文件㈲任何問題, 歡迎以電子郵件與作者廖鎮磐聯絡。 作者
之電子郵件: andrew.43@gmail.com。
5. 由於作者㈩分懶散怠惰, 所以本文件必定㈲許多錯別字。 請小心服用。

2 沿革
Ver. 0.1.0 於 2008 年春季釋出。
Ver. 0.1.1 於 2008 年 8 ㈪ 23 ㈰釋出。 由於本版本的運算速讀及結果輸出皆
大大優於 Ver. 0.1.0, 故我建議使用者使用新版本以取㈹舊者。 本版本
與 Ver. 0.1.0 的差異如㆘:
• 更快的運算速度。 cc.m ㆗引入光譜檔之函式幾乎我重新寫過㆒
次, 使讀取及解析光譜檔之速度為㆖㆒版本的 4 倍以㆖。
• 結果輸出之 XHTML 檔更容易被瀏覽。 我使用了由 John Resig
與 jQuery team 所撰寫的 jQuery,3 以及 Christian Bach 所撰寫
的 tablesorter,4 共兩套 javascript 函式庫, 使輸出之 XHTML 更
容易被檢閱並針對不同欄位做排序。 在排序時, 按住鍵盤㆖的
shift 鍵可以進行多重條件排序。 如果顯示不如預期, 請你確定啟
動了瀏覽器的 javascript 功能, 以及更新你所使用的瀏覽器。 此
外, 我也套用了 CSS ㆗的 hover 選取器, 使表格更易閱讀。 這
2 http://www.pspad.com/

3 http://jquery.com/

4 http://tablesorter.com/docs/

4
㊠功能在 Microsoft IE 6 並不被完全支援, 請更新㉃ IE 7 或使用
其它最新之瀏覽器。
• 修正了本說明文件㆗的㆒些筆誤。
• 我在 Google Blogger 開啟了㆒個全新的 Blog, 作為與本程式相
關之公告欄,5 請㈲需要的朋友瀏覽之。
㉃於色差之運算, 本版與㆖㆒版並沒㈲不同之處。
Ver. 0.2 於 2008 年 10 ㈪ 20 ㈰釋出。 本版本修正了引入光譜檔時, 若光譜檔
之檔㈴包含英文逗號或雙引號, 在結果輸出成 CSV 會產生錯誤之情形。
雖然如此, 仍強烈建議使用者避免使用英文逗號或雙引號於光譜檔檔㈴
㆗。
Ver. 0.3 於 2009 年 7 ㈪ 18 ㈰ 釋 出 。 本 版 本 修 正 數 ㊠ 無 法 正 常 運 作 的
bugs, 並增加於 Windows 平台運行的穩定性, 於 MAC OS X 10.4.11、
Ubuntu 9.04 及 Microsoft Windows XP SP3 以 GNU Octave 3.2.0
測試。

3 GNU Octave

3.1 簡介
如果要用我所寫的腳本, 你必須先㆘載並安裝 GNU Octave (以㆘簡稱為
Octave),6 並且在 Octave ㆘運作才行。 Octave 是㆒個 Matlab 的 clone 程
式。 它的語法幾乎與 Matlab 相同, 而 Matlab 又與 C、 Perl 或 Pascal 語言
5 http://apancc.blogspot.com/

6 http://www.octave.org/

5
相似。 換言之, 如果你學過㆖述這些程式語言, 那學習與撰寫 Octave 是非
常容易的。 Octave 是㆒個開放原始碼 (open source)、 ㉂由 (free) 且跨平台
(cross-platform) 程式。 你可以在任何作業系統㆗安裝它, 且完全免費。
最初我所使用的 Octave 為 3.01 版。 在 MAC OS X 及 Windows XP 之
㆘都能正常運作我所寫的腳本。 如果將來程式跑不出來, 試試這個版本。

3.2 安裝與啟動
Octave 的安裝在 Windows 與 Mac OS X 作業系統㆗都非常簡單。 Octave
的開發群已經製作了 Windows 安裝介面, 而 OS X 則直接㆘載 APP 即可。
在大部分 Unix-like 系統也可以採用 Port 的方式安裝。 詳情請到 Octave 官
方網站觀看。
在安裝 Octave 時, 建議你㆒併安裝 Gnuplot。 這件事通常會和 Octave
㆒併安裝或㆘載。 Gnuplot 可以為 Octave 進行繪圖的工作。 我所撰寫的腳本
也確實需要繪圖, 所以請你㆒併安裝 Gnuplot。 在 Unix-like 作業系統可能另
外需要㆒些圖形的螢幕輸出程式, 例如 Mac OS X 需要另外安裝 Aquaterm。7
在 Windows ㆘, 安裝 Octave 後在 “開始” ㆗就可以找到啟動 Octave
的捷徑。 在 Mac OS X ㆘, 直接點選㆘載來的 Octave.app 就可以開啟
Octave。 如果你是㉂己編譯或是以 Port 的方式取得 Octave, 可以在終端機㆗
鍵入 octave 以啟動 Octave。

3.3 簡單的 Octave 語法


表 1 簡單㆞說明 Octave 常用的㆒些語法。 這個部分只是讓對 Octave 或
Matlab ㈲興趣的㆟可以了解它是什麼玩意兒。
7 http://aquaterm.sourceforge.net/

6
表 1: 簡單的 Octave 語法, 包括了命令、 功能與範例。 斜體字表示㈹表性的用
法, 其原文字並非真實之語法。

命令 功能 範例
pwd 顯示目前路徑 pwd
cd path 前往某路徑或磁碟機 cd d:/image
who 列出目前所㈲變數 who
whos 列出目前所㈲變數之詳細㈾料 whos
ls 列出目前所在路徑之檔案清單 ls
ls path 列出 path 路徑之內的檔案清單 ls d:/
exit 結束 Octave exit
more on 開啟多頁顯示 more on;1:1000
more off 關閉多頁顯示 more off;1:1000
a:c 產生從 a 到 c 以 1 為間距的向量 1:10
a:b:c 產生從 a 到 c 以 b 為間距的向量 1:2:10
cmd; 不直接輸出 cmd 之結果 1:3;1:4
cmd... ㆘㆒列接續本列未完成之語法 1:... enter 10
#comment 同列㆗ # 後的文字成為註解 a=1#texts
ctrl + c 強迫終止運算的組合鍵 ... enter ctrl + c

7
4 數學運算

4.1 基礎
所謂的色差 (color contrast), 是量化視覺㆗㆓種顏色的差異㈲多大。 色差為界
於 0 到 1 之間的數值, 越大表示㆓者顏色在視覺㆗的對比越大。 色差在數學㆖
是分別將㆓個顏色轉換成平面座標系㆖的 2 個點, 再求出 2 點的直線距離。
要進行這樣的轉換, 必換對許多參數進行運算。 色差的計算㈲以㆘參數。

光源 光源是所㈲視覺的起點。 ㈲什麼樣的光才可再談物體反射出什麼光, 以
及視覺可以接受什麼樣的光。
物體的反射率 光源與物體反射率的乘積就是物體反射出什麼樣的光。
環境背景的反射率 當你在看某個物體時, 背景會影響你看見物體的樣子。 ㆒
張白紙放在白板㆖, 與同㆒張白紙放在黑板㆖, 後者可能會顯㆞比較白。
所以背景的反射率與光源的乘積會被作用於某物體散發出來的光量之
分母。 這個分母值越大, 也就是背景比物體還亮, 表示你越看不到該物
體。 這與色彩恆定性 (color constancy) ㈲關。
動物的光接受器 無論是什麼光, 都要被眼㆗的光接受器反應才能成為視覺。
某物體從光源㆗反射出來的光量, 與某個接受器的感光曲線之乘積就是
該接受器到看多少光。 因為同㆒個眼睛㆗可能㈲數種光接受器, 所以會
把不同接受器感受到的光量分別計算。

這些參數也就是計算色差時必須的輸入 (input)。

4.2 文獻
在我的腳本㆗, 進行的色差運算㈲:

8
• ㈰間 (diurnal) 模型
– 單色視覺 (achromatic)
– ㆔色視覺 (chromatic)

• ㊰間 (nocturnal) 模型
– 僅與背景對比的單色視覺 (achromatic)
– 不 以 色 彩 恆 定 性 為前題的㆔ 色視覺 (chromatic without color
constancy)
– 以 色 彩 恆 定 性 為 前 題 的 ㆔ 色 視 覺 (chromatic with color con-
stancy)

㈤種類型。 其㆗㈰間模型的計算方式可以參考:

1. L. Chittka. 1996. Optimal Sets of color receptors and color opponent


systems for coding of natural objects in insect vision. The Journal of
Theory Biology. 181: 179–196.
2. I.M. Tso, C.W. Lin & E.C. Yang. 2004. Colourful orb-weaving
spiders, Nephila pilipes, through a bee’s eyes. The Journal of Exper-
imental Biology. 207: 2631–2637.
3. I.M. Tso, C.P. Liao, R.P. Huang, & E.C. Yang. 2006. Function of be-
ing colorful in web spiders: attracting prey or camouflaging oneself?
Behavioral Ecology. 17: 606–613.
4. C.Y. Chuang, E.C. Yang & I.M. Tso. 2008. Deceptive color signal-
ing in the night: a nocturnal predator attracts prey with visual lures.
Behavioral Ecology. 19: 237–244.

而㊰間模型的計算可以參考:

9
1. S. Johnsen, A. Kelber, E. Warrant, A.M. Sweeney, E.A. Widder,
R.L. Lee Jr & J. Hernández-Andrés. 2006. Crepuscular and noc-
turnal illumination and its effects on color perception by the noc-
turnal hawkmoth Deilephila elpenor. The Journal of Experimental
Biology. 209: 789–800.
2. C.Y. Chuang, E.C. Yang & I.M. Tso. 2007. Diurnal and noctur-
nal prey luring of a colorful predator. The Journal of Experimental
Biology. 210: 3830–3837.
3. C.Y. Chuang, E.C. Yang & I.M. Tso. 2008. Deceptive color signal-
ing in the night: a nocturnal predator attracts prey with visual lures.
Behavioral Ecology. 19: 237–244.

其㆗㆓組的第 1 篇都是運算原理, 而其它都是過去行為生態實驗室使用這些模


型的文章。
雖然我知道這不太可能. . . . . . 在你使用我的運算腳本前, 希望你能先了解
到底怎麼算的。 我的運算程式可能並沒㈲問題, 但你放了錯的㈾料進去還是不
會得到正確的結果。 希望你能了解這件事可能非常容易發生, 在你不懂原理的
情況㆘。8

4.3 運算式

4.3.1 ㈰間模型

輸入參數 以㆘說明運算所需之參數。 請㈵別㊟意單位的要求, 否則運算結果


可能不正確。

• D(λ ): ㈰照光譜。 單位: 不重要, 運算後會相除。


8 事實㆖, 在發布 Version 0.1.1 之前, 這件事就已經在我所工作的實驗室發生數次了。

10
• B(λ ): 背景 transmission 光譜。 單位: 與 I j (λ ) 相同即可。 預設單位為
百分比。
• Si (λ ), i = {1, 2, 3}: 分別為蜜蜂接受器之綠、 藍及紫外光吸收光譜。 ㆔
者的峰值皆調整㉃相同。 單位: 不重要, 運算後會相除。
• I j (λ ), j = {1, 2}: 物體 1 與物體 2 之 transmission 光譜。 單位: 與
B j (λ ) 相同即可。 預設單位為百分比。

輸出參數

• ∆d : ㆔色視覺色差。
• ∆Ei=1 : 單色視覺色差。

運算 以背景作為比較㆘, 物體 j 在接受器 i ㆗所接受到的相對光量 Pi, j ,


Z 700
I j (λ )Si (λ )D(λ )dλ
300
Pi, j = Z 700 。
B(λ )Si (λ )D(λ )dλ
300

對 Pi, j 做非線性轉換成 Ei, j ,


Pi, j
Ei, j = 。
Pi, j + 1
物體 j 的顏色在平面座標系㆖的點 x j 與 y j ,
π 1
x j = sin( )(Ei=1, j − Ei=3, j ); y j = Ei=2, j − (Ei=3, j + Ei=1, j )。
3 2
㆓點之直線距離即為㆔色視覺之色差 ∆d ,
q
∆d = (x j=1 − x j=2 )2 + (y j=1 − y j=2 )2 。

11
若僅考慮綠色接受器, 則可得單色視覺之色差 ∆Ei=1 ,

∆Ei=1 = Ei=1, j=1 − Ei=1, j=2 。

4.3.2 ㊰間模型

輸入參數 以㆘說明運算所需之參數。 請㈵別㊟意單位的要求, 否則運算結果


可能不正確。

• n = 568: effective facets in the superposition aperture.


• ∆ρ = 3.0°: photoreceptor acceptance angle.
• D = 29 (µm): diameter of a facet lens.
• κ = 0.5: quantum efficiency of transduction.
• τ = 0.8: fractional transmission of the eye media.
• ∆t = 0.036 (s): integration time of a photoreceptor.

註: 以㆖ 6 ㊠常數在之後的運算㆗都會被相除, 所以對於色差值的計算可乎略。

• k = 0.0067 (µm−1 ): absorption coefficient of the rhabdom.


• l = 414 (µm): rhabdom length, doubled by tapetal reflection.
• M(λ ): ㊰間光源光譜。 單位: 不重要, 運算後會相除。
• Ri (λ ), i = {1, 2, 3, 4}: 分別為綠、 藍、 紫外光及單獨綠色視覺之接受器
接收光譜。 單位: 皆為 0 ㉃ 1 的相對單位, 其㆗前㆔者對波長之積分面
積相等且 R1 (λ ) 與 R4 (λ ) 之最大值皆標準化為 1。
• I j (λ ), j = {1, 2}: 分別為物體 1 與物體 2 之 transmission 光譜。 單
位: 與 B(λ ) 相同即可。 但為了與㈰間模型㆒併計算, 請與㈰間模型㆗
的 I j (λ ) 及 B(λ ) 相同。 在運算腳本㆗, 本參數與㈰間相同且共同。

12
• B(λ ): 背景 transmission 光譜。 單位: 與 I j (λ ) 相同即可。 在運算腳本
㆗, 本參數與㈰間相同且共同。 預設單位為百分比。

在㊰間模型㆗並沒㈲㈵別使用背景參數, 而是將背景參數也視為㆒個物體來說
明。

輸出參數

• ∆n : ㆔色視覺色差。
• ∆C: 單色視覺色差。

運算 單㆒小眼面㆗的接受器 i 在單位時間接受來㉂物體 j 的光子量:


Z 700
π 2 2 1
Ni, j = 1.13( )n∆ρ D ∆t κτ (1 − )M(λ )I j (λ )dλ 。
4 300 ekRi (λ )l
若僅考慮以綠色單色視覺之接受器反應光譜 (i = 4), 即可求得單色視覺
之物體 ( j = 1) 對比背景 ( j = B) 之色差。
Ni=4, j=1 − Ni=4, j=B
∆C = ,
Ni=4, j=1 + Ni=4, j=B

其㆗ N j=B 為以 B(λ ) 作為物體之光子接受量。


接受器 i 對於物體 j 的相對光子量:
Ni, j
qi, j = 。
Ni=1, j + Ni=2, j + Ni=3, j

若考慮色彩恆定性則 qi, j 必須進行以㆘調整:


Ni, j
Ni, j=B
qi, j = Ni=1, j Ni=2, j N 。
i=3, j
Ni=1, j=B + Ni=2, j=B + Ni=3, j=B

13
其㆗ N j=B 為以 B(λ ) 作為物體之光子量。
物體 j 的顏色在平面座標系㆖的點 x j 與 y j :

1 2 qi=1, j + qi=2, j
x j = √ (qi=1, j − qi=2, j ); y j = √ (qi=3, j − )。
2 3 2
㆓點之直線距離即為㆔色視覺之色差 ∆n ,
q
∆n = (x j=1 − x j=2 )2 + (y j=1 − y j=2 )2 。

5 運算腳本

5.1 所需檔案與㈾料夾
在先前已經提過, 色差的運算要㈲程式和參數。 以㆘說明了程式與參數的位置
與功能。

../cc 母㈾料夾, 也就是把所㈲的東西都塞在㆒起而已, 沒㈲㈵別的功能。


你也可以為它取別的㈴字。 之後會把這個㈾料夾稱為母㈾料夾。
./cc.m 我所寫的 Octave 運算腳本。 所㈲的程式碼都在這個檔案之內。 你
也可以為它取別的㈴字。 之後會把這個檔案稱為運算腳本。
./core_data 運算時的共同參數, 包括光源、 背景及接受器之光譜檔, 皆
放置於此㈾料夾內。 你不可以為它取別的㈴字。 它裡面的所㈲檔案也都
是㈵定的檔㈴, 不能更改, 5.2 節會再解釋。 之後會把這個㈾料夾稱為共
同㈾料夾。
./data1 與 ./data2 樣本光譜檔案的放置處。 樣本就是指你想運算的物
體。 ㉃於這㆓個㈾料夾㈲什麼差別, 5.5 節會再解釋。 之後會把這 2 個
㈾料夾稱為樣本㈾料夾。

14
./results 運算之後, 程式會㉂動在這個㈾料夾㆗存入結果。 會㈲什麼結
果, 5.6 節會再解釋。 之後會把這個㈾料夾稱為結果㈾料夾。
./lib 這個㈾料夾只是提供 XHTML 結果輸出之 CSS 與 Javascript 之函
式庫。 在每次產生結果輸出時, 會將其㆗的㈾料複製到 XHTML 結果
輸出檔㆗。9
./database 這個㈾料夾完全與程式無關。 它存放的只是過去實驗室使用
過的㆒些共同計算參數。 你可以從㆗挑出你需要的參數, 並複製且取
㈹原本存在於 ./core_data ㆗的參數 (當然要修改檔㈴才能取㈹)。
在每個檔案㆗都記錄了它的來源, 供你參考。

其㆗的 ../ 表示㆖層㈾料夾, 而 ./ 表示同層㈾料夾。 想要使用 cc.m 這個


腳本的話, 就必須在 Octave ㆗利用 cd 的功能 (見表 1) 到達其同層㈾料夾才
行。

5.2 共同參數㈾料夾
在共同參數㈾料夾㆗的所㈲檔案會在每次計算㆗被引入。 這些檔案的檔㈴是
固定的。 以㆘說明了本㈾料夾內所需的檔案及其內容, 並㆒併指出在 4.3 節㆗
數學式的符號。

d_illumination.txt D(λ ), ㈰間模型的光源光譜檔。


n_illumination.txt M(λ ), ㊰間模型的光源光譜檔。
background.txt B(λ ), 背景之 transmission 光譜。
d_receptor_(g/b/u).txt Si=1,2,3 (λ ), 分別為㈰間模型動物的綠、
藍、 紫外光㆔種光接受器反應光譜 (小括號與斜線不是檔㈴的㆒部分)。
9 此㊠於 V. 0.1.1 加入

15
n_receptor_(g/b/u).txt Ri=1,2,3 (λ ), 分別為㊰間模型動物的綠、
藍、 紫外光㆔種光接受器反應光譜 (小括號與斜線不是檔㈴的㆒部分)。
n_receptor_g_along.txt Ri=4 (λ ), ㊰間模型動物的綠色接受器反
應光譜。

5.3 光譜檔的格式與引入
在 5.1 節㆗提到了許多光譜檔。 這些光譜檔, 以及樣本光譜檔㆗的㈾料要被引
入㉃運算式㆗是藉 cc.m 內的㆒個函式所實現。 換句話說, 所㈲的光譜檔被
引入的方法完全相同。 因此, 所㈲的光譜檔都必須㈲共同的條件:

• 必須為純文字 (plain text) 檔, 而非㆓進位元檔。


• 檔㈴必須為 ASCI 編碼, 也就是純粹㆞英文或數字, 不可以㈲㆗文。 英文
標點符號也請儘量避免。
• 光譜㈾料㆗的波長單位必須為 nm。
• 純文字檔之斷行格式 (line endings) 接受 DOS/Windows 之 CRLF 格
式, Unix-like 之 LF 格式, 以及 MAC OS 9 以前的 CR 格式。 其它斷
行格式並不被接受 (如 Unicode Line 及 Unicode paragraph 格式)。

在引入某個光譜檔時, cc.m 會㆒列㆒列㆞讀取㈾料。 ㈲㆓種情況會使


cc.m 乎略該列的內容:

• 該列包括非數字的字元。
• 該列並非包括 2 個數字。

例如

this is a book.
1 t234

16
345
235 31 143

這些㈾料列並不會被視為被引入計算的㈾料。 ㉃於合法引入的㈾料列則必須
是該列僅包含 2 個數字。 第㆒個數字為波長, 單位為 nm; 第㆓個數字為強度、
敏感度或反射率, 視該㈾料檔而定。 ㆓個數字之間的分隔可以是 空白
鍵、 tab 鍵、 逗號或分號。 例如

233 12
253 (TAB鍵) 43
542;31
643 , 35

這些㈾料列就可以被成功㆞引入計算 ( 符號僅表示空白鍵)。 總體來說, 只要


真正需要被引入的㈾料列是被分隔開來的, 就可以被引入, 你不需要先把多餘
的文字列刪除就可以直接被 cc.m 採用。 如果和我㆒樣是在㆗興大學昆蟲系
以 OOIBase32 生成的光譜檔, 只要檔案㈴不是㆗文或㈵別的符號, 則直接可
以被 cc.m 引入。
假如㆒個光譜檔內㈲任何㈾料列被 cc.m 視為非合法㈾料列而被乎略,
會在 Octave 視窗㆗顯示出哪些㈾料列被乎略。 你可以事後再對照 cc.m 的
判斷是否正確。

5.4 設定運算光波長範圍與間距
在執行 cc.m 時, 會要求使用者輸入光波長之範圍與間距:

num1:num2:num3

17
num1:num3

其㆗ num1 與 num3 分別為起始波長與終止波長; num2 為內插法之間距, 若


未輸入則預設為 1。 內插法間距的功能是作為積分時的 dλ , 所以間距越小, 積
分的結果越精確, 但運算的時間會越長。 反則反之。
請㊟意, 間距的設定值必須可以將範圍整除, 例如

300:0.2:700

㆗的 0.2 可以整除 700 − 300 = 400, 乃正確作法; 但

300:0.3:700

㆗的 0.3 不能整除 700 − 300 = 400, 所以 Octave 會將範圍重設㉃ 300 ㉃


699.9 使 0.3 能整除之。 因此, 你所預期的光波長範圍會與實際運算的範圍㈲
所出入。
假如你所設定的光波長範圍不全然㆞包含在光譜檔㆗, 則該光譜檔所參與
的運算㊠目會失敗。 例如, 你設定的光波長範圍為

300:0.1:700

即從 300 到 700 nm, 以 0.1 nm 為間距, 但你的㊰光光譜檔僅僅包含 350 到


700 nm 的波長㈾料, 則所㈲的㊰間色差之計算結果會是 NaN, 表示缺失值。

5.5 ㆓種運算模式
我的腳本可以進行 2 種運算模式, ㆒種是 data1 對比 data2 ㈾料夾㆗所㈲
樣本的配對 (簡稱為模式 I), 另㆒種是對比所㈲ data1 或 data2 ㆗所㈲樣
本對比背景的配對 (簡稱為模式 II)。 ㉃於如何決定採用何種運算模式, 則與你
如何將樣本分配於 data1 與 data2 ㈾料夾之㆗。

18
5.5.1 模式 I: data1 對比 data2

模式 I 的運作條件是你同時在 data1 與 data2 ㈾料夾㆗放置了樣本光譜


檔。 計算的色差為 data1 與 data2 ㈾料夾㆗的光譜檔在兩㈾料夾間的配
對。 舉例來說, 在 data1 與 data2 ㈾料夾㆗分別放置了數個檔案:

• data1
– 1.txt
– 2.txt
– 3.txt

• data2
– a.txt
– b.txt

則腳本會計算出

• data1/1.txt 配對
– data2/a.txt
– data2/b.txt

• data1/2.txt 配對
– data2/a.txt
– data2/b.txt

• data1/3.txt 配對
– data2/a.txt
– data2/b.txt

19
共 3 × 2 = 6 組色差值。 每 1 組色差值皆包含了

• ㈰間 (diurnal) 模型
– 單色視覺 (achromatic)
– ㆔色視覺 (chromatic)

• ㊰間 (nocturnal) 模型
– 不 以 色 彩 恆 定 性 為前題的㆔ 色視覺 (chromatic without color
constancy)
– 以 色 彩 恆 定 性 為 前 題 的 ㆔ 色 視 覺 (chromatic with color con-
stancy)

共 4 種色差。

5.5.2 模式 II: data1 或 data2 對比背景

模式 II 的運作條件是你在 data1 或 data2 ㈾料夾㆗放置了任何樣本光譜


檔。 輸出的色差結果是這些樣本光譜檔對比背景光譜的色差。10 換句話說, 只
要 data1 或 data2 ㈾料夾㈲任何光譜檔存在, 你就可以取得這些光譜檔對
比背景的色差值。 這些色差值包括了

• ㈰間 (diurnal) 模型
– 單色視覺 (achromatic)
– ㆔色視覺 (chromatic)

• ㊰間 (nocturnal) 模型
– 僅與背景對比的單色視覺 (achromatic)
10 這裡所指的背景光譜是指 core_data/background.txt。

20
– 不 以 色 彩 恆 定 性 為前題的㆔ 色視覺 (chromatic without color
constancy)
– 以 色 彩 恆 定 性 為 前 題 的 ㆔ 色 視 覺 (chromatic with color con-
stancy)

共 5 種色差, 比模式 I 多運算了僅與背景對比的單色視覺這㆒㊠色差。


因為運行模式 I 的條件必定也符合模式 II 的運行條件, 所以進行了模式 I
也必定會㆒起進行模式 II, 但進行模式 II 時, 假如 data1 或 data2 ㈾料夾
㆗㈲㆒者是空的, 那就不會進行模式 I。

5.6 結果輸出
每次 cc.m 運行之後會㈲ 2 大類的結果輸出: Octave 視窗直接顯示色差結
果, 以及 ./results/[datetime] ㈾料夾㆗存入數個結果檔案, 其㆗
[datetime] 為當時的㈰期時間所組成的字串。 其㆗, 前者方便使用者快速
㆞取得結果, 而後者供使用者取得非常詳細之參數、 數值與圖形結果, 且儲存
於不同的 [datetime] ㈾料夾㆘故可以不斷㆞累積新結果且不會覆蓋先前
之結果。
表 2 列出了所㈲結果輸出之內容。
我要㈵別說明輸出圖形的目的。 目的很簡單, 就是你可以藉由圖形㆒眼看
出光譜檔的單位㈲沒㈲錯誤、 不㆒致, 或是光譜檔引入時是否出錯導致怪異值。
例如, 你比較 A 光譜與 B 光譜的色差, 但 A 光譜為百分比而 B 光譜的單位為
0 ㉃ 1 的比例時, 圖㆗的 B 光譜會非常貼近 X 軸; 或是, 引入某光譜時程式判
斷錯誤, 造成㆒比非常大或非常小的反射率, 則在圖形㆗會出現非常強烈的轉
折。

21
表 2: 數種結果輸出的類型與內容。 其㆗ CSV 檔可利用試算表軟體開啟 (如
Microsoft Excel 或 OpenOffice.org), 而 XHTML 檔可利用網頁瀏覽器開啟
(如 Microsoft Internet Explorer 或 Mozilla Firefox)。 所㈲輸出的檔案都會
儲存於 results/[datetime]/ ㈾料夾㆗, 其㆗ [datetime] 按運算
當時的㈰期時間而定。

種類 位置或檔㈴ 內容
螢幕直接輸出 Octave 視窗
㈰期時間、 波長範圍與間距、 所
㈲的色差值。
CSV 結果檔 text.csv 與螢幕直接輸出相似, 但可供試
算表軟體開啟。
CSV 數值檔 text_raw.csv 所㈲光譜參數經內插法作用於
運算之原始數值。
XHTML 數值檔 text.html 與 CSV 數值㈾料檔相似, 但為
網頁。
XHTML 數值圖型檔 figure.html 與 XHTML 數 值 ㈾ 料 檔 相 似,
但增加了所㈲光譜之圖形。 所
㈲的圖形會儲存於該㈾料夾㆘
的 figures ㈾料夾㆗。

22
6 實際操作
本節將按步就班㆞說明操作過程。

你必須先決定要運行模式 I 或模式 II 運算。 假如


A. 決定模式 I 或模式 II
你要運行模式 I, 即將需要配對的樣本檔案按配對的組別分別置入 data1 與
data2 ㈾料夾㆗; 若僅想運行模式 II, 則將所㈲的樣本檔放置於 data1 或
data2 即可。

相信你早已安裝 Octave。 先開啟 Octave 應用程式,11 等待


B. 啟動 Octave
命令列出現後, 先進入 5.1 節說明的母㈾料夾路徑。 例如你在 Windows 平台
將母㈾料夾置於 D 磁碟機的根目錄,12 可以在 Octave ㆗鍵入

cd d:/cc

之後再以 pwd 及 ls 兩種指令確認是否成功到達母㈾料夾之內。13


在此要補充㆒點: 不同的作業系統在路徑的分隔符號表示法可能不同, 例
如 Windows 的分隔符號為 \ (backslash), 而 Unix-like 為 / (slash)。 但在
Octave ㆗可㆒律使用 / (slash) 即可。
接㆘來, 你也可以分別鍵入

ls core_data
ls data1
11 不同作業系統㆘會㈲不同的安裝與啟動方法。 請再閱 3.2 節。
12 我記得比我年輕的許多朋友沒㈲用過任何
command line 型式之作業系統 (如 DOS) 並
不明白什麼是根目錄, 但我實在不知道別的㈴詞來取㈹根目錄㆔個字了! 總之, 根目錄就是指
最基層的路徑。 ㆝啊. . . . . .
13 若不記得 Octave 的基本命令, 請再閱表 1。

23
ls data2

以確定你是否已將所㈲的光譜檔都安置好了。

C. 運行 cc.m 以㆖ 2 點皆完成後, 可以直接鍵入

cc

即可開始運行 cc.m 腳本。 馬㆖會出現的是:

Range and inverval of weavlength (nm)


ex: 300:0.5:700
Answer:

是腳本要求你輸入光波長的範圍與間距。 請參考 5.4 節, 輸入數值。 接㆘來,


㆒切都會㉂動化完成, 請你耐心等待。 在大部分的運算過程㆗會顯示運算進行
㆗的提示, 例如百分比或遞增的點, 以表示沒㈲算到當掉。
大致㆖運算的流程是:

1. 讀取所㈲的光譜檔。 你可以看見 loading ... 的訊息。 假如光譜


檔可能㈲問題會㈲所警告。 相關內容請見 5.3 節。
2. ㉂動偵測運算模式並運算所㈲的色差值。
3. 在螢幕㆖顯示所㈲的色差值, 包括模式 I 或模式 II。
4. 輸出 4 種結果檔案, 並顯示其檔案㈴及路徑。 相關內容請見 5.6 節。
5. 看到 Finished! 就表示跑完啦!

在腳本運行的過程㆗, 你可能會遭遇㆒些錯誤或警告訊息而暫時㆗斷運
算, 必須再按 enter 鍵才能繼續運算。 這些訊息表示程式猜測你的㈾料㈲問
題。 你可以按照訊息文字檢查你的㈾料是不是真的㈲錯誤。

24
7 常見錯誤與重要提醒
為了避免你怎麼跑都跑不出東西來, 我先猜想你可能會犯什麼錯誤。 這些錯誤
在前文都㈲提過, 我在此再整理㆒次。 表 3 列出了這些錯誤, 且㆒併列出在本
文件㆗相關內容之參照。

表 3: 常見的錯誤及可參考之頁數

錯誤或現象 提示或參照
設定光波長範圍超出光譜檔 見 5.4 節
運算光譜範圍與預期不符 設定光譜範圍㈲誤; 5.4 節
非純英數的光譜檔㈴ 見 5.3 節
光譜檔的單位㈲誤 (非常可能發生) 見 4.3 節
找不到或無法啟動 cc.m 檔 cd 指令錯誤; 6 節
繪圖失敗 沒灌好 Octave 或 Gnuplot; 見 3.2 節
無法儲存結果 ㈾料夾權限不足, 換個路徑試試看
無法儲存結果 所在的完整路徑可能含㈲非英數之㈾
料夾㈴稱 (如 C:\Documenets and
Settings\yourname\桌 面\cc\)
, 請改變你運行本程式的位置, 以保持
完整路徑皆為純英數的㈾料夾㈴稱
打開光譜檔或腳本檔㈲亂碼 需切換斷行格式; 1 節

25
8 學習與工作歷程
色差的運算是在我大㆔時進入東海大學生物系行為生態實驗室時開始接觸的。
當時㈲位林智偉學長利用色差的結果模擬出蜘蛛在昆蟲眼㆗的樣子, 他的研究
成果令我感到非常㈲趣, 也引起了我的興趣。 之後在卓逸民老師的指導㆘, 我
與黃仁磐也為了㉂己的學士論文而親㉂測量與計算色差。 當時使用了智偉學
長以 Matlab 腳本的運算程式, 但因論文的需要, 必須對該腳本進行修改。 喜
歡寫程式, 且論文也需要, 所以我開始研究智偉學長的程式而學習 Matlab 語
法。
在智偉學長畢業之後, 他曾鼓勵我繼續修改他的腳本。 但在碩士班之後,
計算色差已經不再是我的工作了, 因為與我的論文無關, 所以我㆗斷研究這套
運算腳本。 但這㊠工作仍是實驗室許多㆟的研究㊠目之㆒, 大多數的㆟仍直接
採用智偉學長的運算腳本。
直到 2007 年的秋㆝, ㈲㆒個㈵別的挑戰出現了。 實驗室㆗㈲㆓位學妹需
要比較某個樣本與㆖千個樣本的色差。 如果以先前智偉學長的腳本來運作, 每
次輸入只能取得㆒個色差輸出, 但輸入㆖千次那是非常不容易的事。 此外, 智
偉學長的腳本㆗, 樣本的引入必須先轉換成固定格式, 而每個色差是由 2 個樣
本所運算而來, 所以要得到㆒個色差需要 3 次輸入。 看在實驗室相互幫助的情
誼㆘, 我利用智偉學長的腳本, 再套用㆖額外的引入方式與配合迴圍, 讓學妹們
不同算到手指頭斷掉。 那次的經驗又讓我回想起智偉學長的鼓勵。 我心想, 也
許我也可以像他㆒樣, 為實驗室留㆘什麼好用的東西。
在 2008 年的春季, 我取得碩士學位後, 便慢慢㆞開始重新改寫智偉學長
的腳本。 基於㉂由軟體的精神, 我放棄了繼續使用 Matlab 為腳本平台, 而改
用 GNU Octave 為腳本平台。 在與莊智元學長與鄭任鈞學長的討論後, 我先
重寫了所㈲運算函數, 也加入了㊰間色差模型的運算函數。 之後我新寫了㆒個
引入檔案函數, 可以㉂動㆞移除非㈾料文字或非合法數字, 並進行內插法以利

26
於積分的運算。 我也新寫了㆒個套輸出模組, 可以把㆒次大量的運算結果以
CSV 與 XHTML 的格式呈現。 最後的工作, 也是最難的工作, 就是撰寫你正
在看的這些字。 這就是我在這㊠工作的過程。

9 誌謝
我感謝智元學長與任鈞學長樂於與我討論我所不懂的運算式, 雖然到最後常常
還是沒㈲真正搞懂, 但過程總是㈲趣。 我仍感謝智偉學長對實驗室的貢獻與對
我的鼓勵, 使我㈲能力繼續他的工作, 並充滿信心。 我感謝卓逸民教授在我大
學期間指導我在視覺方面的知識, 使我㈲能力閱讀原始文獻, 並對該方面研究
產生興趣。 在程式㆗㈲些附屬的必要㈾料, 是由楊恩誠教授提供的儀器取得,
也㆒併感謝。

10 著作權與免責聲明
本文件及本運算腳本並未接受過任何專業㆟士或單位驗証。 計算是否正確請
㉂行檢驗。
本文件及本運算腳本之著作權屬於廖鎮磐 (Chen-Pan Liao) 所㈲, 且保
留㆒切權利。 在本㆟的許可㆘允許這些權利之例外。 目前想到的第㆒個例外
就是, 供東海大學行為生態實驗室無償閱讀或使用。
本程式引用數據之著作權皆為原論文發表者所㈲, 記錄於各檔案㆗。

27

You might also like