感覺系統/計算機模型/視覺資訊處理的描述性模擬
本節將概述早期視覺系統各級處理的模擬。利用MATLAB及其工具箱來實現視覺系統功能的再現。之前已討論過早期視覺系統完成的處理,可將其與以下示意圖中所述的一些功能聯絡起來。在(Cormack 2000)中可以找到對影像處理的良好描述。
如上圖概述所示,必須考慮影像處理的不同階段,才能模擬視覺系統對刺激的響應。因此,下一節將簡要討論影像處理。但首先,我們將重點討論感覺器官元件的模擬。
平均眼睛的角膜前曲率半徑為 = 7.8 毫米,房水的折射率為 1.336。眼睛的長度為 = 24.2 毫米。虹膜近似扁平,虹膜邊緣(也稱為角膜緣)的半徑為 = 5.86 毫米。
眼球的光學特性由其二維空間衝激響應函式(點擴充套件函式(PSF))決定。
其中 是影像中心弧分的徑向距離。
顯然,對給定數字影像的影響取決於該影像與您眼睛的距離。作為一個簡單的佔位符,用高 30 且標準差為 1.5 的高斯濾波器替換此濾波器。
在一維中,高斯函式由以下公式描述:

忽略以下因素:
- 時間響應
- 波長效應(特別是對於錐體細胞)
- 虹膜的張開
- 光感受器的取樣和分佈
- 光敏色素的漂白
我們可以用**高斯差**(DOG,維基百科 [1])近似神經節細胞的響應。
Python 實現的原始碼可在 [1] 中找到。
的值 和 的比例約為 1:1.6,但隨偏心率而變化。對於小細胞(或 P 細胞),感受野大小(RFS)約為
而對於 M 細胞,約為
其中 RFS 以弧分表示,偏心率以從中央凹中心到視網膜的距離(毫米)表示(Cormack 2000)。
同樣忽略時間特性,初級視覺皮層 (V1) 中簡單細胞的活動可以用 Gabor 濾波器(維基百科 [2])建模。Gabor 濾波器是一種線性濾波器,其衝激響應由諧波函式(正弦函式)乘以高斯函式定義。高斯函式使諧波函式的幅度遠離原點而減小,但在原點附近,諧波函式的性質占主導地位。
其中
以及
在這個方程中, 代表餘弦因子的波長, 代表 Gabor 函式(維基百科 [3])平行條紋的垂直方向, 是相位偏移, 是高斯包絡的 sigma,而 是空間縱橫比,並指定了 Gabor 函式支援的橢圓率。
簡單細胞感受野的大小取決於其相對於中央凹的位置,但不像視網膜神經節細胞那樣嚴格。最小的視野,位於中央凹及其附近,約為四分之一度乘四分之一度,中心區域只有幾分鐘的弧度(與視網膜神經節細胞中最小的感受野中心的直徑相同)。在視網膜周邊,簡單細胞感受野可以達到 1 度乘 1 度。[2].
Gabor 類函式自然而然地出現,僅僅來自日常場景的統計資料[3]。一個例子是,即使是簡單影像的統計資料也能導致 Gabor 類感受野的出現,用 Python 寫的例子在 [4] 中給出;用 Gabor 函式過濾影像的效果的(Python)演示可以在 [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 種不同的灰度顏色的問題。
表示彩色影像比表示灰度影像只稍微複雜一些。你只需要知道,計算機使用三種主色紅色、綠色和藍色的加色混合來工作。這些就是所謂的 RGB 顏色。
這些影像也是透過畫素儲存的。但現在每個畫素必須知道 3 個介於 0 和 256 之間的值,對應每種顏色 1 個值。因此現在我們可以表示 2563= 16,777,216 種不同的顏色。類似於灰度影像,這裡也同樣適用,沒有顏色意味著黑色,所有顏色都存在意味著白色。也就是說,顏色 (0,0,0) 是黑色,而 (0,0,255) 意味著藍色,(255,255,255) 是白色。
警告 - 描述二維空間中點的位置有兩種常見的不同方法:1) x/y 表示法,其中 x 通常指向左側;2) 行/列方向。仔細注意描述你的資料時使用的是哪種座標,因為這兩種描述方式不一致!
在許多技術應用中,我們發現了一些基本的基底,我們可以用它輕鬆地描述特徵。在 1 維情況下,濾波器並不是什麼大問題,因此我們可以使用這些濾波器來改變影像。所謂的“Savitzky- Golay 濾波器”可以平滑輸入訊號。該濾波器由 Abraham Savitzky 和 Marcel J. E. Golay 在 1964 年描述。它是一個脈衝響應濾波器(IR)。
為了更好地理解,讓我們看一個例子。在 1 維情況下,我們通常處理向量。我們稱其中一個給定的向量為 x,它具有以下形式:。我們的目的是平滑這個向量 x。為此,我們只需要另一個向量 ,我們稱這個向量為權重向量。
有了 ,我們現在就得到了一個平滑後的向量 y。這個向量比之前的向量更平滑,因為我們只儲存了向量中幾個元素的平均值。這意味著新找到的向量元素取決於要平滑的元素左右兩邊的幾個元素。這種方法的一個主要缺點是,新找到的向量 y 只有 n-m 個元素,而不是原始向量 x 的 n 個元素。
繪製這個新向量將導致與之前相同的函式,只是振幅更小。因此沒有資料丟失,但我們有更少的波動。
從 1 維情況到 2 維情況的轉換是透過簡單地將向量轉換為矩陣來實現的。如前所述,對於計算機或 MATLAB 等軟體工具而言,灰度影像無非就是一個充滿自然數(通常介於 0 到 255 之間)的巨大矩陣。
權重向量現在是權重矩陣。但我們仍然透過將不同的矩陣元素乘積加起來來使用濾波器。
對於前面提到的線性濾波器,它們是可交換的。引用維基百科的描述:如果滿足以下條件,則稱 x 在 ∗ 下面與 y 可交換:
換句話說,使用多少個不同的線性濾波器以及以何種順序使用並不重要。例如,如果將 Savitzky-Golay 濾波器應用於一些資料,然後使用第二個 Savitzky-Golay 濾波器來計算一階導數,那麼結果與反轉濾波器順序是一樣的。它甚至適用,即存在一個濾波器可以實現與應用兩個濾波器相同的效果。
相比之下,影像上的形態學操作是非線性操作,最終結果取決於執行順序。如果我們考慮任何影像,它都是由具有 xij 值的畫素定義的。此外,該影像被認為是黑白影像,因此我們有
為了定義形態學操作,我們必須設定一個結構元素 SE。例如,一個 3x3 的矩陣作為影像的一部分。
腐蝕 E 的定義如下
也就是說,如果結構元素 M 中的 **任何** 畫素值為 0,則腐蝕操作將 M 中特定畫素的值設為零。否則 E(M) = 1。
對於 **膨脹** 操作 D,如果 SE 中的 **任何** 值為 1,則 M 的膨脹結果 D(M) 被設為 1。
- .
膨脹和腐蝕的組合:影像的開運算和閉運算
[edit | edit source]膨脹和腐蝕有兩種組合。一種稱為 **開運算**,另一種稱為 **閉運算**。它們分別表示:
參考文獻
[edit | edit source]- ↑ T. Haslwanter (2012). "Mexican Hat Function [Python]". private communications.
- ↑ David, Hubel (1988). Eye, Brain, and Vision. Henry Holt and Company. Retrieved 2014-08-08.
- ↑ Olshausen,B.A. and Field,D.J. (1996). "Emergence of simple-cell receptive field properties by learning a sparse code for natural images". Nature. 381 (June 13): 607–609.
{{cite journal}}: CS1 maint: multiple names: authors list (link) - ↑ scikits-image 開發團隊 (2012). "從 SimpleIimage 中出現的 Gabor 類函式 [Python]".
- ↑ Thomas Haslwanter (2012). "Gabor 濾波器在影像中的演示應用 [Python]".



