比较两个lbp (opencvc++)
Comparing 2 LBPs (OpenCV C++)
我正在使用bytefish.de中的代码来生成我的lbp。如果我生成2个lbp及其相应的直方图,那么比较它们的最佳方法是什么?
这是我到目前为止的代码:
#include "lbp.hpp"
#include "histogram.hpp"
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main()
{
//template image
Mat temp = imread("Template.jpg",1);
//image to be compared to
Mat match = imread("Match.jpg",1);
Mat dst,dst2; // image after preprocessing
Mat lbp,lbp2; // lbp image
Mat hist,hist2;
//Convert to gray
cvtColor(temp, dst, 6);
cvtColor(match, dst2, 6);
//remove noise
GaussianBlur(dst, dst, Size(5,5), 5, 3, BORDER_CONSTANT);
GaussianBlur(dst2, dst2, Size(5,5), 5, 3, BORDER_CONSTANT);
//gets the lbp
lbp::ELBP(dst,lbp,1,8);
lbp::ELBP(dst2,lbp2,1,8);
// normalize(lbp2, lbp2, 0, 255, NORM_MINMAX, CV_8UC1);
//normalize(lbp, lbp, 0, 255, NORM_MINMAX, CV_8UC1);
//get histograms
lbp::histogram(lbp,hist,255);
lbp::histogram(lbp2,hist2,255);
//comparing the 2 LBP histograms
double compareHist = cv::norm(hist-hist2);
cout<<compareHist<<endl;
waitKey(0);
return 0;
}
基本上它给了我一个量化的数字,关于这两个图像有多相似。我的问题是,如何改善这个结果?根据2个lbp的相似程度,有什么更好的方法来获得一个可量化的数字?
谢谢。
LBP只是给你一个(相当大的)特征向量。为了使任何有用的东西,你通常会处理许多示例图像(都属于你定义为"相似"的图像类别),然后使用支持向量机训练一种行为,让它识别这种相似性。
仅仅比较两个lpb通常不会给你很多关于两个图像相似性的信息。要看到这一点:只需将第一张图像转换为LBP算法的一个单元格大小。然后第二个LBP将看起来是第一个LBP的移位版本。由于您通常没有关于图像如何对齐或旋转的信息,因此很难通过一些简单的逻辑来比较两个lbp。
相关文章:
- 如何使用opencvc++拍摄动态视频图像和深度图像
- 在opencvc++中获取并保存相机的特定帧
- 如何规范化从不同大小的补丁中获得的 LBP 直方图
- OpenCV LBP 级联分类器模型 XML 文件中各种参数的含义是什么?
- 如何使用 opencv c++ 从手部轮廓中提取 LBP 特征
- 在python中使用暴露的elbp函数后,无法显示LBP图像
- 创建LBP直方图
- 如何在opencvc++中绘制眼睛周围的旋转边界框
- 从帧逐帧删除对象(ROI内),然后在opencvc++中组合回视频
- 如何使用just *.从opencvc++中替换*.dll文件
- 比较两个lbp (opencvc++)
- 在opencvc++中设置彩色图像中的像素(i,j)为黑色
- opencvc++图像导出到c#
- opencvc++接口如何管理ROI
- 使用滑块移动对象opencvc++
- 在opencvc++中设置图像区域为零的最佳方法
- 眨眼检测opencvc++
- 在opencvc++中移动掩码
- 透明像素在opencvc++(当使用GrabCut)
- 理解opencvc++中的Rect