使用lbp方法提取图片特征(python写)

自己根据前人的代码,使用lbp算子提取图片特征,并对其中的部分参数进行了注释。

下面是我的代码示例:

# coding: utf-8
import cv2 as cv
from skimage import feature as skif
import numpy as np

#获取图像的lbp特征
def get_lbp_data(image_path, lbp_radius=1, lbp_point=8):
    # img = utils.change_image_rgb(image_path)
    img = cv.imread(image_path)
    image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 使用LBP方法提取图像的纹理特征.
    #lbp_point:选取中心像素周围的像素点的个数;lbp_radius:选取的区域的半径
    #以下为5种不同的方法提取的lbp特征,相应的提取到的特征维度也不一样
    #'default': original local binary pattern which is gray scale but notrotation invariant
    #'ror': extension of default implementation which is gray scale androtation invariant
    #'uniform': improved rotation invariance with uniform patterns andfiner quantization of the angular space which is gray scale and rotation invariant.
    #'nri_uniform': non rotation-invariant uniform patterns variantwhich is only gray scale invariant
    #'var': rotation invariant variance measures of the contrast of localimage texture which is rotation but not gray scale invariant
    lbp = skif.local_binary_pattern(image, lbp_point, lbp_radius, 'default')
    # 统计图像的直方图
    max_bins = int(lbp.max() + 1)
    #print(max_bins)
    # hist size:256
    hist, _ = np.histogram(lbp, density=True, bins=max_bins, range=(0, max_bins))
    return hist

image_path = 'airplane009.jpg'  #读取图片
feature = get_lbp_data(image_path)  #调用函数
print(feature)

下面是我的部分结果输出:
在这里插入图片描述

大家如果有地信遥感方面的问题需要请教或者有项目需要合作,可以在闲 鱼软件的用户中搜索:遥感GIS工作室,请认准头像,谢谢。

LBP(Local Binary Pattern)是一种用于图像纹理分析的局部特征描述符。LBP算法可以用于图像分类、人脸识别等领域。下面是一个简单的LBP图像特征提取和分类的python代码示例: ```python import numpy as np import cv2 from sklearn.svm import LinearSVC from sklearn.metrics import accuracy_score # 计算LBP特征 def calc_lbp_feature(img): rows, cols = img.shape lbp_feature = np.zeros((rows-2, cols-2)) for i in range(1, rows-1): for j in range(1, cols-1): center = img[i, j] code = 0 code |= (img[i-1, j-1] > center) << 7 code |= (img[i-1, j] > center) << 6 code |= (img[i-1, j+1] > center) << 5 code |= (img[i, j+1] > center) << 4 code |= (img[i+1, j+1] > center) << 3 code |= (img[i+1, j] > center) << 2 code |= (img[i+1, j-1] > center) << 1 code |= (img[i, j-1] > center) << 0 lbp_feature[i-1, j-1] = code return lbp_feature.flatten() # 加载数据集 def load_dataset(): images = [] labels = [] for i in range(1, 41): # 40个人 for j in range(1, 11): # 每个人10张图片 img = cv2.imread(f"att_faces/s{i}/{j}.pgm", cv2.IMREAD_GRAYSCALE) images.append(img) labels.append(i) return images, labels # 提取LBP特征并训练分类器 def train_lbp_classifier(images, labels): data = [] for img in images: feature = calc_lbp_feature(img) data.append(feature) clf = LinearSVC() clf.fit(data, labels) return clf # 测试分类器 def test_lbp_classifier(clf, images, labels): pred_labels = [] for img in images: feature = calc_lbp_feature(img) pred_label = clf.predict([feature])[0] pred_labels.append(pred_label) acc = accuracy_score(labels, pred_labels) print(f"Accuracy: {acc}") if __name__ == "__main__": images, labels = load_dataset() clf = train_lbp_classifier(images, labels) test_lbp_classifier(clf, images, labels) ``` 在这个示例中,我们使用了AT&T人脸数据集中的图像进行训练和测试。在训练过程中,我们提取了每个图像的LBP特征,并使用LinearSVC(线性支持向量机)训练了一个分类器。在测试过程中,我们使用相同的LBP特征来对测试图像进行分类,并计算了分类器的准确率。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值