生成紋理演算法
㈠ LBP演算法以及實現
LBP演算法,全稱Local Binary Pattern,是一種能夠描述圖像紋理的演算法,具有旋轉不變性和灰度不變性等優點。本文將介紹最基本的LBP演算法及其擴展。
最基本的LBP演算法與處理圖像的其他演算法相似,通過定義一個基本運算元,將該運算元作用在整張圖像上,通過滑動窗口提取圖像的紋理。原始的LBP運算元定義為3*3的窗口,將中心像素值作為閾值,鄰域像素與閾值比較,若大於等於閾值則標記為1,否則標記為0。演算法規定,從左上角起始,順時針旋轉與閾值比較,得到8位二進制數,將該數轉化為十進制,與8點陣圖像灰度值對應,保存為窗口中心點的像素值。遍歷整張圖像後,得到新紋理圖。
演算法示意圖展示原始圖像窗口內所有點像素值,取中心點作為閾值(如圖所示),進行比較得到二進制數,轉化為十進制保存。最後得到的紋理圖如圖所示,左圖為原始圖像,右圖為紋理圖。
需注意,LBP僅適用於灰度圖。
改進演算法:圓形LBP演算法解決了窗口半徑固定的問題,提供任意大小鄰域,將正方形擴展為圓形,允許任意數量等間隔采樣點。各種運算元如圖所示,左為半徑1、采樣點4的LBP運算元,記作[公式];右為半徑2、采樣點8的LBP運算元,記作[公式]。運算元的半徑和采樣點可任意設定。采樣點計算公式如下,[公式]為第p個采樣點坐標,中心坐標為[公式],p為采樣點編號,P為采樣點總數,R為鄰域半徑。在使用圓形LBP時,需使用雙線性插值法處理非整數坐標點。代碼實現如下。
改進演算法得到不同半徑和采樣點的紋理圖,從上到下分別為半徑1、2、3的運算元,從左到右為采樣點數8、16的運算元。
LBP演算法的旋轉不變性意味著,使用LBP運算元時,通過使每個采樣點作為起始點順時針計算,得到8個二進制數,轉化為十進製取最小值,無論圖片旋轉,得到的LBP值保持不變。但需注意,LBP演算法只具有旋轉不變性,當圖片進行鏡像翻轉時,得到的LBP值會發生變化。