破解大腦視覺抑制:Gabor Patch 的神經學機制與 VR 雙眼分視實作

更新 發佈閱讀 18 分鐘

過去醫學界普遍認為,成年後的大腦視覺皮層發育定型,弱視(Amblyopia)與立體視覺的缺失將無法逆轉。然而,現代視覺科學已證實大腦在成年後依然具備強大的「神經可塑性(Neuroplasticity)」。透過特定的知覺學習(Perceptual Learning),重新喚醒初級視覺皮層(V1)的神經元是完全可行的。

其中,最核心的刺激源便是 Gabor Patch。但許多人嘗試利用 YouTube 上的免費影片進行訓練,卻往往徒勞無功。這並非理論失效,而是影像壓縮演算法摧毀了刺激源的數學精準度。本文將解析 Gabor Patch 的底層運作邏輯,並探討如何結合 Python 與 VR 裝置,建構真正有效的視覺訓練環境。

一、為什麼大腦需要 Gabor Patch?

初級視覺皮層(V1)中的神經元並非對所有視覺訊號都產生同等反應。這些神經元的「感受野(Receptive Field)」對特定的**空間頻率(Spatial Frequency)與方向(Orientation)**具有高度選擇性。

Gabor Patch  是一個數學函數圖形(正弦波乘上高斯包絡線),它的光影漸層與邊緣特徵,完美契合了 V1 神經元的激活條件。透過精準控制 Gabor Patch 的對比度與頻率,並使其產生動態相位偏移,能高強度且持續地刺激特定神經迴路。根據赫布理論(Hebbian Theory),反覆的同步激活將強化突觸連結,進而提升大腦處理視覺邊緣與低對比度訊號的效率。

二、串流媒體的致命傷:壓縮演算法如何抹殺神經可塑性

如果 Gabor Patch 是一把精準的手術刀,那 YouTube 等串流平台的影片壓縮技術就是將其鈍化的砂紙。

無論影片標示為 1080P 還是 4K,只要上傳至串流平台,伺服器必定會進行破壞性壓縮(如 VP9 或 AV1 編碼),以降低頻寬成本。在低位元速率(如 1Mbps)下,會產生以下破壞:

1. 高頻細節抹除: 演算法會優先丟棄高頻空間資訊,導致 Gabor 的銳利邊緣糊化。

2. 區塊效應(Macroblocking): 畫面產生馬賽克方塊與色階斷層,大腦接收到的不再是純粹的數學圖形,而是充滿數位雜訊的錯誤訊號。

視覺訓練的底線在於像素級的絕對精準。充滿雜訊與失真的刺激,不僅無法建立有效的神經連結,甚至可能引發視覺疲勞與反效果。

三、打破抑制:VR 雙眼分視(Dichoptic Vision)的必要性

弱視的核心問題不在眼球,而在大腦。優勢眼會持續「抑制(Suppress)」非優勢眼的視覺訊號。傳統的「遮眼療法」對成年人成效不彰,因為它沒有解決雙眼競爭的問題。

現代臨床與實驗室的最佳實踐,是利用 Meta Quest 3 等 VR 頭戴裝置進行**雙眼分視(Dichoptic Vision)**訓練。透過軟體(如 AmblyoBye 或專屬開發環境),我們能精確控制雙眼的視覺輸入:

• 優勢眼: 僅給予極低對比度的背景或融合鎖(Fusion Lock)。

• 非優勢眼: 給予 100% 高對比度、動態漂移的 Gabor 刺激。

這種人為製造的「對比度失衡」,會強迫大腦同時處理雙眼資訊,從根本上瓦解神經抑制,重建立體視覺(Stereopsis)。

四、硬核實作:拒絕妥協的本機渲染與無損封裝

要達到實驗室等級的刺激,我們必須徹底屏棄串流,轉向「本機渲染」或「無損影片」。

