网站在什么环境下做,网站建设与管理学习什么,网络广告管理办法,html写一个心形网页目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章#xff0c;那么此处便是不要脸的爬虫。
一、算法原理
1、原理概述 基本LBP算子虽然在早期… 目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创爬虫自重。如果你不是在点云侠的博客中看到该文章那么此处便是不要脸的爬虫。
一、算法原理
1、原理概述 基本LBP算子虽然在早期的实验中取得了一系列成果但是应用于不同领域的具体问题时该算子的处理结果并不能达到预期的效果。因此很多学者对其进行了改进并取得了显著成果。改进算子主要有多分辨率LBP、旋转不变LBP和等价LBP等。 TimoOjala等对基本LBP进行拓展拓展后的多分辨率LBP不再仅仅是 3 × 3 3\times3 3×3格网而是可以设置邻域像素数量和半径通常用 P P P表示邻域像素个数用 R R R表示半径记为LBP_PR与此同时运用了插值的思想将邻域窗口由方形拓展为圆形。基本LBP是邻域像素数量半径1.0的版本。下图描述了和取不同值时的情况。 多分辨率LBP 从图中可以看出只要不断改变窗口大小即改变和的值LBP就具备了多分辨率识别的特性TimoOjala等人通过实验得出将图像的灰度直方图和LBP特征结合可以增强分类效果。
2、参考文献 [1] 马新江. 基于多元LBP特征的车载激光点云中道路边界提取[D].山东科技大学,2019. 二、代码实现
#includeiostream
#includeopencv2/opencv.hppusing namespace std;// 多分辨率LBP
cv::Mat ExpandLocalBinaryPattern(cv::Mat orignImg, int lbpRadius 3, int maxCount 20)
{cv::Mat grayImg;cvtColor(orignImg, grayImg, cv::COLOR_BGR2GRAY);int offset lbpRadius * 2;cv::Mat elbpImg cv::Mat::zeros(grayImg.rows - offset, grayImg.cols - offset, CV_8UC1);int numNeighbor 8;for (int n 0; n numNeighbor; n){float x lbpRadius * cos((2 * CV_PI * n) / numNeighbor);float y lbpRadius * (-sin((2 * CV_PI * n) / numNeighbor));int fx static_castint(floor(x)); // 向下取整它返回的是小于或等于函数参数,并且与之最接近的整数int fy static_castint(floor(y));int cx static_castint(ceil(x)); // 向上取整它返回的是大于或等于函数参数,并且与之最接近的整数int cy static_castint(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 row lbpRadius; row (grayImg.rows - lbpRadius); row){for (int col lbpRadius; col (grayImg.cols - lbpRadius); col){float t w1 * grayImg.atuchar(row fy, col fx) w2 * grayImg.atuchar(row fy, col cx) w3 * grayImg.atuchar(row cy, col fx) w4 * grayImg.atuchar(row cy, col cx);elbpImg.atuchar(row - lbpRadius, col - lbpRadius) ((t grayImg.atuchar(row, col)) (abs(t - grayImg.atuchar(row, col)) std::numeric_limitsfloat::epsilon())) n;}}}return elbpImg;
}int main(int argc, char** argv)
{cv::Mat img cv::imread(luna.png);//cv::Mat img;//resize(img, img, cv::Size(800, 500), 0, 0, cv::INTER_AREA);if (img.empty()){cout 请确认图像文件名称是否正确 endl;return -1;}imshow(img, img);// 多分辨率LBPcv::Mat lbpImg ExpandLocalBinaryPattern(img);imshow(多分辨率LBP, lbpImg);cv::waitKey(0);return 0;}
三、结果展示