斜积分计算

    最近在参考OpenCV自己实现Haar特征,对积分图的计算稍微整理了一下,累加积分和平方积分就不说了,主要分析一下斜积分。

斜积分计算_第1张图片

这是OpenCV的实现方式,一下子没整明白范围,所以自己画了个图比划了一下。

斜积分计算_第2张图片

        从上图看去,要计算点(X,Y)上面的面积,需要遍历上面所有的点,

 

斜积分计算_第3张图片

    但是对区域中的点进行遍历时,并不是每行都是从行初开始,行末结束的。由于斜积分都是计算的45°,所以可以求出它的每行的首尾位置。

    没有以C语言实现,仅用MATLAB写出了其中的逻辑。

%斜积分
aa=imread('aaa.png');
aa=double(rgb2gray(aa));
[imagerow,imagecol]=size(aa);

I=zeros(20);

for Y=1:imagerow
  for X=1:imagecol
    for j=1:Y
      %确定斜积分具体区域
      if Y>=X && Y-j>=X
          tbegin=1;
      elseif Y>=X && Y-jimagecol && X+Y-j>=imagecol
          tend=imagecol;
      elseif X+Y>imagecol && X+Y-j

        逻辑大概是这样,只是索引有些错误,因为MATLAB的索引是从1开始的。

感觉上面的公式意思也是这个意思,只是这个比较直白了

你可能感兴趣的:(OpenCV)