如果使用 Python 自製視覺刺激,核心邏輯是生成 Side-by-Side (SBS) 格式的高解析度矩陣。以下是生成數學上完美 Gabor 的核心代碼:

Python

import numpy as np

# 透過矩陣運算,生成零壓縮失真的 Gabor Patch

def generate_gabor(size, lambda_, theta, sigma, phase, contrast=1.0):

x, y = np.meshgrid(np.arange(-size/2, size/2), np.arange(-size/2, size/2))

x_theta = x * np.cos(theta) + y * np.sin(theta)

y_theta = -x * np.sin(theta) + y * np.cos(theta)

envelope = np.exp(-(x_theta**2 + y_theta**2) / (2 * sigma**2))

sinusoid = np.cos(2 * np.pi * x_theta / lambda_ + phase)

return (envelope * sinusoid * contrast * 127.5 + 128).astype(np.uint8)

這是畫圖的程式碼:

import numpy as np

import matplotlib.pyplot as plt

import cv2



def generate_gabor(size, lambda_, theta, sigma, phase, contrast=1.0):

"""

生成 Gabor Patch 影像矩陣

參數說明:

size : 影像尺寸 (整數,例如 512 代表 512x512 像素)

lambda_ : 空間頻率的波長 (數值越小,條紋越密集)

theta : 條紋的傾斜方向 (弧度,例如 np.pi/4 為 45 度)

sigma : 高斯包絡線的標準差 (控制 Gabor 斑點的擴散範圍與大小)

phase : 相位偏移 (控制波紋的平移)

contrast : 對比度 (0.0 到 1.0)

"""

# 建立 X, Y 座標矩陣

x, y = np.meshgrid(np.arange(-size/2, size/2), np.arange(-size/2, size/2))

# 旋轉座標軸以符合 theta 角度

x_theta = x * np.cos(theta) + y * np.sin(theta)

y_theta = -x * np.sin(theta) + y * np.cos(theta)

# 計算高斯包絡線 (Gaussian Envelope)

envelope = np.exp(-(x_theta**2 + y_theta**2) / (2 * sigma**2))

# 計算正弦波 (Sinusoid)

sinusoid = np.cos(2 * np.pi * x_theta / lambda_ + phase)

# 將兩者相乘,並轉換為 0~255 的灰階影像像素值 (uint8 格式)

return (envelope * sinusoid * contrast * 127.5 + 128).astype(np.uint8)



# --- 實際應用與執行 ---

if __name__ == "__main__":

# 1. 設定 Gabor Patch 的參數

IMAGE_SIZE = 512 # 產生一張 512x512 的影像

WAVELENGTH = 30.0 # 條紋波長

ORIENTATION = np.pi / 4 # 條紋方向 (45度)

SIGMA = 60.0 # 光暈範圍

PHASE = 0.0 # 相位

CONTRAST = 1.0 # 100% 高對比度 (配合文章中提及的非優勢眼刺激)


# 2. 呼叫函式生成影像矩陣

gabor_img = generate_gabor(IMAGE_SIZE, WAVELENGTH, ORIENTATION, SIGMA, PHASE, CONTRAST)


# 3. 使用 matplotlib 將結果顯示出來

plt.figure(figsize=(5, 5))

plt.imshow(gabor_img, cmap='gray', vmin=0, vmax=255)

plt.title(f"Gabor Patch (Theta={ORIENTATION:.2f}, Lambda={WAVELENGTH})")

plt.axis('off') # 隱藏座標軸

plt.show()

這是畫影片的程式碼:

import numpy as np

import cv2

import os



def generate_gabor(size, lambda_, theta, sigma, phase, contrast=1.0):

"""

生成 Gabor Patch 影像矩陣

"""

# 建立 X, Y 座標矩陣

x, y = np.meshgrid(np.arange(-size/2, size/2), np.arange(-size/2, size/2))

# 旋轉座標軸以符合 theta 角度

