圖像特征,圖像紋理,圖像頻域等多種角度提取圖像的特征。
LBP,局部二值模式,局部特征描述算子,具有很強的紋理特征描述能力,具有光照不變性和旋轉不變性。用python進行簡單的LBP算法實驗:
1 from skimage import data,io 2 import matplot.pyplot as plt 3 import cv2 4 from skimage.feature import local_binary_pattern 5 image = cv2.imread('Lena.jpg') 6 plt.subplot(1,2,2) 7 plt.imshow(image) 8 plt.show(image) 9 radius = 1 10 n_points = radius * 8 11 lbp=local_binary_pattern(image,n_points,radius) 12 plt.inshow(lbp) 13 plt.show(lbp)
(1)LBP旋轉模式不變性
初始的LBP算法不具有旋轉不變性,LBP串的連接順序是固定的,當圖像旋轉后LBP就會發生改變,為了保持旋轉不變性,制定一個規則,計算所有旋轉產生的LBP值,取其中最小的(不知道為什么取最小的而不是最大的)作為該點的LBP值,則無論圖像如何旋轉,最小值始終是不變的,獲得了旋轉不變性。代價是增大了算法的計算量。
(2)LBP等價模式
一個LBP算子可以產生多種不同的二進制模式,如果有P個采樣點,每個采樣點有兩種可能的取值,一個有2^P種模式,不利於分析。使用一種等價模式對LBP算子的模式種類進行降維。Ojala對等價模式的定義,即當某個局部二進制模式所對應的循環二進制數從0到1或從1到0最多有兩次跳變時,該局部二進制模式所對應的二進制就成為一個等價模式類,其他的歸為混合模式類,有兩次跳變的等價模式一個有P*(P-1)種,0次跳變的2種,混合模式類1種,將維數從2*P降為P*(P-1)+3種。
對LBP特征向量進行提取的步驟
1)首先將檢測窗口划分為16*16的小區域(cell)
2)對於每個cell中的一個像素,將相鄰的8個像素的灰度值與其進行比較,若周圍像素值大於中心像素值,則該像素點的位置被標記為1,否則為0.這樣,3*3領域內的8個點經過比較可產生8位二進制數,即得到該窗口中心像素點的LBP值;
3)然后計算每個cell的直方圖,即每個數字出現的頻率,然后對該直方圖進行歸一化處理
4)最后將得到的每個cell的統計直方圖進行連接成一個特征向量,也就是整幅圖的LBP紋理特征向量
然后便可以用SVM或者其他機器學習算法進行分類了。