斜积分计算

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

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

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

 

    但是对区域中的点进行遍历时,并不是每行都是从行初开始,行末结束的。由于斜积分都是计算的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-j<X
          tbegin=j-Y+1;
      elseif Y<X
          tbegin=X-(Y-j)+1;
      end
      
      if X+Y<=imagecol
          tend=imagecol-X-Y-j;
      elseif X+Y>imagecol && X+Y-j>=imagecol
          tend=imagecol;
      elseif X+Y>imagecol && X+Y-j<imagecol
          tend=imagecol-j;
      end
      
      for i=tbegin:tend
          I(X,Y)=I(X,Y)+aa(i,j);
          
      end     
      
    end
  end
end

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值