局部二值模式LBP(Local Binary Pattern)實現代碼
07-22
本文不介紹LBP的理論知識,只是簡單的說說LBP及其變體的實現:
1)最原始的LBP運算元的實現代碼
[cpp] view plain copy print?- voidlbp(Mat&_src,Mat&_dst)
- {
- if(-_dst.empty())
- _dst.create(_src.rows,_src.cols,CV_8UC1);
- _dst=cv::Scalar::all(0);
- //calculatepatterns
- for(inti=1;i<_src.rows-1;i++)
- {
- for(intj=1;j<_src.cols-1;j++)
- {
- ucharcenter=_src.at<uchar>(i,j);
- unsignedcharcode=0;
- code|=(_src.at<uchar>(i-1,j-1)>=center)<<7;
- code|=(_src.at<uchar>(i-1,j)>=center)<<6;
- code|=(_src.at<uchar>(i-1,j+1)>=center)<<5;
- code|=(_src.at<uchar>(i,j+1)>=center)<<4;
- code|=(_src.at<uchar>(i+1,j+1)>=center)<<3;
- code|=(_src.at<uchar>(i+1,j)>=center)<<2;
- code|=(_src.at<uchar>(i+1,j-1)>=center)<<1;
- code|=(_src.at<uchar>(i,j-1)>=center)<<0;
- _dst.at<unsignedchar>(i,j)=code;
- }
- }
- }
2)帶有容忍銀子的LBP運算元[cpp] view plain copy print?
- voidlbp_with_factor(Mat&_src,Mat&_dst,ucharfactor)//factordefault3
- {
- if(-_dst.empty())
- _dst.create(_src.rows,_src.cols,CV_8UC1);
- _dst=cv::Scalar::all(0);
- //calculatepatterns
- for(inti=1;i<_src.rows-1;i++)
- {
- for(intj=1;j<_src.cols-1;j++)
- {
- ucharcenter=_src.at<uchar>(i,j)+factor;
- unsignedcharcode=0;
- code|=(_src.at<uchar>(i-1,j-1)>=center)<<7;
- code|=(_src.at<uchar>(i-1,j)>=center)<<6;
- code|=(_src.at<uchar>(i-1,j+1)>=center)<<5;
- code|=(_src.at<uchar>(i,j+1)>=center)<<4;
- code|=(_src.at<uchar>(i+1,j+1)>=center)<<3;
- code|=(_src.at<uchar>(i+1,j)>=center)<<2;
- code|=(_src.at<uchar>(i+1,j-1)>=center)<<1;
- code|=(_src.at<uchar>(i,j-1)>=center)<<0;
- _dst.at<unsignedchar>(i,j)=code;
- }
- }
- }
3)帶有乘性因子的LBP運算元[cpp] view plain copy print?
- //這裡需要採用2個字元來編碼,如00、01、10、11
- voidlbp_with_factor(Mat&_src,Mat&_dst,floatfactor)//facotrdefault0.1
- {
- if(-_dst.empty())
- _dst.create(_src.rows,_src.cols,CV_8UC1);
- _dst=cv::Scalar::all(0);
- //calculatepatterns
- for(inti=1;i<_src.rows-1;i++)
- {
- for(intj=1;j<_src.cols-1;j++)
- {
- ucharcenter=_src.at<uchar>(i,j);
- intup=center*(1.0+factor);
- intdown=center*(1.0+factor);
- unsignedcharcode=0;
- /*code|=(_src.at<uchar>(i-1,j-1)>=center)<<7;
- code|=(_src.at<uchar>(i-1,j)>=center)<<6;
- code|=(_src.at<uchar>(i-1,j+1)>=center)<<5;
- code|=(_src.at<uchar>(i,j+1)>=center)<<4;
- code|=(_src.at<uchar>(i+1,j+1)>=center)<<3;
- code|=(_src.at<uchar>(i+1,j)>=center)<<2;
- code|=(_src.at<uchar>(i+1,j-1)>=center)<<1;
- code|=(_src.at<uchar>(i,j-1)>=center)<<0;
推薦閱讀:
※【近現代繪畫大師】祝大年
※現代簡歐
※魚龍變化 中國現代交誼舞文化創新運動
※現代紳士備忘錄
※化妝師MM的家 90平現代美式設計