反向投影
计算流程
- 设有原灰度图像矩阵img:
1 2 3 4
5 6 7 7
9 8 0 1
5 6 7 6
-
将灰度值划分为如下四个区间:
[0,2] [3,5] [6,8] [9,11] -
直方图的范围–> 0,11
-
得到这个图像矩阵的直方图hist= 4 4 6 2
-
接下来计算反向投影矩阵:
-
反向投影矩阵的大小和原灰度图像矩阵的大小相同!
-
原图像中坐标为(0,0)的灰度值为1,1位于区间[0,2] 中,区间[0,2] 对应的直方图值为4,所以反向投影矩阵中中坐标为(0,0)的值记为4
-
按上面的计算方法,可以得到Image的直方图反向投影矩阵为:
4 4 4 4
4 6 6 6
2 2 4 4
4 6 6 6
-
实际上是原图像的256个灰度值被置为很少的几个值了,具体有几个值,要看把0~255划分为多少个区间****(bin)!有多少个bin,就有多个值
-
反向投影矩阵中某点的值就是它对应的原图像中的点所在区间的灰度直方图值。所以我们可以看出,一个区间点越多,在反向投影矩阵中就越亮。
-
那么怎么理解反向投影矩阵中的“反向”二字呢?从这个过程可以看出,我们是先求出原图像的直方图,再由直方图得到反向投影矩阵,由直方图到反向投影矩阵实际上就是一个反向的过程,所以叫反向。
-
通过图像的反向投影矩阵,我们实际上把原图像简单化了,简单化的过程实际上就是提取出图像的某个特征。所以以后我们可以用这个特征来对比两幅图,如果两幅图的反向投影矩阵相似或相同,那么我们就可以判定这两幅图这个特征是相同的。那么怎么对比相似度呢,可以通过campareHist
代码实现
//===============================================================
//FileName:
// clacBackProject.cpp
//Date:
// 2019/11/27
//Author:
// khoing(https://blog.csdn.net/qq_45391763)
//===============================================================
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat g_srcImage; Mat g_hsvImage