最近看图像处理反向投影,看到几本书上说的都不是很清楚,自己也不是十分的理解。就在网上找资料,终于找到了一个说的非常直白清楚的文章:原文。
现贴出非常核心的原理:
假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:
(1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
(2)生成临时图像的直方图;
(3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;
(4)直方图对比结果c,就是结果图像(0,0)处的像素值;
(5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;
(6)重复(1)~(5)步直到输入图像的右下角。
其中第3步用到的进行直方图对比方法应该就是标准的哪几种标准的直方图对比方法。(也可以自己定义,即本着越相似值越大的原则就可以)。在Opencv中可以用compareHist()函数进行直方图对比,当然,我想在opencv中反向投影是默认选择了一种直方图对比方法,因为其函数calcBackProject()并没有提供选择直方图对比的算法。知道了此原理后,自己实现反向投影也会比较简单。
其实相当于直方图匹配。