【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 ...
随机推荐
- js-计时事件
JavaScript 一个设定的时间间隔之后来执行代码,称之为计时事件. 主要通过两个方法来实现: 1.setInterval() - 间隔指定的毫秒数不停地执行指定的代码. 2.se ...
- .NET 笔试题--自已作答
以下题目,我已全部作答,答案仅供参考!水平和理解有限,可能有误,欢迎指正,谢谢! 1. 填空: (1)面向对象的语言具有__继承______性._____多态____性.____封装____性. (2 ...
- Java魔法堂:String.format详解
目录 一.前言 二.重载方法 三.占位符 四.对字符.字符串进行格式化 五.对整数进行格式化 六.对浮点数进行格式化 七.对日期时间进行格式化 ...
- 关于Latch争用
Latch是什么 Latch是SQL Server引擎保证内存中的结构的一致性的轻量同步机制.比如索引,数据页和内部结构(比如非叶级索引页).SQL Server使用Buffer Latch保 ...
- 订餐APP第二次sprint+燃尽图
MY-HR 成员: 角色分配 学号 博客园 团队贡献分 围观其他小组评论 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 21 ht ...
- 甲骨文白桃花心木P6 EPPM 8.2项目点提供样本
甲骨文白桃花心木样例代码 除非明确确定,这里的示例代码不是认证或Oracle支持;它只是用于教育或测试的目的. 你必须接受 许可协议下载此示例代码. 接受 许可协议 | 下降 许可协议 的名字 ...
- URL与图像格式
绝对/相对URL “绝对URL”是指资源的完整的地址,通常以“http://”打头: “相对URL”是指Internet上资源相对于当前页面的地址,它包含从当前页面指向目标资源位置的路径,不以“htt ...
- MVC WebApi跨域ajax接受post数据笔记
后端api代码示例: [HttpPost] public string callbackUrl([FromBody]SZRCallBackModel cbm) { try { if (cbm == n ...
- 一个让echarts中国地图包含省市轮廓的技巧
背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂 ...
- Azure开发者任务之七:在Azure托管服务中托管WCF服务角色
在一个托管服务中托管一个WCF服务角色和托管一个ASP.Net Web Role基本类似. 在上一篇文章中,我们学习了如何使用WCF Service Web Role. 在本文中,我会对上一篇文章进行 ...