日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LBP特征提取算法

發布時間:2023/12/31 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LBP特征提取算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:http://blog.csdn.net/quincuntial/article/details/50541815

一、LBP特征的背景介紹

LBP指局部二值模式,英文全稱:Local Binary Pattern,是一種用來描述圖像局部特征的算子,LBP特征具有灰度不變性和旋轉不變性等顯著優點。它是由T. Ojala, M.Pietik?inen, 和 D. Harwood [1][2]在1994年提出,由于LBP特征計算簡單、效果較好,因此LBP特征在計算機視覺的許多領域都得到了廣泛的應用,LBP特征比較出名的應用是用在人臉識別和目標檢測中,在計算機視覺開源庫OpenCV中有使用LBP特征進行人臉識別的接口,也有用LBP特征訓練目標檢測分類器的方法,Opencv實現了LBP特征的計算,但沒有提供一個單獨的計算LBP特征的接口。

二、LBP特征的原理

1、原始LBP特征描述及計算方法

原始的LBP算子定義在像素3*3的鄰域內,以鄰域中心像素為閾值,相鄰的8個像素的灰度值與鄰域中心的像素值進行比較,若周圍像素大于中心像素值,則該像素點的位置被標記為1,否則為0。這樣,3*3鄰域內的8個點經過比較可產生8位二進制數,將這8位二進制數依次排列形成一個二進制數字,這個二進制數字就是中心像素的LBP值,LBP值共有28” role=”presentation” style=”position: relative;”>2828種可能,因此LBP值有256種。中心像素的LBP值反映了該像素周圍區域的紋理信息。
備注:計算LBP特征的圖像必須是灰度圖,如果是彩色圖,需要先轉換成灰度圖。
上述過程用圖像表示為:


將上述過程用公式表示為:

(xc,yc)” role=”presentation” style=”position: relative;”>(xc,yc)(xc,yc)為符號函數

原始LBP特征計算代碼(Opencv下):

//原始LBP特征計算 template <typename _tp> void getOriginLBPFeature(InputArray _src,OutputArray _dst) {Mat src = _src.getMat();_dst.create(src.rows-2,src.cols-2,CV_8UC1);Mat dst = _dst.getMat();dst.setTo(0);for(int i=1;i<src.rows-1;i++){for(int j=1;j<src.cols-1;j++){_tp center = src.at<_tp>(i,j);unsigned char lbpCode = 0;lbpCode |= (src.at<_tp>(i-1,j-1) > center) << 7;lbpCode |= (src.at<_tp>(i-1,j ) > center) << 6;lbpCode |= (src.at<_tp>(i-1,j+1) > center) << 5;lbpCode |= (src.at<_tp>(i ,j+1) > center) << 4;lbpCode |= (src.at<_tp>(i+1,j+1) > center) << 3;lbpCode |= (src.at<_tp>(i+1,j ) > center) << 2;lbpCode |= (src.at<_tp>(i+1,j-1) > center) << 1;lbpCode |= (src.at<_tp>(i ,j-1) > center) << 0;dst.at<uchar>(i-1,j-1) = lbpCode;}} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

測試結果:

2、LBP特征的改進版本

在原始的LBP特征提出以后,研究人員對LBP特征進行了很多的改進,因此產生了許多LBP的改進版本。

2.1 圓形LBP特征(Circular LBP or Extended LBP)

由于原始LBP特征使用的是固定鄰域內的灰度值,因此當圖像的尺度發生變化時,LBP特征的編碼將會發生錯誤,LBP特征將不能正確的反映像素點周圍的紋理信息,因此研究人員對其進行了改進[3]。基本的 LBP 算子的最大缺陷在于它只覆蓋了一個固定半徑范圍內的小區域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應不同尺度的紋理特征,并達到灰度和旋轉不變性的要求,Ojala 等對 LBP 算子進行了改進,將 3×3 鄰域擴展到任意鄰域,并用圓形鄰域代替了正方形鄰域,改進后的 LBP 算子允許在半徑為 R 的圓形鄰域內有任意多個像素點。從而得到了諸如半徑為R的圓形區域內含有P個采樣點的LBP算子:

這種LBP特征叫做Extended LBP,也叫Circular LBP。使用可變半徑的圓對近鄰像素進行編碼,可以得到如下的近鄰:

對于給定中心點(xc,yc)” role=”presentation” style=”position: relative;”>(xc,yc)(xc,yc)用如下公式計算:

R” role=”presentation” style=”position: relative;”>RR是采樣數目。由于計算的值可能不是整數,即計算出來的點不在圖像上,我們使用計算出來的點的插值點。目的的插值方法有很多,Opencv使用的是雙線性插值,雙線性插值的公式如下:

通過LBP特征的定義可以看出,LBP特征對光照變化是魯棒的,其效果如下圖所示:

//圓形LBP特征計算,這種方法適于理解,但在效率上存在問題,聲明時默認neighbors=8 template <typename _tp> void getCircularLBPFeature(InputArray _src,OutputArray _dst,int radius,int neighbors) {Mat src = _src.getMat();//LBP特征圖像的行數和列數的計算要準確_dst.create(src.rows-2*radius,src.cols-2*radius,CV_8UC1);Mat dst = _dst.getMat();dst.setTo(0);//循環處理每個像素for(int i=radius;i<src.rows-radius;i++){for(int j=radius;j<src.cols-radius;j++){//獲得中心像素點的灰度值_tp center = src.at<_tp>(i,j);unsigned char lbpCode = 0;for(int k=0;k<neighbors;k++){//根據公式計算第k個采樣點的坐標,這個地方可以優化,不必每次都進行計算radius*cos,radius*sinfloat x = i + static_cast<float>(radius * \cos(2.0 * CV_PI * k / neighbors));float y = j - static_cast<float>(radius * \sin(2.0 * CV_PI * k / neighbors));//根據取整結果進行雙線性插值,得到第k個采樣點的灰度值//1.分別對x,y進行上下取整int x1 = static_cast<int>(floor(x));int x2 = static_cast<int>(ceil(x));int y1 = static_cast<int>(floor(y));int y2 = static_cast<int>(ceil(y));//2.計算四個點(x1,y1),(x1,y2),(x2,y1),(x2,y2)的權重//下面的權重計算方式有個問題,如果四個點都相等,則權重全為0,計算出來的插值為0//float w1 = (x2-x)*(y2-y); //(x1,y1)//float w2 = (x2-x)*(y-y1); //(x1,y2)//float w3 = (x-x1)*(y2-y); //(x2,y1)//float w4 = (x-x1)*(y-y1); //(x2,y2)//將坐標映射到0-1之間float tx = x - x1;float ty = y - y1;//根據0-1之間的x,y的權重計算公式計算權重float w1 = (1-tx) * (1-ty);float w2 = tx * (1-ty);float w3 = (1-tx) * ty;float w4 = tx * ty;//3.根據雙線性插值公式計算第k個采樣點的灰度值float neighbor = src.at<_tp>(x1,y1) * w1 + src.at<_tp>(x1,y2) *w2 \+ src.at<_tp>(x2,y1) * w3 +src.at<_tp>(x2,y2) *w4;//通過比較獲得LBP值,并按順序排列起來lbpCode |= (neighbor>center) <<(neighbors-k-1);}dst.at<uchar>(i-radius,j-radius) = lbpCode;}} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
//圓形LBP特征計算,效率優化版本,聲明時默認neighbors=8 template <typename _tp> void getCircularLBPFeatureOptimization(InputArray _src,OutputArray _dst,int radius,int neighbors) {Mat src = _src.getMat();//LBP特征圖像的行數和列數的計算要準確_dst.create(src.rows-2*radius,src.cols-2*radius,CV_8UC1);Mat dst = _dst.getMat();dst.setTo(0);for(int k=0;k<neighbors;k++){//計算采樣點對于中心點坐標的偏移量rx,ryfloat rx = static_cast<float>(radius * cos(2.0 * CV_PI * k / neighbors));float ry = -static_cast<float>(radius * sin(2.0 * CV_PI * k / neighbors));//為雙線性插值做準備//對采樣點偏移量分別進行上下取整int x1 = static_cast<int>(floor(rx));int x2 = static_cast<int>(ceil(rx));int y1 = static_cast<int>(floor(ry));int y2 = static_cast<int>(ceil(ry));//將坐標偏移量映射到0-1之間float tx = rx - x1;float ty = ry - y1;//根據0-1之間的x,y的權重計算公式計算權重,權重與坐標具體位置無關,與坐標間的差值有關float w1 = (1-tx) * (1-ty);float w2 = tx * (1-ty);float w3 = (1-tx) * ty;float w4 = tx * ty;//循環處理每個像素for(int i=radius;i<src.rows-radius;i++){for(int j=radius;j<src.cols-radius;j++){//獲得中心像素點的灰度值_tp center = src.at<_tp>(i,j);//根據雙線性插值公式計算第k個采樣點的灰度值float neighbor = src.at<_tp>(i+x1,j+y1) * w1 + src.at<_tp>(i+x1,j+y2) *w2 \+ src.at<_tp>(i+x2,j+y1) * w3 +src.at<_tp>(i+x2,j+y2) *w4;//LBP特征圖像的每個鄰居的LBP值累加,累加通過與操作完成,對應的LBP值通過移位取得dst.at<uchar>(i-radius,j-radius) |= (neighbor>center) <<(neighbors-k-1);}}} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

