LBP图像特征提取
发布时间
阅读量:
阅读量
理论部分可参考:
https://www.cnblogs.com/mikewolf2002/p/3438698.html
代码实现如下:
#include<opencv.hpp>
using namespace cv;
using namespace std;
int sign(int num1, int num2)
{
if (num1 >= num2)
return 1;
return 0;
}
//LBP 模板大小为3*3
void LBP(const Mat & src, Mat & dst)
{
if (!src.data)
return;
for (int u = 0; u < src.rows;u++)
for (int v = 0; v < src.cols;v++)
{
if (u - 1 >= 0 && v - 1 >= 0 && u + 1 < src.rows && v + 1 < src.cols)
{
int FirC = dst.at<Vec3b>(u, v)[0];
int SecC = dst.at<Vec3b>(u, v)[1];
int ThiC = dst.at<Vec3b>(u, v)[2];
dst.at<Vec3b>(u, v)[0] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[0], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[0], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[0], FirC) +
16 * sign(src.at<Vec3b>(u, v + 1)[0], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[0], FirC) + 4 * sign(src.at<Vec3b>(u+1, v)[0], FirC) +
2 * sign(src.at<Vec3b>(u + 1, v - 1)[0], FirC) + sign(src.at<Vec3b>(u , v - 1)[0], FirC);
dst.at<Vec3b>(u, v)[1] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[1], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[1], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[1], FirC) +
16 * sign(src.at<Vec3b>(u, v + 1)[1], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[1], FirC) + 4 * sign(src.at<Vec3b>(u + 1, v)[1], FirC) +
2 * sign(src.at<Vec3b>(u + 1, v - 1)[1], FirC) + sign(src.at<Vec3b>(u, v - 1)[1], FirC);
dst.at<Vec3b>(u, v)[2] = 128 * sign(src.at<Vec3b>(u - 1, v - 1)[2], FirC) + 64 * sign(src.at<Vec3b>(u - 1, v)[2], FirC) + 32 * sign(src.at<Vec3b>(u - 1, v + 1)[2], FirC) +
16 * sign(src.at<Vec3b>(u, v + 1)[2], FirC) + 8 * sign(src.at<Vec3b>(u + 1, v + 1)[2], FirC) + 4 * sign(src.at<Vec3b>(u + 1, v)[2], FirC) +
2 * sign(src.at<Vec3b>(u + 1, v - 1)[2], FirC) + sign(src.at<Vec3b>(u, v - 1)[2], FirC);
}
else
{
dst.at<Vec3b>(u, v)[0] = src.at<Vec3b>(u, v)[0];
dst.at<Vec3b>(u, v)[1] = src.at<Vec3b>(u, v)[1];
dst.at<Vec3b>(u, v)[2] = src.at<Vec3b>(u, v)[2];
}
}
}
int main()
{
cv::Mat image1, image2;
image1 = cv::imread("F:\ ebook\ opencv\ LearningOpenCV3\ test\ test\ lenna.bmp");
cv::Mat resultimage(image1.rows,image1.cols,CV_8UC3);
namedWindow("原始图像", WINDOW_AUTOSIZE);
cv::imshow("原始图像", image1);
cv::waitKey(0);
//LBP特征提取
LBP(image1, resultimage);
namedWindow("LBP图像", WINDOW_AUTOSIZE);
cv::imshow("LBP图像", resultimage);
cv::waitKey(0);
cv::imwrite("LBP图像.jpg", resultimage);
return 0;
}

全部评论 (0)
还没有任何评论哟~
