1. 程式人生 > >【影象特徵提取3】區域性二值模式LBP特徵描述符C++程式碼的實現

【影象特徵提取3】區域性二值模式LBP特徵描述符C++程式碼的實現

/********************************************************************************************************
檔案說明:
        經典LBP特徵的C++程式碼實現
開發環境:
        Win10 + OpenCv2.4.8 + VS2012
時間地點:
        陝西師範大學 2017.3.16
作    者:
        九 月
*********************************************************************************************************/
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

cv::Mat OLBP(cv::Mat& srcImg)
{
	const int iRows = srcImg.rows;
	const int iCols = srcImg.cols;

	cv::Mat resultMat(srcImg.size(),srcImg.type());

	//變數影象,生成LBP特徵
	for(int y = 1;y<iRows-1; y++)
	{
		for(int x = 1;x<iCols-1; x++)
		{
			//定義8鄰域
			uchar cNeighbor[8] = {0};
			cNeighbor[0] = srcImg.at<uchar>(y-1,x-1);
			cNeighbor[1] = srcImg.at<uchar>(y-1,x);
			cNeighbor[2] = srcImg.at<uchar>(y-1,x+1);
			cNeighbor[3] = srcImg.at<uchar>(y,  x+1);
			cNeighbor[4] = srcImg.at<uchar>(y+1,x+1);
			cNeighbor[5] = srcImg.at<uchar>(y+1,x);
			cNeighbor[6] = srcImg.at<uchar>(y+1,x-1);
			cNeighbor[7] = srcImg.at<uchar>(y  ,x-1);
			//當前影象的中心畫素點
			uchar cCenter = srcImg.at<uchar>(y,x);
			uchar cTemp   = 0;
			//計算LBP的值
			for(int k =0;k<8;k++)
			{
				cTemp += (cNeighbor[k]>=cCenter)*(1<<k);           //將1的二進位制數按位左移k位
			}
			resultMat.at<uchar>(y,x) = cTemp;
		}//for x
	}//for y
	return resultMat;
}
int main()
{
	cv::Mat srcImg = cv::imread(".\\images\\crack.jpeg",0);
	if(srcImg.empty())
	{
		std::cout<<"【NOTICE】NO valid inout image was given,please check the inoput image!"<<std::endl;
		std::system("pause");
		return -1;
	}
	cv::Mat resultMat = OLBP(srcImg);
	cv::imshow("srcImg",srcImg);
	cv::imshow("resultMat",resultMat);
	cv::waitKey(0);
	return 0;
}

相關推薦

影象特徵提取3區域性模式LBP特徵描述C++程式碼實現

