OpenCV与图像处理学习十五——LBP纹理特征(含代码)
生活随笔
收集整理的這篇文章主要介紹了
OpenCV与图像处理学习十五——LBP纹理特征(含代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OpenCV與圖像處理學習十五——LBP紋理特征(含代碼)
- 一、LBP介紹
- 二、LBP原理
- 三、代碼應用
一、LBP介紹
LBP(Local Binary Pattern, 局部二值模式) , 是一種用來描述圖像局部紋理特征的算子; 它具有旋轉不變性和灰度不變性等顯著的優點;
作者: T. Ojala, M.Pietik?inen, 和 D. Harwood ;
提出時間: 1994年
二、LBP原理
LBP算子定義在一個 3 × 3 的窗口內, 以窗口中心像素為閾值, 與相鄰的8個像素的灰度值比較, 若周圍的像素值大于中心像素值, 則該位置被標記為1; 否則標記為0。如此可以得到一個8位二進制數(通常還要轉換為10進制, 即LBP碼, 共256種) , 將這個值作為窗口中心像素點的LBP值, 以此來反應這個3× 3區域的紋理信息。
用數學公式表示:
其中, p表示 3 × 3 窗口中除中心像素點外的第p個像素點;I( c )表示中心像素點的灰度值, I( p )表示領域內第p個像素點的灰度值;s(x)公式如下:
三、代碼應用
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特征變化后的結果:
ps:這個特征提取的過程稍微有點慢。。。
總結
以上是生活随笔為你收集整理的OpenCV与图像处理学习十五——LBP纹理特征(含代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC创建DLL动态链接库及其调用
- 下一篇: 实现两个点集的欧式距离和cos距离和索引