局部二值樣式
局部二值樣式(Local Binary Pattern, LBP),由 Timo Ojala 與同事於 1990 年代中期開發,是一個非常簡單卻強大的局部紋理描述子,紋理指的是一個區域細緻的表面樣式,例如布料的織紋、木材的紋理或皮膚的毛孔。其直覺是:紋理大致由明暗微區塊的相對排列所定義,而非它們的絕對亮度。所以 LBP 對每個像素問一個純相對的問題:我的鄰居中哪些比我更亮?這個答案,編碼成一個二進位數,就是該像素的局部紋理碼。
基本運算子作用於 3×3 鄰域。以中心像素為門檻,對其周圍 8 個像素中的每一個,若該鄰居大於或等於中心就寫 1,否則寫 0。沿著環以固定順序讀出這 8 個位元,產生一個介於 0 到 255 之間的 8 位元數,就是該像素的 LBP 碼。由於比較純粹相對於中心,這個碼在整個鄰域的任何單調變亮或變暗下都保持不變,這賦予 LBP 對光照的強烈不變性,是一項重大的實務優勢。一個紋理便由這些碼在一個區域上的直方圖來描述:256 個樣式各出現的頻率。
兩項精修讓 LBP 有用得多。第一,圓形推廣在半徑為 R 的圓上取樣 P 個鄰居(在圓沒落在像素中心處對強度做內插),讓運算子能在不同尺度與鄰域大小下捕捉紋理。第二,均勻樣式(uniform pattern)的概念觀察到,絕大多數自然紋理碼沿環最多只含兩次 0 與 1 之間的轉換(這些對應到邊緣、角點、斑點與平坦處);LBP 把所有非均勻樣式歸入單一分格,把直方圖從 256 個分格縮到 59 個,同時保留幾乎全部的鑑別力並增添穩健性。旋轉不變的變體進一步把每個碼旋轉到其最小值來標準化。
LBP 快速(只有比較與直方圖)、對光照穩健且緊湊,這使它長期是紋理分類、臉部表情與人臉辨識(經典做法是把臉分成細胞網格、為每個細胞計算 LBP 直方圖再串接)以及醫學影像分析的愛用工具。時空延伸如 LBP-TOP 處理影片,而 CLBP 及其他變體除了符號還編碼幅度。和其他手工描述子一樣,LBP 在高準確度任務上大致被學習式 CNN 特徵超越,但它仍是一個強而可解釋、低計算量的基準線,在嵌入式與資源受限的場景中仍常見。
一個中心值為 50、鄰居為 [60, 40, 55, 30, 70, 45, 80, 20](自左上順時針)的 3×3 區塊,變成位元 [1,0,1,0,1,0,1,0]。依序讀出即二進位 10101010 = 170,這就是記入該像素直方圖分格的 LBP 碼。