/******************************************************************************************************** 檔案說明: 經典LBP特徵的C++程式碼實現

影象特徵提取2區域性模式LBP----從原理到實踐

(一)區域性二值模式LBP的簡介           LBP(Local Binary Pattern,區域性二值模式)是一種描述影象區域性紋理的特徵運算元,該運算元是由T.Ojala等人於1994年

openCV學習筆記(十四) —— 人臉識別演算法(3/3)—— 區域性模式LBP

LBP(Local Binary Patterns,區域性二值模式)是提取區域性特徵作為判別依據的。LBP方法顯著的優點是對光照不敏感,但是依然沒有解決姿態和表情的問題。不過相比於特徵臉方法,LBP的識別率已經有了很大的提升。在[1]的文章裡,有些人臉庫的識別率已經達到了

區域性模式LBP-簡單人臉識別(三)

一)區域性二值模式簡介 前面介紹過關於主成分分析法的識別方法,這個方法是選取的整幅影象的主成分分量來作為新的特徵,從某種意義上說這是一種基於全域性特徵的方法。但是一般影象識別中,僅僅使用全域性特徵是不夠的,獲得的識別率較低,更多的時候,表徵一副影象的特徵也缺少不了區域性

人臉表情識別筆記(特徵提取LBP區域性模式)原理及MATLAB程式碼

一:原理部分 LBP(Local Binary Pattern,區域性二值模式)是一種用來描述影象區域性紋理特徵的運算元;它具有旋轉不變性和灰度不變性等顯著的優點。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用

A-劍指offer04-維陣列中的查詢特定數字 python實現

題目描述 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數

區域性模式LBP)理論學習與演算法實現

專案原始碼:https://github.com/zhongqianli/local_binary_pattern 一、概念 區域性二值模式, Local binary patterns, LBP, 一種用於紋理分類的特徵。如果區域性二值模式特徵與方向梯度直方圖結合,則可以在一些

LBP(區域性模式)基礎知識篇

一篇非常好的 關於LBP的入門介紹! 向群主致敬! 另外推薦一篇英文介紹,建議打印出來,沒事翻著讀 LBP(Local Binary Pattern,區域性二值模式)是一種用來描述影象區域性紋理特徵的運算元;它具有旋轉不變性和灰度不變性等顯著的優點。它是首先由T.

Linux下配置檔案讀取操作流程及其C程式碼實現

轉自:http://blog.csdn.net/zhouzhaoxiong1227/article/details/45563263#comments 一、概述 Linux具有免費、可靠、安全、穩定、多平臺等特點,因此深受廣大程式設計師的歡迎。 為了體現軟體產品的靈活性,可新增配置檔案存放某些重要的

《大話資料結構9》—— “叉樹的順序儲存結構”——C++程式碼實現

  順序儲存結構: 二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的結點,並且結點的儲存位置,也就是陣列的下標要能體現結點之間的關秀,比如雙親與孩子的關係,左右結點的兄弟關係。 完全二叉樹: 完全二叉樹由於其結構上的特點,通常採用順序儲存方式儲存。一棵有n個結點的完全二

叉樹的基本操作 C++程式碼實現

首先定義節點 typedef struct BTree { int value; struct BTree *lchild; struct BTree *rchild; }BTree; 前序遞迴建立二叉樹 /* *

影象特徵提取13SIFT原理之KD樹+BBF演算法解析

本文轉載自:http://blog.csdn.NET/luoshixian099/article/details/47606159    繼上一篇中已經介紹了,最後得到了一系列特徵點,每個特徵點對應一個128維向量。假如現在有兩副圖片都已經提取到特徵點,現在要做

影象特徵提取7SURF特徵提取演算法的

本文大量參考了:http://blog.csdn.net/cxp2205455256/article/details/41311013;並且在此部落格的基礎之上,增加了一些新的內容。 一、SURF演算法的概述        SURF,英文的全稱為Speed Up Ro

Python+OpenCV入門學習影象的幾何變換

本篇文章介紹影象處理的幾何變換,幾何變換有平移、縮放、旋轉等。 主要學習resize()、warpAffine()等函式的使用。 環境:Windows 7(64)   Python 3.6    OpenCV3.4.2 一、縮放 1.1 resize()函式介紹 r

深度學習caffe實用工具3筆記25 Windows下caffe中將影象資料集合轉換為DB(LMDB/LEVELDB)檔案格式之convert_imageset

/********************************************************************************************************************************* 檔案說明:

OpenCV3影象處理查詢影象的邊緣 ( findContours()函式詳解 )

void cv::findContours ( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode

日常學習搜索/遞歸codevs2802 的冪次方題解

sni trac mil amp 方法 data font 經典 註意 轉載請註明出處 [ametake版權全部]http://blog.csdn.net/ametake歡迎來看 題目描寫敘述 Description 不論什麽一個正

PostgreSQL-9.6.3使用pg_settings表查看參數的生效條件

intern name 數據庫 查看 context 影響 pre 無需重啟 per PostgreSQL數據庫的配置參數都在postgresql.conf文件中,此文件的目錄為數據庫的數據目錄($PGDATA)。這些參數有些是直接修改就可以生效,有些需要重啟數據庫才能生效

深入Java虛擬機:Class類文件結構

本質 拒絕 處理 implement align 默認值 改變 占用 至少 平臺無關性 Java是與平臺無關的語言,這得益於Java源代碼編譯後生成的存儲字節碼的文件,即Class文件,以及Java虛擬機的實現。不僅使用Java編譯器可以把Java代碼編譯成存儲字節

POI每日題解 #3 OKR-Periods of Words

lan img http class IT 鏈接 tdi names ID 題目鏈接 蒟蒻對kmp了解很淺 然鵝此題很裸 一個位置的i - next[i] 是它的“最小周期” 而“最大周期”就是一直向前找next 找到沒有了 i - next[沒有next的位置]就是該位置