測試結果:
radius = 3,neighbors = 8

第三幅圖像為radius = 3,neighbors = 8,第四幅圖像為radius = 1,neighbors = 8,從實驗結果可以看出,半徑越小,圖像紋理越精細

第三幅圖像為radius = 3,neighbors = 8,第四幅圖像為radius = 3,neighbors = 4,從實驗結果可以看出,鄰域數目越小,圖像亮度越低,合理,因此4位的灰度值很小
由于我代碼的問題,不能使neighbors >8,可改進

2.2 旋轉不變LBP特征

從上面可以看出,上面的LBP特征具有灰度不變性,但還不具備旋轉不變性,因此研究人員又在上面的基礎上進行了擴展,提出了具有旋轉不變性的LBP特征。

首先不斷的旋轉圓形鄰域內的LBP特征,根據選擇得到一系列的LBP特征值,從這些LBP特征值選擇LBP特征值最小的作為中心像素點的LBP特征。具體做法如下圖所示:

如圖,通過對得到的LBP特征進行旋轉,得到一系列的LBP特征值,最終將特征值最小的一個特征模式作為中心像素點的LBP特征。

//旋轉不變圓形LBP特征計算,聲明時默認neighbors=8 template <typename _tp> void getRotationInvariantLBPFeature(InputArray _src,OutputArray _dst,int radius,int neighbors) {Mat src = _src.getMat();//LBP特征圖像的行數和列數的計算要準確_dst.create(src.rows-2*radius,src.cols-2*radius,CV_8UC1);Mat dst = _dst.getMat();dst.setTo(0);for(int k=0;k<neighbors;k++){//計算采樣點對于中心點坐標的偏移量rx,ryfloat rx = static_cast<float>(radius * cos(2.0 * CV_PI * k / neighbors));float ry = -static_cast<float>(radius * sin(2.0 * CV_PI * k / neighbors));//為雙線性插值做準備//對采樣點偏移量分別進行上下取整int x1 = static_cast<int>(floor(rx));int x2 = static_cast<int>(ceil(rx));int y1 = static_cast<int>(floor(ry));int y2 = static_cast<int>(ceil(ry));//將坐標偏移量映射到0-1之間float tx = rx - x1;float ty = ry - y1;//根據0-1之間的x,y的權重計算公式計算權重,權重與坐標具體位置無關,與坐標間的差值有關float w1 = (1-tx) * (1-ty);float w2 = tx * (1-ty);float w3 = (1-tx) * ty;float w4 = tx * ty;//循環處理每個像素for(int i=radius;i<src.rows-radius;i++){for(int j=radius;j<src.cols-radius;j++){//獲得中心像素點的灰度值_tp center = src.at<_tp>(i,j);//根據雙線性插值公式計算第k個采樣點的灰度值float neighbor = src.at<_tp>(i+x1,j+y1) * w1 + src.at<_tp>(i+x1,j+y2) *w2 \+ src.at<_tp>(i+x2,j+y1) * w3 +src.at<_tp>(i+x2,j+y2) *w4;//LBP特征圖像的每個鄰居的LBP值累加,累加通過與操作完成,對應的LBP值通過移位取得dst.at<uchar>(i-radius,j-radius) |= (neighbor>center) <<(neighbors-k-1);}}}//進行旋轉不變處理for(int i=0;i<dst.rows;i++){for(int j=0;j<dst.cols;j++){unsigned char currentValue = dst.at<uchar>(i,j);unsigned char minValue = currentValue;for(int k=1;k<neighbors;k++){//循環左移unsigned char temp = (currentValue>>(neighbors-k)) | (currentValue<<k);if(temp < minValue){minValue = temp;}}dst.at<uchar>(i,j) = minValue;}} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

測試結果:
radius = 3,neighbors = 8,最后一幅是旋轉不變LBP特征

2.3 Uniform Pattern LBP特征

Uniform Pattern,也被稱為等價模式或均勻模式,由于一個LBP特征有多種不同的二進制形式,對于半徑為R的圓形區域內含有P個采樣點的LBP算子將會產生2P種模式。很顯然,隨著鄰域集內采樣點數的增加,二進制模式的種類是以指數形式增加的。例如:5×5鄰域內20個采樣點,有220=1,048,576種二進制模式。這么多的二進制模式不利于紋理的提取、分類、識別及存取。例如,將LBP算子用于紋理分類或人臉識別時,常采用LBP模式的統計直方圖來表達圖像的信息,而較多的模式種類將使得數據量過大,且直方圖過于稀疏。因此,需要對原始的LBP模式進行降維,使得數據量減少的情況下能最好的表示圖像的信息。

為了解決二進制模式過多的問題,提高統計性,Ojala提出了采用一種“等價模式”(Uniform Pattern)來對LBP算子的模式種類進行降維。Ojala等認為,在實際圖像中,絕大多數LBP模式最多只包含兩次從1到0或從0到1的跳變。因此,Ojala將“等價模式”定義為:當某個LBP所對應的循環二進制數從0到1或從1到0最多有兩次跳變時,該LBP所對應的二進制就稱為一個等價模式類。如00000000(0次跳變),00000111(只含一次從0到1的跳變),10001111(先由1跳到0,再由0跳到1,共兩次跳變)都是等價模式類。除等價模式類以外的模式都歸為另一類,稱為混合模式類,例如10010111(共四次跳變)。通過這樣的改進,二進制模式的種類大大減少,而不會丟失任何信息。模式數量由原來的2P種減少為 P ( P-1)+2種,其中P表示鄰域集內的采樣點數。對于3×3鄰域內8個采樣點來說,二進制模式由原始的256種減少為58種,即:它把值分為59類,58個uniform pattern為一類,其它的所有值為第59類。這樣直方圖從原來的256維變成59維。這使得特征向量的維數更少,并且可以減少高頻噪聲帶來的影響。

具體實現:采樣點數目為8個,即LBP特征值有28種,共256個值,正好對應灰度圖像的0-255,因此原始的LBP特征圖像是一幅正常的灰度圖像,而等價模式LBP特征,根據0-1跳變次數,將這256個LBP特征值分為了59類,從跳變次數上劃分:跳變0次—2個,跳變1次—0個,跳變2次—56個,跳變3次—0個,跳變4次—140個,跳變5次—0個,跳變6次—56個,跳變7次—0個,跳變8次—2個。共9種跳變情況,將這256個值進行分配,跳變小于2次的為等價模式類,共58個,他們對應的值按照從小到大分別編碼為1—58,即它們在LBP特征圖像中的灰度值為1—58,而除了等價模式類之外的混合模式類被編碼為0,即它們在LBP特征中的灰度值為0,因此等價模式LBP特征圖像整體偏暗。

