Integray Image(积分图)
来源:互联网 发布:linux nslookup mx 编辑:程序博客网 时间:2024/05/22 00:21
在研究openTLD中的varianceFilter时发现了一个术语,Integray Image,这里做个记录,以免忘记
积分图的定义(百度百科):
对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和。
使用Integray Image的主要目标是为了减少计算量,在很多算法中,图像需要做重复的累加工作,如果每次都重新进行累加,会较浪费时间,所以可以先制作一副积分图,当需要某块区域的累加时,使用积分图可以简单的获取。
在Georg大大版本openTLD中计算积分图的代码:
template <class T>class IntegralImage{public: T *data; /* Array containg the entries for the integral image in row-first manner. Of size width*height. Allocated by tldAllocIntImg */ /* width, height: Dimensions of integral image.*/ int width; int height; IntegralImage(cv::Size size) { data = new T[size.width * size.height]; } virtual ~IntegralImage() { delete[] data; } void calcIntImg(const cv::Mat &img, bool squared = false) { const unsigned char *input = (const unsigned char *)(img.data); T *output = data; for(int i = 0; i < img.cols; i++) { for(int j = 0; j < img.rows; j++) { T A = (i > 0) ? output[img.cols * j + i - 1] : 0; T B = (j > 0) ? output[img.cols * (j - 1) + i] : 0; T C = (j > 0 && i > 0) ? output[img.cols * (j - 1) + i - 1] : 0; T value = input[img.step * j + i]; if(squared) { value = value * value; } output[img.cols * j + i] = A + B - C + value; } } }};代码比较简单,积分图上某一点的值等于这个点向左的一个点的值(A)+向上一个点的值(B)-左上那个点的值(C)+原图中这个点的值(value),代码中的square选项如果为true则可以得出平方值的积分图,因为原程序中这里是用来求方差的,所以需要求一张普通的积分图和一张平方后的积分图。
0 0
- Integray Image(积分图)
- 关于积分图(Integral Image)
- integral image(积分图) 和 boxfilter
- image sensor 积分时间
- 积分图像(Integral Image)
- 积分图像(Integral Image)与积分直方图 (Integral Histogram)
- 积分图像(Integral Image)与积分直方图 (Integral Histogram)
- 积分图
- 积分图
- 积分图
- 积分图
- 积分图
- 积分图
- 积分图
- 积分图
- OpenCV中的Haar+Adaboost(二):积分图和45°旋转积分图
- OpenCV中的Haar+Adaboost(二):积分图和45°旋转积分图
- 【计算机视觉】积分图和积分直方图
- 创建第一个MVC项目
- MySQL Connector/C++ 简单例子
- KVO
- OmniGraffle (一)从工具栏开始
- 将GPIUmage集成到项目中
- Integray Image(积分图)
- [cocos2dx]事件分发机制--lua源码(二)
- html 横线的代码
- 咕噜小金鱼前来报到
- Setting中格式化SD卡
- ajax 小结
- leetcode 52: Maximum Subarray
- JForum 的 SSO集成
- hdu 5316 Magician 线段树