积分图介绍

定义:图像左上方的像素点值的和;

在Adaboost算法中可用于加速计算Haar或MB-LBP特征值,如下图:

二、代码实现

#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/imgproc/imgproc_c.h> using namespace cv; int calcIntImage(unsigned char *pucSrcImage, unsigned int *pucDstImage, int width, int height); int main(int argv, char **argc)
{
IplImage *pstImage = cvLoadImage("D:\\test01.JPG", CV_LOAD_IMAGE_COLOR);
IplImage *pstYUVImage = cvCreateImage(cvSize(pstImage->width, pstImage->height), IPL_DEPTH_8U, );
unsigned char *pucImage = (unsigned char*)malloc(pstImage->width * pstImage->height * sizeof(unsigned char));
unsigned int *puiIntImage = (unsigned int*)malloc((pstImage->width + ) * (pstImage->height + ) * sizeof(unsigned int)); cvCvtColor(pstImage, pstYUVImage, CV_BGR2YUV); for(int i = ; i < pstImage->width * pstImage->height; i++)
{
//提取Y分量
pucImage[i] = pstYUVImage->imageData[i*];
} /* 计算积分图 */
calcIntImage(pucImage, puiIntImage, pstImage->width, pstImage->height); /* 测试代码,测试是否计算正确 */
for(int i = ; i < ; i++)
{
for(int j = ; j < ; j++)
{
printf("%d ", (int)(pucImage[i*pstImage->width + j]));
}
printf("\n");
}
printf("\n");
for(int i = ; i < ; i++)
{
for(int j = ; j < ; j++)
{
printf("%4d ", (int)(puiIntImage[i*(pstImage->width + ) + j]));
}
printf("\n");
}
/* 测试代码结束 */ cvShowImage("Win", pstImage);
cvWaitKey(); cvReleaseImage(&pstImage);
cvReleaseImage(&pstYUVImage);
if(NULL != pucImage)
{
free(pucImage);
pucImage = NULL;
}
if(NULL != puiIntImage)
{
free(puiIntImage);
puiIntImage = NULL;
}
return ;
} int calcIntImage(unsigned char *pucSrcImage, unsigned int *puiDstImage, int width, int height)
{
int i= , j = , sum = ;
int iIntImageWidth = width + ;
int iIntImageHeight = height + ;
unsigned char *pucSrcImageTmp;
unsigned int *puiDstImageTmp; pucSrcImageTmp = pucSrcImage; /* 存储每列的和 */
unsigned int *puiImageRow = (unsigned int *)malloc(width * sizeof(unsigned int));
memset(puiImageRow, , width * sizeof(unsigned int));
puiDstImageTmp = puiDstImage; /* 积分图第一行清0 */
memset(puiDstImageTmp, , iIntImageWidth);
puiDstImageTmp += iIntImageWidth; /* 积分图第一列清0 */
for(i = ; i < height; i++)
{
*puiDstImageTmp = ;
puiDstImageTmp += iIntImageWidth;
} puiDstImageTmp = puiDstImage + iIntImageWidth;
/* 开始计算积分图 */
for(i = ; i < height; i++)
{
for(j = ; j < width; j++)
{
puiImageRow[j] += pucSrcImageTmp[j];
puiDstImageTmp[j+] = puiDstImageTmp[j] + puiImageRow[j];
}
puiDstImageTmp += iIntImageWidth;
pucSrcImageTmp += width;
} if(NULL != puiImageRow)
{
free(puiImageRow);
puiImageRow = NULL;
}
return ;
}

三、计算结果

如下图,结果OK~

【AdaBoost算法】积分图代码实现的更多相关文章

  1. 集成学习值Adaboost算法原理和代码小结(转载)

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...

  2. 《机器学习实战》AdaBoost算法(手稿+代码)

    Adaboost:多个弱分类器组成一个强分类器,按照每个弱分类器的作用大小给予不同的权重 一.Adaboost理论部分 1.1 adaboost运行过程 注释:算法是利用指数函数降低误差,运行过程通过 ...

  3. 数据挖掘算法学习(八)Adaboost算法

    本文不定期更新.原创文章,转载请附上链接http://blog.csdn.net/iemyxie/article/details/40423907 谢谢 Adaboost是一种迭代算法,其核心思想是针 ...

  4. 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

    浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ...

  5. 积分图实现均值滤波的CUDA代码

    没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...

  6. 04-04 AdaBoost算法代码(鸢尾花分类)

    目录 AdaBoost算法代码(鸢尾花分类) 一.导入模块 二.导入数据 三.构造决策边界 四.训练模型 4.1 训练模型(n_e=10, l_r=0.8) 4.2 可视化 4.3 训练模型(n_es ...

  7. Adaboost算法及其代码实现

    . . Adaboost算法及其代码实现 算法概述 AdaBoost(adaptive boosting),即自适应提升算法. Boosting 是一类算法的总称,这类算法的特点是通过训练若干弱分类器 ...

  8. 【AdaBoost算法】基于OpenCV实现人脸检测Demo

    一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...

  9. Adaboost算法结合Haar-like特征

    Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...

随机推荐

  1. 移动端 ios 长按复制兼容方案

    移动端页面,需要复制一段文字码. 在ios中,长按文字区域,默认选中的范围,超出了我长按的文字区域, 把上面的图片和下面的另一个div的文字也给我包含进来了,并不是我想要的! 举个例子: 如下图: 1 ...

  2. 说说jsonp

    什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料.   首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...

  3. CMD魔法堂:支持显示UTF8编码的中文

    一.前言 在Unbuntu中用sqlite3-command-line操作sqlite3还好好的,到了windows下查询表内容时发现中文全部乱码了!马上想到sqlite3内部使用utf-8对字符进行 ...

  4. dos系统

    实验一  命令解释程序的编写 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS,UNIX的命 ...

  5. C#开源资源项目

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...

  6. QR二维码生成器源码(中间可插入小图片)

    二维码终于火了,现在大街小巷大小商品广告上的二维码标签都随处可见,而且大都不是简单的纯二维码,而是中间有个性图标的二维码. 我之前做了一个使用google开源项目zxing实现二维码.一维码编码解码的 ...

  7. 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式

    [源码下载] 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 绑定 通过 M ...

  8. 重新想象 Windows 8 Store Apps (63) - 通信: WebSocket

    [源码下载] 重新想象 Windows 8 Store Apps (63) - 通信: WebSocket 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通信 So ...

  9. maven-dependency-plugin插件的使用

    maven-dependency-plugin插件的使用   maven-dependency-plugin是 处理与依赖相关的插件.它有很多可用的goal,大部分是和依赖构建.分析和解决相关的goa ...

  10. CentOS 编译安装 MySQL5.7

    下载 所有版本下载地址: http://dev.mysql.com/downloads/mysql/ 此处用 5.7.10 wget http://dev.mysql.com/get/Download ...