LBP中等价模式即Uniform Pattern为什么是P*(P-1)+2维向量?

LBP算子产生大量二进制模式,导致计算和存储问题。Ojala提出等价模式概念,限制跳变次数不超过两次。LBP(1,8)的等价模式数为58,由P*(P-1)+2计算得出,考虑了跳变次数为0和2的情况,连续0的出现必须是连续的。通过直观统计方法验证了这一规律。" 122604599,9356127,使用frp实现内网穿透,"['网络', '内网穿透', '远程访问', '服务器配置']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       考察LBP算子的定义可以发现,一个LBP算子可以产生不同的二进制模式,对于LBP(RP)将会产生2P种模式。显然,随着领域集内采样点数的增加,二进制模式的种类是急剧增加的。如3×3领域内8个采样点,则得到28种二进制模式;5×5领域内20个采样点,有220=1,048,576种二进制模式;7×7的领域内有36个采样点,则二进制模式的种类达到236,约为687×1010。显然,如此多的二值模式无论对于纹理的提取还是纹理的识别、分类及信息的存取都是不利的。在实际应用中,不仅要求所采用的算子尽量简单,同时也要求计算速度足够快、数据存储量尽量小。而随着模式种类的增加,计算量和数据量也会急剧增加,同时,过多的模式种类对于纹理的表达也是不利的。 

    &

### 据收集 为了构建有效的人脸识别系统,高质量的据集至关重要。通常可以从公开据库获取人脸图像据集,也可以自行采集特定场景下的照片。常用的一些开源人脸库有LFW(Labeled Faces in the Wild)[^1] 和 CelebA等。 ### 特征提取方法概述 #### 局部二值模式 (Local Binary Patterns, LBP) LBP 是一种用于纹理分析的有效算子,在灰度空间和尺度不变性方面表现出色。对于每张输入图片中的像素点与其领域内其他像素的关系进行编码形成特征直方图表示该区域特性. ```python import cv2 from skimage.feature import local_binary_pattern as lbp def extract_lbp(image): radius = 3 n_points = 8 * radius image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) lbp_image = lbp(image_gray, P=n_points, R=radius, method="uniform") hist, _ = np.histogram(lbp_image.ravel(), bins=np.arange(0, n_points + 3), range=(0, n_points + 2)) return hist / sum(hist) # 归一化处理 ``` #### Gabor 滤波器 Gabor 函能够捕捉局部频率成分变化情况,适用于描述自然物体表面结构信息。通过调整参可获得多方向多尺度响应组合成最终表征向量. ```python def build_filters(): filters = [] ksize = 9 for theta in np.arange(0, np.pi, np.pi/4): # 不同情境下角度间隔可能有所不同 kern = cv2.getGaborKernel((ksize,ksize), 4.0, theta, 10.0, 0.5, 0, ktype=cv2.CV_32F) kern /= 1.5*kern.sum() filters.append(kern) return filters def process(img,filters): accum = np.zeros_like(img) for kern in filters: fimg = cv2.filter2D(img,cv2.CV_8UC3,kern) np.maximum(accum,fimg,accum) return accum.flatten() # 将二矩阵展平为一组作为特征向量 ``` #### Haar 特征 Haar-like 特征简单直观地反映了矩形区域内亮度差异状况,常被应用于快速检测任务当中。OpenCV 提供了预训练好的级联分类器可以直接加载使用来进行正面脸部定位. ```python face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') def detect_faces(gray_img): faces = face_cascade.detectMultiScale( gray_img, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) features = [] for (x,y,w,h) in faces: roi = gray_img[y:y+h,x:x+w] feature_vector = haar_feature_extraction_function(roi) # 假设此函已定义好 features.append(feature_vector) return features ``` #### SIFT 描述符 SIFT(Scale-Invariant Feature Transform) 对光照、视角变换具有较强鲁棒性的关键点匹配技术之一。尽管专利保护期满后变得更为普及但仍需注意版权问题. ```python sift = cv2.SIFT_create() def compute_sift_features(image): keypoints, descriptors = sift.detectAndCompute(image,None) if len(keypoints)>0: avg_descriptor = np.mean(descriptors,axis=0).reshape(-1,) # 取平均值简化表达形式 return avg_descriptor.tolist() else: raise ValueError("No keypoint detected.") ``` ### 使用多种机器学习模型评估性能 针对上述四种手工设计的特征表述方式,可以分别采用支持向量机(Support Vector Machine)、K最近邻(K-Nearest Neighbors)和支持向量机三种不同的监督式学习算法完成分类工作,并比较它们之间优劣之处: - **SVM**: 支持向量机擅长解决高度线性和非线性分类难题;当样本量较少而属性较多时表现良好; - **KNN**: K近邻法则依赖于实例间的相似程度作出预测决策,易于理解和实现不过效率较低尤其面对大据集时; - **AdaBoost**: 自适应增强是一种集成学习策略,能自动调节弱分类器权重从而提高整体泛化能力。 具体操作流程如下所示: ```python from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble import AdaBoostClassifier from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=.2) scaler = StandardScaler().fit(X_train) scaled_X_train = scaler.transform(X_train) scaled_X_test = scaler.transform(X_test) svm_clf = SVC(kernel='linear', C=1).fit(scaled_X_train, y_train) y_pred_svm = svm_clf.predict(scaled_X_test) print(f"SVM Accuracy: {accuracy_score(y_test, y_pred_svm)}") knn_clf = KNeighborsClassifier(n_neighbors=7).fit(scaled_X_train, y_train) y_pred_knn = knn_clf.predict(scaled_X_test) print(f"KNN Accuracy: {accuracy_score(y_test, y_pred_knn)}") ada_boost_clf = AdaBoostClassifier(n_estimators=100).fit(scaled_X_train, y_train) y_pred_adaboost = ada_boost_clf.predict(scaled_X_test) print(f"AdaBoost Accuracy: {accuracy_score(y_test, y_pred_adaboost)}") ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值