資源簡介
C++代碼提取LBP特征,一共包括兩種方式normal和circle,circle的效果好
代碼片段和文件信息
#include?
//#include?
#include?
#include?
#include?
#include?
const?static?int?lbpBins?=?14;
static?float?lbpSquare[lbpBins?+?1][lbpBins?+?1];
using?namespace?cv;
using?namespace?std;
void?elbp(Mat&?src?Mat?&dst?int?radius?int?neighbors)
{
????for(int?n=0;?n ????{
????????
????????float?x?=?static_cast(-radius?*?sin(2.0*CV_PI*n/static_cast(neighbors)));
????????float?y?=?static_cast(radius?*?cos(2.0*CV_PI*n/static_cast(neighbors)));
????????
????????int?fx?=?static_cast(floor(x));
????????int?fy?=?static_cast(floor(y));
????????int?cx?=?static_cast(ceil(x));
????????int?cy?=?static_cast(ceil(y));
????????
????????float?ty?=?y?-?fy;
????????float?tx?=?x?-?fx;
????????
????????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?????????{
????????????for(int?j=radius;j?????????????{
????????????????
????????????????float?t?=?static_cast(w1*src.at(i+fyj+fx)?+?w2*src.at(i+fyj+cx)?+?w3*src.at(i+cyj+fx)?+?w4*src.at(i+cyj+cx));
????????????????
????????????????dst.at(i-radiusj-radius)?+=?((t?>?src.at(ij))?||?(std::abs(t-src.at(ij))?::epsilon()))?<????????????}
????????}
????}
????dst.create(1?lbpBins?*?lbpBins?CV_32FC1);
for?(int?b?=?0;?b? {
for?(int?c?=?0;?c? {
評論
共有 條評論