感覺系統/計算機模型/視覺資訊處理的描述性模擬
在本節中,將概述早期視覺系統水平進行的處理模擬。為了再現視覺系統的活動,實現將使用 MATLAB 及其工具箱。之前已討論了早期視覺系統完成的處理,並且可以在以下示意圖概述中將其與它們執行的一些功能結合在一起。在 (Cormack 2000) 中可以找到對影像處理的良好描述。
正如我們在上面概述中看到的,為了模擬視覺系統對刺激的響應,必須考慮影像處理的不同階段。因此,下一節將簡要討論影像處理。但首先,我們將關注感覺器官元件的模擬。
平均眼睛的角膜前曲率半徑為 = 7.8 毫米,水性液體的折射率為 1.336。眼睛的長度為 = 24.2 毫米。虹膜近似扁平,虹膜邊緣(也稱為角膜緣)的半徑為 = 5.86 毫米。
眼球的光學特徵在於其二維空間衝激響應函式,即點擴散函式 (PSF)
其中 是影像中心以弧分計的徑向距離。
顯然,對給定數字影像的影響取決於該影像與您眼睛的距離。作為簡單的佔位符,用高度為 30、標準差為 1.5 的高斯濾波器替換此濾波器。
在一維中,高斯分佈由以下公式描述
神經節細胞的活動
[edit | edit source]
忽略
- 時間響應
- 波長效應(尤其是錐體細胞)
- 虹膜的開口
- 感光受體的取樣和分佈
- 感光色素的漂白
我們可以用高斯差(DOG,維基百科 [1])來近似神經節細胞的響應。
Python 實現的原始碼可在 [1] 中找到。
和 的比率大約為 1:1.6,但會隨著偏心率的變化而變化。對於小細胞(或 P 細胞),感受野大小(RFS)大約為
對於 M 細胞大約為
其中 RFS 以角分表示,偏心率以從中央凹中心到該點的毫米距離表示(Cormack 2000)。
初級視覺皮層(V1)中簡單細胞的活動
[edit | edit source]再次忽略時間屬性,初級視覺皮層(V1)中簡單細胞的活動可以用 Gabor 濾波器(維基百科 [2])來模擬。Gabor 濾波器是一種線性濾波器,其衝激響應由一個諧波函式(正弦波)乘以一個高斯函式定義。高斯函式導致諧波函式的振幅遠離原點而衰減,但在原點附近,諧波函式的特性占主導地位。
其中
和
在這個等式中, 代表餘弦因子的波長, 代表 Gabor 函式(維基百科 [3])平行條紋法線的方向, 是相位偏移, 是高斯包絡的 sigma, 是空間縱橫比,指定 Gabor 函式的支援的橢圓率。
簡單細胞感受野的大小取決於它相對於中央凹的位置,但不像視網膜神經節細胞那樣嚴格。最小的感受野,位於中央凹及其附近,大約為四分之一度乘四分之一度,中心區域小至幾分鐘的弧度(與視網膜神經節細胞中最小的感受野中心的直徑相同)。在視網膜外圍,簡單細胞感受野可以達到大約 1 度乘 1 度。 [2].
Gabor 函式自然產生,僅僅源於日常場景的統計資料 [3]. 一個例子說明即使一個簡單影像的統計資料也可以導致 Gabor 類似感受野的出現,用 Python 編寫的,在 [4] 中展示;以及 (Python-) 使用 Gabor 函式對影像進行濾波效果的演示可以在 [5] 中找到。

