OpenCV与图像处理学习十五——LBP纹理特征(含代码)
OpenCV與圖像處理學(xué)習(xí)十五——LBP紋理特征(含代碼)
- 一、LBP介紹
- 二、LBP原理
- 三、代碼應(yīng)用
一、LBP介紹
LBP(Local Binary Pattern, 局部二值模式) , 是一種用來描述圖像局部紋理特征的算子; 它具有旋轉(zhuǎn)不變性和灰度不變性等顯著的優(yōu)點(diǎn);
作者: T. Ojala, M.Pietik?inen, 和 D. Harwood ;
提出時(shí)間: 1994年
二、LBP原理
LBP算子定義在一個(gè) 3 × 3 的窗口內(nèi), 以窗口中心像素為閾值, 與相鄰的8個(gè)像素的灰度值比較, 若周圍的像素值大于中心像素值, 則該位置被標(biāo)記為1; 否則標(biāo)記為0。如此可以得到一個(gè)8位二進(jìn)制數(shù)(通常還要轉(zhuǎn)換為10進(jìn)制, 即LBP碼, 共256種) , 將這個(gè)值作為窗口中心像素點(diǎn)的LBP值, 以此來反應(yīng)這個(gè)3× 3區(qū)域的紋理信息。
用數(shù)學(xué)公式表示:
其中, p表示 3 × 3 窗口中除中心像素點(diǎn)外的第p個(gè)像素點(diǎn);I( c )表示中心像素點(diǎn)的灰度值, I( p )表示領(lǐng)域內(nèi)第p個(gè)像素點(diǎn)的灰度值;s(x)公式如下:
三、代碼應(yīng)用
import cv2 import numpy as npdef LBP(src):''':param src:灰度圖像:return:'''height = src.shape[0]width = src.shape[1]dst = src.copy()lbp_value = np.zeros((1, 8), dtype=np.uint8)# print(lbp_value)neighbours = np.zeros((1, 8), dtype=np.uint8)# print(neighbours)for x in range(1, width - 1):for y in range(1, height - 1):neighbours[0, 0] = src[y - 1, x - 1]neighbours[0, 1] = src[y - 1, x]neighbours[0, 2] = src[y - 1, x + 1]neighbours[0, 3] = src[y, x - 1]neighbours[0, 4] = src[y, x + 1]neighbours[0, 5] = src[y + 1, x - 1]neighbours[0, 6] = src[y + 1, x]neighbours[0, 7] = src[y + 1, x + 1]center = src[y, x]for i in range(8):if neighbours[0, i] > center:lbp_value[0, i] = 1else:lbp_value[0, i] = 0lbp = lbp_value[0, 0] * 1 + lbp_value[0, 1] * 2 + lbp_value[0, 2] * 4 + lbp_value[0, 3] * 8 \+ lbp_value[0, 4] * 16 + lbp_value[0, 5] * 32 + lbp_value[0, 6] * 64 + lbp_value[0, 7] * 128# print(lbp)dst[y, x] = lbpreturn dstimg = cv2.imread('image/people.jpg', 0) print(img.shape) cv2.imshow('src', img) cv2.waitKey(0) cv2.destroyAllWindows() new_img = LBP(img)cv2.imshow('dst', new_img) cv2.waitKey(0) cv2.destroyAllWindows()輸入的圖像(灰度變化后的):
LBP特征變化后的結(jié)果:
ps:這個(gè)特征提取的過程稍微有點(diǎn)慢。。。
總結(jié)
以上是生活随笔為你收集整理的OpenCV与图像处理学习十五——LBP纹理特征(含代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC创建DLL动态链接库及其调用
- 下一篇: 实现两个点集的欧式距离和cos距离和索引