//等價模式LBP特征計算 template <typename _tp> void getUniformPatternLBPFeature(InputArray _src,OutputArray _dst,int radius,int neighbors) {Mat src = _src.getMat();//LBP特征圖像的行數和列數的計算要準確_dst.create(src.rows-2*radius,src.cols-2*radius,CV_8UC1);Mat dst = _dst.getMat();dst.setTo(0);//LBP特征值對應圖像灰度編碼表,直接默認采樣點為8位uchar temp = 1;uchar table[256] = {0};for(int i=0;i<256;i++){if(getHopTimes(i)<3){table[i] = temp;temp++;}}//是否進行UniformPattern編碼的標志bool flag = false;//計算LBP特征圖for(int k=0;k<neighbors;k++){if(k==neighbors-1){flag = true;}//計算采樣點對于中心點坐標的偏移量rx,ryfloat rx = static_cast<float>(radius * cos(2.0 * CV_PI * k / neighbors));float ry = -static_cast<float>(radius * sin(2.0 * CV_PI * k / neighbors));//為雙線性插值做準備//對采樣點偏移量分別進行上下取整int x1 = static_cast<int>(floor(rx));int x2 = static_cast<int>(ceil(rx));int y1 = static_cast<int>(floor(ry));int y2 = static_cast<int>(ceil(ry));//將坐標偏移量映射到0-1之間float tx = rx - x1;float ty = ry - y1;//根據0-1之間的x,y的權重計算公式計算權重,權重與坐標具體位置無關,與坐標間的差值有關float w1 = (1-tx) * (1-ty);float w2 = tx * (1-ty);float w3 = (1-tx) * ty;float w4 = tx * ty;//循環處理每個像素for(int i=radius;i<src.rows-radius;i++){for(int j=radius;j<src.cols-radius;j++){//獲得中心像素點的灰度值_tp center = src.at<_tp>(i,j);//根據雙線性插值公式計算第k個采樣點的灰度值float neighbor = src.at<_tp>(i+x1,j+y1) * w1 + src.at<_tp>(i+x1,j+y2) *w2 \+ src.at<_tp>(i+x2,j+y1) * w3 +src.at<_tp>(i+x2,j+y2) *w4;//LBP特征圖像的每個鄰居的LBP值累加,累加通過與操作完成,對應的LBP值通過移位取得dst.at<uchar>(i-radius,j-radius) |= (neighbor>center) <<(neighbors-k-1);//進行LBP特征的UniformPattern編碼if(flag){dst.at<uchar>(i-radius,j-radius) = table[dst.at<uchar>(i-radius,j-radius)];}}}} } //計算跳變次數 int getHopTimes(int n) {int count = 0;bitset<8> binaryCode = n;for(int i=0;i<8;i++){if(binaryCode[i] != binaryCode[(i+1)%8]){count++;}}return count; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

測試結果:
radius = 3,neighbors = 8,最后一幅是等價模式LBP特征

2.4 MB-LBP特征

MB-LBP特征,全稱為Multiscale Block LBP,來源于論文[9],中科院的人發明的,在Traincascade級聯目標訓練檢測中的LBP特征使用的就是MB-LBP。
MB-LBP的原理:

將圖像分成一個個小塊(Block),每個小塊再分為一個個的小區域(類似于HOG中的cell),小區域內的灰度平均值作為當前小區域的灰度值,與周圍小區域灰度進行比較形成LBP特征,生成的特征稱為MB-LBP,Block大小為3*3,則小區域的大小為1,就是原始的LBP特征,上圖的Block大小為9*9,小區域的大小為3*3。

不同Block提取的MB-LBP特征如圖所示:

計算MB-LBP代碼:

//MB-LBP特征的計算 void getMultiScaleBlockLBPFeature(InputArray _src,OutputArray _dst,int scale) {Mat src = _src.getMat();Mat dst = _dst.getMat();//定義并計算積分圖像int cellSize = scale / 3;int offset = cellSize / 2;Mat cellImage(src.rows-2*offset,src.cols-2*offset,CV_8UC1);for(int i=offset;i<src.rows-offset;i++){for(int j=offset;j<src.cols-offset;j++){int temp = 0;for(int m=-offset;m<offset+1;m++){for(int n=-offset;n<offset+1;n++){temp += src.at<uchar>(i+n,j+m);}}temp /= (cellSize*cellSize);cellImage.at<uchar>(i-cellSize/2,j-cellSize/2) = uchar(temp); }}getOriginLBPFeature<uchar>(cellImage,dst); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

效果圖:
Block=3,即原始的LBP特征

Block=9

Block=15

到此為止,還沒有結束,作者對得到LBP特征又進行了均值模式編碼,通過對得到的特征圖求直方圖,得到了LBP特征值0-255之間(0-255即直方圖中的bin)的特征數量,通過對bin中的數值進行排序,通過權衡,將排序在前63位的特征值看作是等價模式類,其他的為混合模式類,總共64類,作者在論文中稱之為SEMB-LBP(Statistically Effective MB-LBP )。類似于等價模式LBP,等價模式的LBP的等價模式類為58種,混合模式類1種,共59種。二者除了等價模式類的數量不同之外,主要區別在于:對等價模式類的定義不同,等價模式LBP是根據0-1的跳變次數定義的,而SEMB-LBP是通過對直方圖排序得到的。當然下一步要做的就是將SEMB-LBP變為LBPH進行使用。

計算SEMB-LBP的代碼

//求SEMB-LBP void SEMB_LBPFeature(InputArray _src,OutputArray _dst,int scale) {Mat dst=_dst.getMat();Mat MB_LBPImage;getMultiScaleBlockLBPFeature(_src,MB_LBPImage,scale);//imshow("dst",dst);Mat histMat;int histSize = 256;float range[] = {float(0),float(255)};const float* ranges = {range};//計算LBP特征值0-255的直方圖calcHist(&MB_LBPImage,1,0,Mat(),histMat,1,&histSize,&ranges,true,false);histMat.reshape(1,1);vector<float> histVector(histMat.rows*histMat.cols);uchar table[256];memset(table,64,256);if(histMat.isContinuous()){//histVector = (int *)(histMat.data);//將直方圖histMat變為vector向量histVectorhistVector.assign((float*)histMat.datastart,(float*)histMat.dataend);vector<float> histVectorCopy(histVector);//對histVector進行排序,即對LBP特征值的數量進行排序,降序排列sort(histVector.begin(),histVector.end(),greater<float>());for(int i=0;i<63;i++){for(int j=0;j<histVectorCopy.size();j++){if(histVectorCopy[j]==histVector[i]){//得到類似于Uniform的編碼表table[j]=i;}}}}dst = MB_LBPImage;//根據編碼表得到SEMB-LBPfor(int i=0;i<dst.rows;i++){for(int j=0;j<dst.cols;j++){dst.at<uchar>(i,j) = table[dst.at<uchar>(i,j)];}} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

測試結果:
第二幅為對MB-LBP進行編碼得到的SEMB-LBP圖像

總結:MB-LBP有點類似于先將圖像進行平滑處理,然后再求LBP特征。而SEMB-LBP是在MB-LBP進行編碼后的圖像。類似于等價模式LBP,先求LBP特征,再用等價模式進行編碼。當Scale=3時,MB-LBP和SEMB-LBP就是LBP和等價模式LBP。想具體了解需要去看論文,當然要自己實現才會理解的更透徹。

三、LBPH——圖像的LBP特征向量