這是一個在 MATLAB 中實現的示例
function gb = gabor_fn(sigma,theta,lambda,psi,gamma)
sigma_x = sigma;
sigma_y = sigma/gamma;
% Bounding box
nstds = 3;
xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
xmax = ceil(max(1,xmax));
ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
ymax = ceil(max(1,ymax));
xmin = -xmax;
ymin = -ymax;
[x,y] = meshgrid(xmin:0.05:xmax,ymin:0.05:ymax);
% Rotation
x_theta = x*cos(theta) + y*sin(theta);
y_theta = -x*sin(theta) + y*cos(theta);
gb = exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).* cos(2*pi/lambda*x_theta+psi);
end
等效的 Python 實現將是
import numpy as np
import matplotlib.pyplot as mp
def gabor_fn(sigma = 1, theta = 1, g_lambda = 4, psi = 2, gamma = 1):
# Calculates the Gabor function with the given parameters
sigma_x = sigma
sigma_y = sigma/gamma
# Boundingbox:
nstds = 3
xmax = max( abs(nstds*sigma_x * np.cos(theta)), abs(nstds*sigma_y * np.sin(theta)) )
ymax = max( abs(nstds*sigma_x * np.sin(theta)), abs(nstds*sigma_y * np.cos(theta)) )
xmax = np.ceil(max(1,xmax))
ymax = np.ceil(max(1,ymax))
xmin = -xmax
ymin = -ymax
numPts = 201
(x,y) = np.meshgrid(np.linspace(xmin, xmax, numPts), np.linspace(ymin, ymax, numPts) )
# Rotation
x_theta = x * np.cos(theta) + y * np.sin(theta)
y_theta = -x * np.sin(theta) + y * np.cos(theta)
gb = np.exp( -0.5* (x_theta**2/sigma_x**2 + y_theta**2/sigma_y**2) ) * \
np.cos( 2*np.pi/g_lambda*x_theta + psi )
return gb
if __name__ == '__main__':
# Main function: calculate Gabor function for default parameters and show it
gaborValues = gabor_fn()
mp.imshow(gaborValues)
mp.colorbar()
mp.show()
影像處理
[edit | edit source]一個重要的技術工具是瞭解計算機如何處理影像。我們必須瞭解如何編輯影像以及我們有哪些技術可以重新排列影像。
影像表示
[edit | edit source]灰度
[edit | edit source]
對於計算機來說,影像只不過是一堆小方塊。這些方塊被稱為“畫素”。在灰度影像中,每個畫素都帶有一個數字 n,通常是 。這個數字 n 代表了影像中該方塊的精確顏色。這意味著,在灰度影像中,我們可以使用 256 種不同的灰度,其中 255 代表白色點,0 代表該方塊是黑色。說實話,我們甚至可以使用超過 256 種不同的灰度。以這種方式,每個畫素使用正好 1 個位元組(或 8 位)的記憶體來儲存。(由於計算機的二進位制系統,它持有:28=256)如果你認為在你的影像中需要更多不同的灰度,這不是問題。你只需使用更多記憶體來儲存圖片即可。但請記住,對於大型影像來說,這可能是一個艱鉅的任務。此外,你經常會遇到這樣的問題,你的感測裝置(例如你的顯示器)無法顯示超過 256 種不同的灰度顏色。
顏色
[edit | edit source]表示彩色影像比灰度影像只複雜一點點。你只需要知道計算機使用三種主要顏色紅色、綠色和藍色的加色混合。這就是所謂的 RGB 顏色。
這些影像也是由畫素儲存的。但現在每個畫素必須知道 3 個 0 到 256 之間的值,每種顏色 1 個值。因此,我們現在有 2563= 16,777,216 種不同的顏色可以表示。與灰度影像類似,這裡也成立,沒有顏色意味著黑色,所有顏色都意味著白色。也就是說,顏色 (0,0,0) 是黑色,而 (0,0,255) 意味著藍色,(255,255,255) 是白色。
方向
[edit | edit source]警告 - 有兩種常見的、但不同的方法來描述二維空間中點的定位:1) x/y 符號,x 通常指向左側 2) 行/列方向 請仔細注意你使用哪種座標來描述你的資料,因為這兩種描述不一致!
影像濾波
[edit | edit source]一維濾波器
[edit | edit source]在許多技術應用中,我們發現一些簡單的基底,我們可以很容易地用它來描述特徵。在一維情況下,濾波器並不是什麼大問題,因此我們可以使用這些濾波器來改變影像。所謂的“Savitzky- Golay 濾波器”允許平滑傳入的訊號。該濾波器由 Abraham Savitzky 和 Marcel J. E. Golay 於 1964 年描述。它是一個衝激響應濾波器 (IR)。
為了更好地理解,讓我們看一個例子。在 1 維情況下,我們通常處理向量。我們有一個給定的向量,稱為 x,它包含:。我們的目的是平滑這個向量 x。為此,我們只需要另一個向量 ,這個向量我們稱為權重向量。
使用 ,我們現在得到了一個平滑的向量 y。這個向量比之前的向量更平滑,因為我們只儲存了向量中幾個元素的平均值。這意味著新找到的向量元素依賴於要平滑的元素左右的幾個元素。這種方法的一個主要缺點是,新找到的向量 y 只有 n-m 個元素,而不是原始向量 x 的 n 個元素。
繪製這個新向量將導致與之前相同的函式,只是幅度更小。因此沒有資料丟失,但波動更小。
2D 濾波器
[edit | edit source]從 1 維情況到 2 維情況的轉換是透過簡單地將向量轉換成矩陣來實現的。如前所述,對於計算機或像 MATLAB 這樣的軟體工具,灰度影像不過是一個充滿了自然數(通常在 0 到 255 之間)的巨大矩陣。
權重向量現在變成了權重矩陣。但我們仍然透過將不同的矩陣元素乘積相加來使用濾波器。
膨脹和腐蝕
[edit | edit source]對於前面看到的線性濾波器,它們是可交換的。引用維基百科:如果 x 與 y 在 ∗ 下滿足:
換句話說,使用多少個不同的線性濾波器以及使用順序並不重要。例如,如果對一些資料應用一個 Savitzky-Golay 濾波器,然後應用另一個 Savitzky-Golay 濾波器來計算一階導數,那麼如果濾波器順序顛倒,結果將是一樣的。甚至可以認為,存在一個濾波器,可以實現與應用的兩個濾波器相同的效果。
相反,對影像進行形態學操作是非線性操作,最終結果取決於操作順序。如果我們將任何影像視為由畫素值 xij 定義的。此外,假設這個影像是一個黑白影像,因此我們有
為了定義形態學操作,我們必須設定一個結構元素 SE。例如,影像中的一個 3x3 矩陣。
腐蝕 E 的定義是
因此,換句話說,如果任何結構元素 M 中的畫素值為 0,則腐蝕操作將 M(M 中的特定畫素)的值設定為 0。否則 E(M)=1
對於膨脹 D,如果 SE 中任何值為 1,則 M 的膨脹 D(M) 被設定為 1。
- .
膨脹和腐蝕的組合:影像的開運算和閉運算
[edit | edit source]膨脹和腐蝕有兩種組合,一種稱為開運算,另一種稱為閉運算。它包含以下內容
參考文獻
[edit | edit source]- ↑ T. Haslwanter (2012). "墨西哥帽函式 [Python]". 私人通訊.
- ↑ David, Hubel (1988). 眼、腦和視覺. 亨利·霍爾特公司. 檢索自 2014-08-08.
- ↑ Olshausen,B.A. 和 Field,D.J. (1996). "透過學習自然影像的稀疏程式碼來獲得簡單細胞感受野特性". 自然. 381 (6 月 13 日): 607–609.
{{cite journal}}: CS1 維護: 多個名稱: 作者列表 (link) - ↑ scikits-image 開發團隊 (2012). "從 SimpleIimage 中出現類 Gabor 函式 [Python]".
- ↑ Thomas Haslwanter (2012). "Gabor 濾波器在影像上的演示應用 [Python]".