x_theta = x * np.cos(theta) + y * np.sin(theta)

y_theta = -x * np.sin(theta) + y * np.cos(theta)

# 計算高斯包絡線 (Gaussian Envelope)

envelope = np.exp(-(x_theta**2 + y_theta**2) / (2 * sigma**2))

# 計算正弦波 (Sinusoid)

sinusoid = np.cos(2 * np.pi * x_theta / lambda_ + phase)

# 將兩者相乘,並轉換為 0~255 的灰階影像像素值 (uint8 格式)

return (envelope * sinusoid * contrast * 127.5 + 128).astype(np.uint8)



# --- 實際應用與動態影片生成 ---

if __name__ == "__main__":

# 1. 基本 Gabor 參數

IMAGE_SIZE = 512 # 產生一張 512x512 的影像

WAVELENGTH = 30.0 # 條紋波長

ORIENTATION = np.pi / 4 # 條紋方向 (45度)

SIGMA = 60.0 # 光暈範圍

CONTRAST = 1.0 # 100% 高對比度 (配合文章中提及的非優勢眼刺激)


# 2. 影片參數設定

FPS = 30 # 每秒 30 幀 (幀率)

DURATION = 5 # 影片長度 5 秒

TOTAL_FRAMES = FPS * DURATION

# 為了產生「漂移」效果,我們設定相位隨時間變化的速度

# 這裡設定在 5 秒內完整漂移 4 個週期 (4 * 2*pi)

DRIFT_CYCLES = 4

total_phase_shift = DRIFT_CYCLES * 2 * np.pi

phase_per_frame = total_phase_shift / TOTAL_FRAMES


# 3. 影片寫入器設定 (建立 MP4 檔案)

FILENAME = 'gabor_drifting_base.mp4'

# 定義編碼器。對於一般的 MP4 檔案,'mp4v' 是一個常見的編碼器

fourcc = cv2.VideoWriter_fourcc(*'mp4v')

# 建立 VideoWriter 物件

# 參數說明: 檔名, 編碼器, FPS, 影像尺寸 (寬, 高), 是否為彩色

video_writer = cv2.VideoWriter(FILENAME, fourcc, FPS, (IMAGE_SIZE, IMAGE_SIZE), isColor=False)


print(f"正在生成動態 Gabor 影片: {FILENAME},共 {TOTAL_FRAMES} 幀...")


# 4. 開始執行迴圈,生成每一幀並寫入影片

current_phase = 0.0

for frame_count in range(TOTAL_FRAMES):

# A. 呼叫函式生成該時刻的 Gabor 圖片

gabor_frame = generate_gabor(IMAGE_SIZE, WAVELENGTH, ORIENTATION, SIGMA, current_phase, CONTRAST)

# B. 將圖片寫入影片檔

video_writer.write(gabor_frame)

# C. 更新相位,讓下一幀的紋理產生微小的移動

current_phase += phase_per_frame

# 可選:顯示進度

if (frame_count + 1) % 30 == 0:

print(f"已完成 {frame_count + 1} / {TOTAL_FRAMES} 幀...")


# 5. 釋放資源 (重要:不釋放的話影片檔會損壞無法讀取)

video_writer.release()

print("-" * 30)

print(f"成功!基礎影片已存至: {os.path.abspath(FILENAME)}")


然而,即便用 OpenCV 輸出 MP4,預設編碼仍會產生微小瑕疵。最終的關鍵步驟,是使用 FFmpeg 進行無損封裝,強制給予極高位元速率(例如 -crf 12 視覺無損標準):

Bash

ffmpeg -i Gabor_Base.mp4 -c:v libx264 -preset slow -crf 12 Gabor_Lossless.mp4

將這份絕對銳利、無損的檔案存入 VR 裝置中進行本機播放,並配合正確的分視遮罩機制,才是真正具備神經學意義的視覺訓練。

參考文獻與進階閱讀:

1. Polat, U., et al. (2004). Improving vision in adult amblyopia by perceptual learning. Proceedings of the National Academy of Sciences (PNAS). (探討 Gabor Patch 與知覺學習對成年弱視的顯著改善成效)

2. Hess, R. F., et al. (2010). A new binocular approach to the treatment of amblyopia in adults well beyond the critical period of visual development. Restorative Neurology and Neuroscience. (證實雙眼分視 / Dichoptic 訓練在打破大腦神經抑制上的關鍵作用)

3. Levi, D. M., & Li, R. W. (2009). Perceptual learning as a potential treatment for amblyopia: a mini-review. Vision Research. (回顧知覺學習作為弱視潛在療法的臨床數據與底層機制)



留言
avatar-img
Joey Nan的筆記
5會員
206內容數
看見清晰的未來|一個成人弱視者的自我修復與大腦科學筆記 我是 Joey,一個在生活中不斷嘗試的實驗者。 這個筆記的起點,源於我對**「恢復視力」的一份初心。我嘗試透過 VR 裝置與科學訓練法,重新與我的大腦和雙眼對話。這不僅是一份復健紀錄,更是一次我對神經可塑性**的親身探索。
Joey Nan的筆記的其他內容
2026/03/30
當雙眼裸視勉強觸及 0.9 的視標,且伴隨後腦明顯的緊緻與微酸感時,這並非單純的眼部肌肉疲勞,而是大腦初級視覺皮層(V1)正經歷高強度突觸重塑的直接物理證據。在經歷長期的雙眼視差訓練後,這個現象標誌著神經迴路的重建已跨越硬體連通的關鍵門檻。 本文將結合神經影像學與知覺學習(Perceptual L
2026/03/30
當雙眼裸視勉強觸及 0.9 的視標,且伴隨後腦明顯的緊緻與微酸感時,這並非單純的眼部肌肉疲勞,而是大腦初級視覺皮層(V1)正經歷高強度突觸重塑的直接物理證據。在經歷長期的雙眼視差訓練後,這個現象標誌著神經迴路的重建已跨越硬體連通的關鍵門檻。 本文將結合神經影像學與知覺學習(Perceptual L
2026/03/30
在成人弱視的視覺重建過程中,當訓練進階至強迫雙眼 50%:50% 權重分配時,大腦初級視覺皮層(V1)需要的是絕對純淨、毫無壓縮雜訊的「高頻邊緣訊號」。這意味著必須輸入 20Mbps 以上的高位元率 4K 影片。 然而,實戰中立刻會遭遇技術瓶頸:從 YouTube 下載的高畫質 4K 檔案通常是
2026/03/30
在成人弱視的視覺重建過程中,當訓練進階至強迫雙眼 50%:50% 權重分配時,大腦初級視覺皮層(V1)需要的是絕對純淨、毫無壓縮雜訊的「高頻邊緣訊號」。這意味著必須輸入 20Mbps 以上的高位元率 4K 影片。 然而,實戰中立刻會遭遇技術瓶頸:從 YouTube 下載的高畫質 4K 檔案通常是
2026/03/29
在成人弱視的知覺學習(Perceptual Learning)與 VR 視覺訓練中,決定大腦神經重塑效率的絕對物理指標:總位元速率(Total Bitrate,單位 Mbps)。解析度決定的是畫面的「容器大小」,而位元速率決定的才是每一秒鐘填入容器的「有效資訊密度」。 本文將從神經視覺科學與影像編
2026/03/29
在成人弱視的知覺學習(Perceptual Learning)與 VR 視覺訓練中,決定大腦神經重塑效率的絕對物理指標:總位元速率(Total Bitrate,單位 Mbps)。解析度決定的是畫面的「容器大小」,而位元速率決定的才是每一秒鐘填入容器的「有效資訊密度」。 本文將從神經視覺科學與影像編
看更多