【AdaBoost算法】积分图代码实现
一、积分图介绍
定义:图像左上方的像素点值的和;
在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算法】积分图代码实现的更多相关文章
- 集成学习值Adaboost算法原理和代码小结(转载)
在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类: 第一个是个体学习器之间存在强依赖关系: 另一类是个体学习器之间不存在强依赖关系. 前者的代表算法就是提升(bo ...
- 《机器学习实战》AdaBoost算法(手稿+代码)
Adaboost:多个弱分类器组成一个强分类器,按照每个弱分类器的作用大小给予不同的权重 一.Adaboost理论部分 1.1 adaboost运行过程 注释:算法是利用指数函数降低误差,运行过程通过 ...
- 数据挖掘算法学习(八)Adaboost算法
本文不定期更新.原创文章,转载请附上链接http://blog.csdn.net/iemyxie/article/details/40423907 谢谢 Adaboost是一种迭代算法,其核心思想是针 ...
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ...
- 积分图实现均值滤波的CUDA代码
没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...
- 04-04 AdaBoost算法代码(鸢尾花分类)
目录 AdaBoost算法代码(鸢尾花分类) 一.导入模块 二.导入数据 三.构造决策边界 四.训练模型 4.1 训练模型(n_e=10, l_r=0.8) 4.2 可视化 4.3 训练模型(n_es ...
- Adaboost算法及其代码实现
. . Adaboost算法及其代码实现 算法概述 AdaBoost(adaptive boosting),即自适应提升算法. Boosting 是一类算法的总称,这类算法的特点是通过训练若干弱分类器 ...
- 【AdaBoost算法】基于OpenCV实现人脸检测Demo
一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
随机推荐
- html5 audio/video 的那些坑
当我最近项目用到audio的时候,我们用到了jPlayer作为三方库. 功能实现了,暂停播放,进度条什么的,都很顺利的搞定了.后来考虑到当网速过慢时需要给播放按钮一个载入动画,然后就一发不可收拾了. ...
- E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
安装terminator等一些软件等时候,遇到了这样等问题 leo@leo:~$ sudo apt-get install terminator [sudo] password for leo: 正在 ...
- String-------RegularHelper
/// <summary> /// 正则表达式相关方法集合 /// </summary> public static class RegularHelper { private ...
- 分析SIX锁和锁分区导致的死锁
什么是SIX锁? 官方文档锁模式中说到: 意向排他共享 (SIX):保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁. 顶级资源允 ...
- [moka同学笔记]yii2.0表单的使用
1.创建model /biaodan.php <?php /** * Created by PhpStorm. * User: moka同学 * Date: 2016/08/05 * Tim ...
- Linux Shell系列教程之(十四) Shell Select教程
本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...
- Javascript定时跳转
因为做项目,用到跳转回上级页面,这里设置定时3秒跳转到目标页面 <script> setInterval("myInterval()",3000);//1000为1秒钟 ...
- SQL Server 全局变量
SQL Server中所有全局变量都使用两个@符号作为前缀 --1.@@error 最后一个T-SQL错误的错误号(目的是或得违反约束的错误号) insert into Subject values( ...
- 西邮Linux兴趣小组2016免试题
4.28的宣讲会圆满结束(就在写这段话之前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:还是有历史,还是会玩,还是厉害哈. 华丽的分割线里面是自己之前的攻关战略,最后补充了宣讲会上学长 ...
- C# 循环语句 for循环
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句,如 ...