LBPH,Local Binary Patterns Histograms,即LBP特征的統計直方圖,LBPH將LBP特征與圖像的空間信息結合在一起。這種表示方法由Ahonen等人在論文[3]中提出,他們將LBP特征圖像分成m個局部塊,并提取每個局部塊的直方圖,然后將這些直方圖依次連接在一起形成LBP特征的統計直方圖,即LBPH。
一幅圖像具體的計算LBPH的過程(以Opencv中的人臉識別為例):

  • 計算圖像的LBP特征圖像,在上面已經講過了。
  • 將LBP特征圖像進行分塊,Opencv中默認將LBP特征圖像分成8行8列64塊區域
  • 計算每塊區域特征圖像的直方圖cell_LBPH,將直方圖進行歸一化,直方圖大小為1&#x2217;numPatterns” role=”presentation” style=”position: relative;”>1?numPatterns1?numPatterns
  • 將上面計算的每塊區域特征圖像的直方圖按分塊的空間順序依次排列成一行,形成LBP特征向量,大小為1&#x2217;&#xFF08;numPatterns&#x2217;64&#xFF09;” role=”presentation” style=”position: relative;”>1?numPatterns?641?(numPatterns?64)
  • 用機器學習的方法對LBP特征向量進行訓練,用來檢測和識別目標
  • 舉例說明LBPH的維度:
    采樣點為8個,如果用的是原始的LBP或Extended LBP特征,其LBP特征值的模式為256種,則一幅圖像的LBP特征向量維度為:64*256=16384維,
    而如果使用的UniformPatternLBP特征,其LBP值的模式為59種,其特征向量維度為:64*59=3776維,可以看出,使用等價模式特征,其特征向量的維度大大減少,
    這意味著使用機器學習方法進行學習的時間將大大減少,而性能上沒有受到很大影響。
    Opencv的人臉識別使用的是Extended LBP

    計算LBPH的代碼如下:

    //計算LBP特征圖像的直方圖LBPH Mat getLBPH(InputArray _src,int numPatterns,int grid_x,int grid_y,bool normed) {Mat src = _src.getMat();int width = src.cols / grid_x;int height = src.rows / grid_y;//定義LBPH的行和列,grid_x*grid_y表示將圖像分割成這么些塊,numPatterns表示LBP值的模式種類Mat result = Mat::zeros(grid_x * grid_y,numPatterns,CV_32FC1);if(src.empty()){return result.reshape(1,1);}int resultRowIndex = 0;//對圖像進行分割,分割成grid_x*grid_y塊,grid_x,grid_y默認為8for(int i=0;i<grid_x;i++){for(int j=0;j<grid_y;j++){//圖像分塊Mat src_cell = Mat(src,Range(i*height,(i+1)*height),Range(j*width,(j+1)*width));//計算直方圖Mat hist_cell = getLocalRegionLBPH(src_cell,0,(numPattern-1),true);//將直方圖放到result中Mat rowResult = result.row(resultRowIndex);hist_cell.reshape(1,1).convertTo(rowResult,CV_32FC1);resultRowIndex++;}}return result.reshape(1,1); } //計算一個LBP特征圖像塊的直方圖 Mat getLocalRegionLBPH(const Mat& src,int minValue,int maxValue,bool normed) {//定義存儲直方圖的矩陣Mat result;//計算得到直方圖bin的數目,直方圖數組的大小int histSize = maxValue - minValue + 1;//定義直方圖每一維的bin的變化范圍float range[] = { static_cast<float>(minValue),static_cast<float>(maxValue + 1) };//定義直方圖所有bin的變化范圍const float* ranges = { range };//計算直方圖,src是要計算直方圖的圖像,1是要計算直方圖的圖像數目,0是計算直方圖所用的圖像的通道序號,從0索引//Mat()是要用的掩模,result為輸出的直方圖,1為輸出的直方圖的維度,histSize直方圖在每一維的變化范圍//ranges,所有直方圖的變化范圍(起點和終點)calcHist(&src,1,0,Mat(),result,1,&histSize,&ranges,true,false);//歸一化if(normed){result /= (int)src.total();}//結果表示成只有1行的矩陣return result.reshape(1,1); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    總結:上面的LBP特征都是較經典的LBP特征,除此之外,LBP特征還有大量的變種,如TLBP(中心像素與周圍所有像素比較,而不是根據采樣點的數目),DLBP(編碼標準四個方向的灰度變化,每個方向上用2比特編碼),MLBP(將中心像素值替換成采樣點像素的平均值),MB-LBP(上面有介紹),VLBP(沒太看懂),RGB-LBP(RGB圖像分別計算LBP,然后連接在一起)等,具體的需要自己去研究,可參考維基百科

    四、LBP特征的匹配與使用

    1、LBP特征用在目標檢測中

    人臉檢測比較出名的是Haar+Adaboost方法,其實目前的Opencv也支持LBP+Adaboost和HOG+Adaboost方法進行目標檢測,從目前我的使用效果來看,LBP+Adaboost方法用在目標檢測中的效果比Haar特征、HOG特征都要好(HOG特征用的不多,主要是Haar和LBP),而且LBP特征的訓練速度比Haar和HOG都要快很多。在LBP+Adaboost中,LBP特征主要是用作輸入的訓練數據(特征),使用的LBP特征應該是DLBP(維基百科上說的,待考證,沒太看明白Cascade中LBP特征的計算方式),具體用法需要看源碼。Opencv的TrainCascade中使用的LBP特征是MB-LBP。
    老外的對Opencv級聯檢測中使用的LBP的解釋(非常好,自己讀,就不翻譯了),在看這個之前最好是運行過TrainCascade來訓練目標檢測的分類器,并使用過LBP特征訓練,調節過參數[8]:

    OpenCV ships with a tool called traincascade that trains LBP, Haar and HOG. Specifically for face detection they even ship the 3000-image dataset of 24x24 pixel faces, in the format needed bytraincascade.

    In my experience, of the three types traincascade supports, LBP takes the least time to train, taking on the order of hours rather than days for Haar.

    A quick overview of its training process is that for the given number of stages (a decent choice is 20), it attempts to find features that reject as many non-faces as possible while not rejecting the faces. The balance between rejecting non-faces and keeping faces is controlled by the mininum hit rate (OpenCV chose 99.5%) and false alarm rate (OpenCV chose 50%). The specific meta-algorithm used for crafting OpenCV’s own LBP cascade is Gentle AdaBoost (GAB).

    The variant of LBP implemented in OpenCV is described here:

    Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li. Learning Multi-scale Block Local Binary Patterns for Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837.

    What it amounts to in practice in OpenCV with default parameters is:

    OpenCV LBP Cascade Runtime Overview

    The detector examines 24x24 windows within the image looking for a face. Stepping from Stage 1 to 20 of the cascade classifier, if it can show that the current 24x24 window is likely not a face, it rejects it and moves over the window by one or two pixels over to the next position; Otherwise it proceeds to the next stage.

    During each stage, 3-10 or so LBP features are examined. Every LBP feature has an offset within the window and a size, and the area it covers is fully contained within the current window. Evaluating an LBP feature at a given position can result in either a pass or fail. Depending on whether an LBP feature succeeds or fails, a positive or negative weight particular to that feature is added to an accumulator.

    Once all of a stage’s LBP features are evaluated, the accumulator’s value is compared to the stage threshold. A stage fails if the accumulator is below the threshold, and passes if it is above. Again, if a stage fails, the cascade is exited and the window moves to the next position.

    LBP feature evaluation is relatively simple. At that feature’s offset within the window, nine rectangles are laid out in a 3x3 configuration. These nine rectangles are all the same size for a particular LBP feature, ranging from 1x1 to 8x8.

    The sum of all the pixels in the nine rectangles are computed, in other words their integral. Then, the central rectangle’s integral is compared to that of its eight neighbours. The result of these eight comparisons is eight bits (1 or 0), which are assembled in an 8-bit LBP.

    This 8-bit bitvector is used as an index into a 2^8 == 256-bit LUT, computed by the training process and particular to each LBP feature, that determines whether the LBP feature passed or failed.

    2、LBP用在人臉識別中

    LBP在人臉識別中比較出名,從源碼上來看,人臉識別中LBPH的使用主要是用來進行直方圖的比較,通過直方圖的比較來判斷目標的類別。在Opencv的基于LBP的人臉識別的實現中使用的LBP特征是Extendes LBP,即圓形LBP特征。參考的論文為文獻[10]。

    LBPH訓練主要是提取輸入的圖像的LBPH保存,當進行識別時,遍歷保存的LBPH,找到輸入圖像與訓練圖像方差最小的LBPH,將其對應的類別作為識別的類別輸出。
    用LBPH進行訓練和識別的代碼。

    #include<iostream> #include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv2\imgproc\imgproc.hpp> #include<opencv2\contrib\contrib.hpp>using namespace std; using namespace cv;int main(int argc,char* argv[]) {vector<Mat> images;vector<int> labels;char buff[10];for(int i=1;i<8;i++){sprintf(buff,"0%d.tif",i);Mat image = imread(buff);Mat grayImage;cvtColor(image,grayImage,COLOR_BGR2GRAY);images.push_back(grayImage);labels.push_back(1);}for(int i=8;i<12;i++){sprintf(buff,"0%d.tif",i);Mat image = imread(buff);Mat grayImage;cvtColor(image,grayImage,COLOR_BGR2GRAY);images.push_back(grayImage);labels.push_back(2);}Ptr<FaceRecognizer> p = createLBPHFaceRecognizer();p->train(images,labels);Mat test= imread("12.tif");Mat grayImage;cvtColor(test,grayImage,COLOR_BGR2GRAY);int result = p->predict(grayImage);cout<<result<<endl;system("pause");return 0; }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    測試結果:

    參考資料

    [1] T. Ojala, M. Pietik?inen, and D. Harwood (1994), “Performance evaluation of texture measures with classification based on Kullback discrimination of distributions”, Proceedings of the 12th IAPR International Conference on Pattern Recognition (ICPR 1994), vol. 1, pp. 582 - 585.
    [2] T. Ojala, M. Pietik?inen, and D. Harwood (1996), “A Comparative Study of Texture Measures with Classification Based on Feature Distributions”, Pattern Recognition, vol. 29, pp. 51-59.
    [3] Ahonen, T., Hadid, A., and Pietikainen, M. Face Recognition with Local Binary Patterns. Computer Vision- ECCV 2004 (2004), 469–481.
    [4] http://blog.csdn.net/xidianzhimeng/article/details/19634573
    [5] opencv參考手冊,Opencv源碼
    [6] http://blog.csdn.net/zouxy09/article/details/7929531
    [7] http://blog.csdn.net/songzitea/article/details/17686135
    [8] http://stackoverflow.com/questions/20085833/face-detection-algorithms-with-minimal-training-time/20086402#20086402
    [9] Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li. Learning Multi-scale Block Local Binary Patterns for Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837.
    [10] Ahonen T, Hadid A. and Pietik?inen M. “Face description with local binary patterns: Application to face recognition.” IEEE Transactions on Pattern Analysis and Machine Intelligence, 28(12):2037-2041.

    總結

    以上是生活随笔為你收集整理的LBP特征提取算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    91色国产在线 | 欧美日韩精品免费观看视频 | 亚洲精品1区2区3区 超碰成人网 | 天天夜夜狠狠操 | 国产在线传媒 | 狠狠色伊人亚洲综合网站色 | 国产精品自在线 | 欧美精品免费一区二区 | 日韩在线观看一区二区三区 | 国产精品久久久久久久久久久久午 | 成人久久18免费网站图片 | 片网址| 国产小视频在线播放 | 中文字幕在线看视频 | 久久亚洲私人国产精品va | 91成人免费在线 | 欧美精品久久天天躁 | 亚洲电影久久久 | 色片网站在线观看 | 人人干人人做 | 午夜在线观看影院 | 午夜视频在线观看一区 | 五月天激情视频在线观看 | 麻花天美星空视频 | 91香蕉亚洲精品 | 夜夜躁日日躁狠狠久久av | 国产亚洲精品久久 | 天天色天天操综合 | 99草在线视频 | 亚洲精品视频免费 | 日韩丝袜在线观看 | av成人免费在线观看 | av免费在线看网站 | 丁香六月在线 | 久久99爱视频 | 日日夜夜艹| 国产精品99久久久久久人免费 | 四虎www.| 国产资源在线视频 | 91重口视频 | 一区二区三区国 | 日韩电影一区二区在线 | 97视频资源 | 91av播放| 亚洲在线成人精品 | 日韩二区精品 | 日韩欧美在线中文字幕 | 久久电影网站中文字幕 | 亚洲天堂自拍视频 | 国产成年免费视频 | 亚洲三区在线 | 波多野结衣动态图 | 婷婷在线看 | 久久手机免费视频 | 丁香在线视频 | 99久久精品久久亚洲精品 | 国产在线精品区 | 99精品视频免费观看 | 欧洲精品码一区二区三区免费看 | 2024av| 精品在线亚洲视频 | 伊人久久五月天 | 九九热视频在线 | 最近字幕在线观看第一季 | 成年人看片| 国产在线精品国自产拍影院 | 国产首页 | 欧美中文字幕久久 | 欧美久久久影院 | 日韩亚洲在线观看 | 欧美亚洲另类在线视频 | 成人免费观看在线视频 | 国产视频在线观看一区 | 一区在线免费观看 | 中文字幕黄色 | 婷婷www| 国产黄色片一级三级 | 成人久久免费 | 色网站在线| 亚洲欧美日韩国产一区二区三区 | 手机看片1042 | 色97在线| 久久69精品久久久久久久电影好 | 日韩视频免费播放 | 中文字幕在线视频一区二区 | 免费看日韩 | 久久99久久99精品免视看婷婷 | 久久免费99精品久久久久久 | 中文字幕 成人 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 免费黄色网址大全 | 国产剧情在线一区 | 99这里只有久久精品视频 | 国产精品成人久久 | 久久成人人人人精品欧 | 在线亚洲观看 | 最近2019好看的中文字幕免费 | 国产精品自在欧美一区 | 中文字幕日本在线 | 亚洲一级性| 久久99精品久久久久久三级 | 91中文字幕在线 | 亚洲少妇自拍 | 免费国产一区二区 | 91视频亚洲 | av免费看电影| 久久精品久久精品久久精品 | 国产亚洲情侣一区二区无 | 91高清免费 | 午夜精品成人一区二区三区 | 日韩视频欧美视频 | 亚洲三级网站 | 国产在线观看a | 黄色在线观看免费网站 | 国产免费又黄又爽 | 粉嫩av一区二区三区四区在线观看 | 亚洲黄色大片 | 天天曰夜夜操 | 欧洲色综合 | 中文字幕精品一区二区三区电影 | 91亚色免费视频 | 久久综合狠狠综合久久综合88 | 欧美成人久久 | 国产精品青草综合久久久久99 | 麻豆免费在线播放 | 欧美中文字幕第一页 | 97在线播放| 国产二区av | 国产在线视频导航 | 91九色在线视频 | 在线视频 影院 | 女人高潮特级毛片 | 久久久免费视频播放 | 国产精品99久久久久久大便 | 久久久精品免费观看 | 亚洲精品乱码久久久久久蜜桃91 | 久久96国产精品久久99漫画 | av在线播放中文字幕 | 婷婷六月综合亚洲 | 中文字幕资源网在线观看 | 免费看污在线观看 | 精品免费 | 久久99欧美| 国产精彩在线视频 | 欧美日韩破处 | 亚洲美女视频在线观看 | 美女网站在线观看 | 一级片视频在线 | 四虎国产永久在线精品 | 免费黄色a网站 | www.色五月 | 日韩精品一区二区免费视频 | 一区二区三区免费在线观看视频 | 国产亚洲精品成人av久久ww | 国产日韩欧美综合在线 | 国产精品一区二区三区免费视频 | 成人动漫一区二区三区 | av看片在线观看 | 亚洲午夜在线视频 | 久久综合精品国产一区二区三区 | 黄色日本免费 | 免费91在线 | 日本精品在线 | 伊人色综合久久天天网 | 在线免费视频a | 亚洲在线视频播放 | 97人人添人澡人人爽超碰动图 | 久久综合久久伊人 | 91一区二区三区在线观看 | 色天天久久 | 最近中文字幕视频网 | 色婷五月 | 国产一级大片免费看 | 久久爱综合 | 91尤物国产尤物福利在线播放 | 欧美日韩精品在线 | 在线欧美a| 99看视频在线观看 | 亚洲精品啊啊啊 | 九色免费视频 | 人人爱人人爽 | 国产九九九视频 | 99精品国产一区二区三区麻豆 | 五月天久久综合网 | 91久久久久久国产精品 | 欧美三人交| 黄色大全在线观看 | 中文字幕在线影院 | 91精品国自产在线偷拍蜜桃 | 中文区中文字幕免费看 | 国产精品久久久久久吹潮天美传媒 | 91看片淫黄大片一级在线观看 | 日韩欧美区 | 国产中文字幕网 | 国产在线播放不卡 | 丝袜制服综合网 | 色综合久久久久综合体 | 久久9999久久免费精品国产 | 中文字幕在线人 | 黄色片免费电影 | 337p日本欧洲亚洲大胆裸体艺术 | 精品国产伦一区二区三区观看体验 | 成人免费一区二区三区在线观看 | 免费黄色在线网址 | av在线免费观看黄 | 亚洲黄色片一级 | 国产精品亚洲精品 | 999视频在线播放 | 国产手机免费视频 | 久久综合五月婷婷 | 在线成人一区 | 国产免费区 | 国产成人在线网站 | 午夜精品久久久久久久99 | 99re热精品视频 | 欧美激情综合五月色丁香小说 | 97视频免费在线观看 | www.久久91 | 中文在线www| www178ccom视频在线 | av在线网站免费观看 | 国产精品久久久久一区二区三区 | 69精品视频 | 精品在线观看国产 | 国产乱对白刺激视频在线观看女王 | 天天摸日日操 | 天天色天天操综合网 | 久久久久看片 | 人人射人人爽 | 中文字幕在 | 国产精品日韩欧美 | 国产亚洲精品久 | 日韩成人免费在线观看 | 欧美亚洲国产一卡 | 天天爱天天插 | av不卡免费在线观看 | 99精品国产一区二区三区麻豆 | 超碰在线成人 | 国产乱对白刺激视频不卡 | 国产一在线精品一区在线观看 | 国产精品欧美久久久久无广告 | 国产免费又爽又刺激在线观看 | 亚洲经典视频在线观看 | 中文乱幕日产无线码1区 | 亚洲精品久久久久中文字幕m男 | 青青河边草免费直播 | 九九热久久免费视频 | 99日精品 | 中文字幕国产在线 | 丁香婷婷综合色啪 | 91视频免费看片 | 国产福利91精品张津瑜 | 免费韩国av | 国产中文| 久久高清片 | 九九视频在线观看视频6 | 婷婷久久婷婷 | 国产精品免费久久久 | 国产精品一区二区三区在线免费观看 | 在线观看日韩免费视频 | 黄色a级片在线观看 | 99热这里只有精品1 av中文字幕日韩 | 日韩精品观看 | 摸bbb搡bbb搡bbbb | 天天操综合 | 99热999 | 视频一区二区在线 | 天天射天天 | 97视频在线免费观看 | 8x成人在线| 精品99在线视频 | 日韩特黄一级欧美毛片特黄 | 国产欧美日韩精品一区二区免费 | 国产福利中文字幕 | 日操干| 91精品国自产拍天天拍 | 中文字幕av有码 | 久久精品高清视频 | 亚洲欧美成人综合 | 欧美91精品久久久久国产性生爱 | 久久黄网站 | 国产精久久久 | 免费精品在线视频 | 国产高清av在线播放 | 亚洲国产日韩在线 | 91视频网址入口 | 国产精品久久久久久久久岛 | 亚洲激情视频在线观看 | 在线三级中文 | 成年人免费看片网站 | 久久五月情影视 | 国产福利电影网址 | 亚洲少妇天堂 | 日韩免费看的电影 | 国产97免费 | 00av视频 | 中文字幕专区高清在线观看 | 99中文字幕在线观看 | 久久精美视频 | 国产精品va在线播放 | 亚洲 欧美 另类人妖 | 又黄又刺激的视频 | 久久公开免费视频 | 国产精品乱码久久 | 精品久久久网 | 亚洲天堂激情 | 亚洲欧美婷婷六月色综合 | 日日爽夜夜爽 | 成人黄色大片在线观看 | 国产在线一区二区 | 亚洲午夜久久久综合37日本 | 午夜精品久久久久久久久久 | 国产精品一区二区三区电影 | 国产精品高清免费在线观看 | 久久久99精品免费观看 | 91精品一区二区三区久久久久久 | 国产精品美女久久久久久 | 中文字幕首页 | 欧美激精品 | 丝袜+亚洲+另类+欧美+变态 | 婷婷色网站 | 亚洲国产精品久久久久 | 狠狠精品 | 色a在线观看 | 亚洲三级在线 | 久草com| 亚洲理论片| 最近2019好看的中文字幕免费 | 成人小视频在线 | 久久久久成人精品亚洲国产 | 成年人在线播放视频 | 黄色avwww| 欧美一级日韩免费不卡 | 最近中文字幕国语免费av | 精品国产一区二区三区噜噜噜 | a'aaa级片在线观看 | 青青河边草手机免费 | 成人一级黄色片 | 人人干人人草 | 91视频在线观看下载 | 久久精品日韩 | 天天射日 | 欧美91精品国产自产 | 国产精品久久久久aaaa九色 | 97在线播放 | 国产亚洲精品久久久久久电影 | 999超碰| 国产一级在线播放 | 五月婷婷在线视频观看 | 婷婷在线视频 | 国产69久久久 | 黄色国产高清 | 三三级黄色片之日韩 | 女人18毛片90分钟 | 在线视频久 | 欧美日韩一二三四区 | 久久精品日本啪啪涩涩 | 久久观看最新视频 | 99视频在线观看视频 | 一级黄色网址 | 97色噜噜| 9久久精品 | 国产精品 9999 | 天天综合亚洲 | 久久久999免费视频 日韩网站在线 | 韩国中文三级 | 国产探花 | 特级黄色一级 | 亚洲精品动漫久久久久 | 午夜视频在线观看一区二区三区 | 九九免费在线观看视频 | 久久国产精品影片 | 亚洲最新视频在线播放 | 人人玩人人添人人澡97 | 午夜久久影院 | 91丨九色丨91啦蝌蚪老版 | 日韩免费在线网站 | 五月婷婷在线观看视频 | 天天操天天干天天操天天干 | 亚洲 欧洲av | 99久久婷婷国产一区二区三区 | 99精品热 | 808电影免费观看三年 | 中文字幕有码在线播放 | avsex| 综合铜03| av国产在线观看 | 久久爱导航 | 在线观看视频你懂 | 欧美91精品久久久久国产性生爱 | 久久黄色网址 | 欧美一级久久久 | 在线观看视频福利 | 午夜av在线免费 | 美女视频黄色免费 | 亚洲狠狠婷婷综合久久久 | 久草观看 | 91九色视频导航 | 在线小视频你懂的 | 99在线精品视频 | 手机在线看片日韩 | 麻花天美星空视频 | 欧美视屏一区二区 | 婷婷色九月| 国产一区在线视频 | 欧美激情第八页 | 欧美a视频在线观看 | 中文字幕专区高清在线观看 | 天堂视频一区 | 亚洲理论电影网 | 午夜神马福利 | 毛片无卡免费无播放器 | 97超碰在线资源 | 日韩美女高潮 | 国产又黄又硬又爽 | 911在线| 毛片一区二区 | 97超碰福利久久精品 | 蜜桃传媒一区二区 | 一区二区影院 | 福利一区视频 | 亚洲国内精品在线 | 香蕉视频91 | 黄色毛片在线观看 | a色视频 | 亚洲国产精品免费 | 日韩在线观看一区 | 婷婷av网 | 天天天天色射综合 | 久久精品久久国产 | 亚洲免费永久精品国产 | 不卡国产在线 | 色综合咪咪久久网 | 精品国产一区二区三区久久久蜜月 | 精品久久久精品 | 日韩理论电影在线观看 | 精品国产aⅴ麻豆 | 免费av试看 | 色资源在线观看 | 精品一区二区在线看 | 国产一区二区三区高清播放 | 97精品国产91久久久久久久 | 成人免费在线观看入口 | 日韩免费看片 | 久久精品99国产国产 | 免费看一级一片 | 久草 | 超碰在线公开免费 | 99av在线视频| 欧美精品xx| 日韩欧美视频免费在线观看 | 国产成人精品av在线 | 狠狠狠狠狠干 | 日本久久久久久久久久久 | 99热九九这里只有精品10 | 国内精品视频一区二区三区八戒 | 超级碰碰碰碰 | 亚洲五月| 亚洲第二色 | 欧美在线视频一区二区三区 | 精品一区二区三区四区在线 | 最新婷婷色| 青草视频在线 | 99在线播放| 黄色a视频免费 | 国产又粗又硬又爽视频 | 成人一区二区三区在线观看 | 婷婷香蕉 | 97视频精品| 国产精品美女久久久网av | 日韩精品免费 | 99国产精品久久久久老师 | 久久久麻豆精品一区二区 | 欧美成人日韩 | aa级黄色大片 | 国产精品综合在线 | 欧美性精品 | 日韩高清国产精品 | 伊人影院在线观看 | 久久久久成人免费 | 狠狠狠色丁香婷婷综合激情 | 欧美日韩aa | 亚州国产视频 | 国产精品久久久久影院日本 | 77国产精品| 日韩视频1区 | 玖玖在线看 | 亚洲精品免费在线观看 | 久久无码av一区二区三区电影网 | 香蕉视频久久久 | a级国产毛片 | 99这里只有精品99 | 久久婷五月 | 中文字幕中文字幕在线中文字幕三区 | 激情丁香综合 | 欧美性色网站 | 最新动作电影 | 欧洲亚洲国产视频 | 在线免费观看国产精品 | 中文字幕 成人 | 久久久久久综合网天天 | 成人av电影免费在线播放 | 国产美女精品视频免费观看 | 久久久久久久久久久久99 | 88av色 | 国产破处精品 | 国产在线观看91 | 国产精品久久久久久久久久ktv | 亚洲精品国偷自产在线99热 | 欧美激情第八页 | 国产精品久久麻豆 | 午夜视频福利 | 五月综合久久 | 欧美一级视频在线观看 | 天天艹日日干 | 综合网久久 | 99精品久久精品一区二区 | 成人av一区二区兰花在线播放 | 国产日本亚洲高清 | 亚洲狠狠丁香婷婷综合久久久 | 欧美综合在线视频 | 狠狠干天天干 | 不卡精品 | 久久dvd | 视频在线观看一区 | 国产成人精品一区二区在线观看 | 亚洲 欧美 变态 国产 另类 | 99热手机在线 | 久久久久久久久国产 | 久久精品一区二区国产 | 中文字幕高清av | 国产高清视频免费 | 黄色小网站在线观看 | 精品亚洲一区二区三区 | 92精品国产成人观看免费 | 色九色 | 日日夜夜综合网 | 五月激情av | 2024国产精品视频 | 99欧美精品 | 91在线看视频免费 | 99在线观看视频网站 | 精品久久福利 | 亚洲欧洲精品一区二区 | 正在播放 国产精品 | 一级全黄毛片 | 国产婷婷精品 | 97在线观| 欧美日韩二区在线 | 丁香六月久久综合狠狠色 | 久草视频视频在线播放 | 久久国产精品色av免费看 | 久久免费视频在线观看6 | 亚洲成成品网站 | 一区二区三区播放 | 日韩高清无线码2023 | 久久精品永久免费 | 国产资源精品 | 亚洲最新av网站 | 婷婷亚洲综合五月天小说 | av网站免费线看精品 | 亚洲精品国产区 | 男女啪啪视屏 | 久久婷婷色综合 | 久久久久一区二区三区四区 | 中文字幕色播 | 男女视频久久久 | 欧美性生活久久 | 久久撸在线视频 | 久久成年人视频 | 久久99爱视频 | 激情在线网 | 国产精品美女久久久久久免费 | 天堂久久电影网 | 免费看国产视频 | 国产网站色 | 久久国产精品久久精品国产演员表 | 婷婷激情av| 99在线国产 | 日韩18p| 天天综合网天天综合色 | 视频在线99re | 在线v片免费观看视频 | 久久国内视频 | 国产一区视频在线 | 黄色小说视频网站 | 久久人人添人人爽添人人88v | 亚洲欧洲日韩在线观看 | 四虎www com | 一级久久久 | 最近日本mv字幕免费观看 | 久久久久99精品成人片三人毛片 | 在线视频国产区 | 99爱在线观看 | av在线播放不卡 | 天天操狠狠操夜夜操 | 国产成人精品一区一区一区 | 午夜精品久久久久久久久久久久久久 | 国产精品videoxxxx| 日韩精品久久久久久 | 日韩欧美高清一区二区三区 | 日韩www在线 | 91香蕉视频黄 | 丁香久久综合 | 国产成人精品一区二区在线观看 | 在线免费色视频 | 婷婷精品在线 | 久久精品美女 | 国产色在线观看 | 国产精品99久久久久久久久久久久 | 一二三区在线 | 探花视频网站 | 久久免费视频在线观看6 | 国产精品久久久久久高潮 | 国产精品亚州 | 午夜影视一区 | 天天摸天天操天天舔 | 色网免费观看 | 色a资源在线| 国产一区二区精 | 亚洲综合精品视频 | 亚洲高清免费在线 | av中文资源在线 | 久久久久伦理电影 | 久99久精品 | 精品国内自产拍在线观看视频 | 毛片99| 一级片黄色片网站 | 91尤物国产尤物福利在线播放 | 久草在线视频新 | 久久久国产高清 | 日韩av手机在线观看 | 欧美日韩精品在线播放 | 国产对白av | 国产欧美精品xxxx另类 | 99在线观看视频 | 成人av播放 | 97超在线 | 免费在线观看成人小视频 | 婷婷资源站 | 91精品一区国产高清在线gif | 国产精品视频最多的网站 | 久久黄色免费视频 | 国产激情久久久 | 麻豆影视在线观看 | 久久久久久麻豆 | 国产在线色站 | 久久精品久久精品久久精品 | 五月综合网 | 天天天色综合 | japanesefreesexvideo高潮 | 亚洲精品综合欧美二区变态 | 亚洲欧洲成人 | 免费视频你懂得 | 99视频久久| 欧美性大战久久久久 | 婷婷性综合 | 久久视频在线免费观看 | 久久精品影片 | 久久久久色 | 中文字幕在线观看资源 | 狠狠躁夜夜av | 久久久久伦理电影 | 在线国产视频一区 | 精品特级毛片 | 丁香午夜 | 亚洲国产精品视频 | 99在线免费视频 | 久久伊人热| 美女视频黄频 | 中文字幕丝袜美腿 | 亚洲综合成人婷婷小说 | 亚洲电影在线看 | 久久手机免费观看 | 黄色视屏免费在线观看 | 综合久久网站 | 久久精品伊人 | 黄色大片国产 | 免费av观看网站 | 99久久这里有精品 | 国产一区不卡在线 | 在线亚洲成人 | 国内精品视频一区二区三区八戒 | 蜜臀精品久久久久久蜜臀 | 成人黄色在线观看视频 | 99爱视频在线观看 | 免费福利在线视频 | 日日日操| 国产精品久久二区 | 激情xxxx| 黄色av网站在线免费观看 | 综合伊人av| 9在线观看免费高清完整版在线观看明 | 伊人国产在线播放 | 亚洲高清久久久 | 天天色天天爱天天射综合 | 欧美日韩高清一区 | 亚洲狠狠丁香婷婷综合久久久 | www.com在线观看 | 国产精品精品久久久久久 | 夜夜爱av| www.天天干| 国产精品网红福利 | 久草免费新视频 | 综合激情 | 91精品久久香蕉国产线看观看 | 久久久久久久久久久免费av | 91亚洲精品久久久中文字幕 | 黄色大全免费观看 | 日韩美女一级片 | 国产日本高清 | 插久久 | 视频精品一区二区三区 | av网站地址 | 国产色妞影院wwwxxx | 国产原创在线视频 | 超碰人人草人人 | 久久亚洲成人网 | 亚洲国产黄色片 | 日韩电影在线观看中文字幕 | 亚洲激情视频在线观看 | 国精产品永久999 | 成人黄色免费在线观看 | 黄色成人在线观看 | 精品视频免费在线 | 综合激情婷婷 | 国产成人精品一区二区三区福利 | 欧美一级片在线观看视频 | 中文字幕在线看视频 | 操久久网| 免费在线观看的av网站 | 欧美日韩免费看 | 国产中文字幕在线免费观看 | 国产一区二区在线播放视频 | 91九色国产在线 | 国产精品都在这里 | 久久人人爽人人爽 | 天天干天天干天天 | 成人精品一区二区三区电影免费 | 啪一啪在线 | 中文字幕xxxx | 在线视频区 | 日韩欧美视频一区二区三区 | 高清国产午夜精品久久久久久 | 在线看成人 | 天天色综合三 | 国产午夜精品免费一区二区三区视频 | 久久久香蕉视频 | 97视频在线看 | 人人爱人人添 | 在线播放 日韩专区 | 久久 国产一区 | 欧美一级片播放 | 国产一级高清视频 | 日韩二三区 | 中文字幕在线观看视频一区二区三区 | 中文在线www | 黄色的视频网站 | 五月婷婷开心 | 91精品久久久久久久久久入口 | 日韩在线电影一区 | 黄色成人影视 | 成人动态视频 | 欧美做受高潮 | 中文字字幕在线 | 福利网址在线观看 | 成人av电影免费在线播放 | 极品美女被弄高潮视频网站 | 精品视频免费观看 | 天天综合导航 | 日韩高清在线一区二区三区 | 婷婷色视频 | 精品五月天 | 99热 精品在线 | 在线电影91 | 香蕉久草在线 | 五月婷婷色丁香 | 国产精品igao视频网入口 | 激情九九 | 精品国产一区二区三区久久久蜜月 | 日韩av电影中文字幕在线观看 | 亚洲精品动漫成人3d无尽在线 | 天堂av观看 | 久久激情综合 | 中文字幕在线视频精品 | 久久少妇免费视频 | 可以免费观看的av片 | 久久国产精品电影 | 91精品国产91 | 国产美女被啪进深处喷白浆视频 | 日本性xxx| 亚洲视频www| 国产成人一区二区三区免费看 | 久久国产精品久久w女人spa | 久久国际影院 | 五月激情片 | www.色午夜.com| 久久国产精品99久久人人澡 | 欧美日韩国产综合网 | 99精品欧美一区二区三区黑人哦 | 久久免费视频精品 | 午夜精品中文字幕 | 九九九热精品免费视频观看网站 | 亚洲开心色 | 一级片视频在线 | 中文字幕在线观看网 | 激情久久伊人 | 日韩精品在线免费观看 | 国产成人精品亚洲日本在线观看 | 国内精品久久久久久久久 | 99久久精品国产系列 | 国产美女免费视频 | 在线观看不卡视频 | 久久成人一区 | 久久成人免费视频 | 成人a级大片 | 日韩久久午夜一级啪啪 | 99色在线播放 | 亚洲欧美国产精品 | 91porny九色在线播放 | 最近日本字幕mv免费观看在线 | 99久久精品国产一区二区成人 | 久久免视频 | 欧美中文字幕久久 | 色婷婷在线观看视频 | 永久免费毛片 | 中文字幕av在线不卡 | 久久人人插 | av丝袜天堂 | 国产999免费视频 | 欧美日韩一区二区三区在线免费观看 | 一区二区三区中文字幕在线 | 免费又黄又爽视频 | 色婷婷六月 | 天天爱天天操天天射 | 福利区在线观看 | 成人欧美亚洲 | 天天色成人网 | 日韩三级不卡 | 天天做日日做天天爽视频免费 | 国产中文a | 亚洲欧美视频在线播放 | 91视频久久久久久 | 91手机电影 | 亚洲综合视频网 | 黄色av一级片 | 91精品亚洲影视在线观看 | 在线观看免费高清视频大全追剧 | 毛片精品免费在线观看 | 最新中文字幕在线资源 | 精品视频久久久久久 | 五月天色综合 | 99理论片| 天天操天天谢 | 国产精品入口麻豆www | 99久久精品国产免费看不卡 | 色婷婷国产精品一区在线观看 | 黄色片亚洲| 视频国产在线观看18 | 国产二区电影 | 三级av免费| 日韩电影在线观看一区 | 日本中文字幕在线免费观看 | 玖玖在线视频观看 | 丁香在线视频 | 亚洲视频在线观看网站 | 久久综合狠狠综合 | 亚洲另类视频在线 | 成人高清av在线 | a在线观看国产 | 97视频在线观看成人 | 成年人免费看av | 91成品视频 | 九九99视频 | 亚洲精品在线网站 | 久久久91精品国产一区二区精品 | 天天干亚洲 | 国产黄色精品在线观看 | 日韩高清成人 | a级片久久久 | 黄色av网站在线观看 | 在线电影av | 91一区二区三区久久久久国产乱 | 在线一级片 | 久久人人添人人爽添人人88v | 日韩在线视频国产 | 日本在线成人 | 伊人色播| 成年人免费电影 | 色在线免费观看 | 日韩一区正在播放 | 亚洲人成在线观看 | 国内精品久久天天躁人人爽 | 久久久久久久久久免费视频 | 久久精品国产精品亚洲精品 | 亚洲专区 国产精品 | 国产一级做a爱片久久毛片a | 伊人永久 | 午夜国产在线观看 | 波多野结衣资源 | 免费网址在线播放 | 一级片视频免费观看 | 免费观看成人 | 天天翘av | 九九九九九九精品任你躁 | 美女黄网久久 | 美女黄网久久 | 九九免费精品视频 | 欧美在线视频一区二区三区 | 亚洲日韩欧美视频 | 狠狠躁日日躁夜夜躁av | 色综合久久久久综合体桃花网 | 午夜电影av | 99热这里只有精品8 久久综合毛片 | 精品成人a区在线观看 | 美女天天操 | 99久久激情视频 | 成人av在线播放网站 | 91视频免费国产 | 久久免费公开视频 | 精品国产视频一区 | 国产女人18毛片水真多18精品 | 国产99亚洲| 精品黄色在线观看 | 久久久2o19精品 | 亚洲va天堂va欧美ⅴa在线 | 免费在线观看视频一区 | 免费观看www7722午夜电影 | 九九综合九九综合 | 六月婷婷色 | 国产一区在线观看免费 | 五月天色站 | 欧美片一区二区三区 | 日韩国产欧美在线视频 | 99国产精品一区 | 国产99久久久精品 | 中文字幕第一页在线视频 | 99热999 | 久久草在线视频国产 | 中文乱幕日产无线码1区 | 91在线你懂的 | 91成人精品一区在线播放69 | 久久久久久久久久久久电影 | 免费观看一级成人毛片 | 成人午夜在线电影 | 狠狠狠色丁香婷婷综合久久88 | 亚洲黄色在线播放 | 四虎成人精品 | 97视频人人 | 在线观看视频一区二区三区 | 激情综合中文娱乐网 | 久久免费资源 | 91亚洲精品久久久蜜桃 | 日日日视频 | 日韩av看片 | 久久三级视频 | 99久国产 | 国产精品成人自产拍在线观看 | 2019中文字幕第一页 | 五月开心网 | 国产亚洲婷婷免费 | 日日夜夜人人精品 | 天天干中文字幕 | 久久免费黄色大片 | 国产成人99av超碰超爽 | 亚洲人成在线电影 | 日韩在线 一区二区 | 亚洲精品国产精品国自产在线 | 亚洲网站在线看 | 一级片免费视频 | 五月丁香 | 一区二区精品在线观看 | 91麻豆网站 | 欧美激情综合五月色丁香 | 超级碰碰碰免费视频 | 亚洲精品国产精品久久99 | 免费视频久久久 | 国产黄在线播放 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 四虎在线观看精品视频 | 丁香九月激情 | 国产精品在线看 | 日本最新高清不卡中文字幕 | 九九色在线观看 | 亚洲成人黄色在线 | 亚洲欧洲精品一区二区 | 蜜桃av观看| 中文字幕视频播放 | 一区二区三区在线观看中文字幕 | 日韩免费不卡av | 在线观看免费福利 | av电影久久 | 日韩在线精品视频 | 久久伦理 | 欧美日韩高清一区 | 久久99亚洲网美利坚合众国 | 日韩两性视频 | 亚洲激情视频在线 |