积分图加速

积分图加速

常用于计算面积、加速卷积运算、避免重复计算等
在这里插入图片描述

1.一种简单的快速计算方法

在这里插入图片描述

void integral(unsigned char*inputMatrix,unsigned char*outpMatirx,int width,int height)
{
    unsigned long *columnSum=new unsigned long[width];
    for(int i=0;i<width;++i)
    {
        columnSum[i]=inputMatrix[i];
        outputMatrix[i]=inputMatrix[i];
        if(i>0)
        {
            outputMatrix[i]+=outputMatrix[i-1];
        }
    }
    for(int i=1;i<height;i++)
    {
        int offset=i*width;
        //第一列
        outputMatrix[offset]=outputMatrix[offset-width]+inputMatrix[offset];
        //其他列
        for(int j=1;j<width;++j)
        {
            outputMatrix[offset+j] = outputMatrix[offset+j-1] + outputMatrix[offset-width] + outputMatrix[offset-width-1] + inputMatrix[offset]; 
        }
    }
    return outputMatrix;
}

2.一种改进的快速积分图

在这里插入图片描述

void fastIntegral(unsigned char* inputMatrix, unsigned long* outputMatrix, int width, int height){
	unsigned long *columnSum = new unsigned long[width]; // sum of each column
	// calculate integral of the first line
	for(int i=0;i<width;i++){
		columnSum[i]=inputMatrix[i];
		outputMatrix[i] = inputMatrix[i];
		if(i>0){
			outputMatrix[i] += outputMatrix[i-1];
		}
	}
	for (int i=1;i<height;i++){
		int offset = i*width;
		// first column of each line
		columnSum[0] +=inputMatrix[offset];
		outputMatrix[offset] = columnSum[0];
		 // other columns 
		for(int j=1;j<width;j++){
			columnSum[j] += inputMatrix[offset+j];
			outputMatrix[offset+j] = outputMatrix[offset+j-1] + columnSum[j]; 
		}
	}
	return ;
}

参考:https://blog.csdn.net/xiaowei_cqu/article/details/17928733

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月醉窗台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值