积分图像
2015-06-06 10:30
162 查看
积分图像(integral image)是一种快速计算矩形区域之和的数据结构,常利用它对算法进行加速。积分图像中
处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即:
其中
为原图像,
为积分图像。图1是积分图像的示意。
图1
积分图像是用来加速算法的,因此求取积分图像本身复杂度不能很高,否则就失去了意义。为了快速的计算出积分图像,需要充分利用已经计算出的结果,避免重复计算。计算公式如下:
下图是该公式的原理示意:
图2
下面给出计算积分图像的matlab程序:
Integral.m
main.m
图3
积分图像是一种预计算技术,本质是空间换时间。得到积分图像后,通过4次查表便可以在常量时间内计算出任意一个矩形区域的灰度之和。如图4,为了计算ABCD围成的红色矩形区域中
的和,需要从它的积分图像中取出四个值
、
、
、
并进行如下计算:
图4
值得注意的是,上述的A、B、C三个像素点并不在红色区域内,如图5所示,这在编程的时候需要格外注意!
图5
处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即:
其中
为原图像,
为积分图像。图1是积分图像的示意。
图1
积分图像是用来加速算法的,因此求取积分图像本身复杂度不能很高,否则就失去了意义。为了快速的计算出积分图像,需要充分利用已经计算出的结果,避免重复计算。计算公式如下:
下图是该公式的原理示意:
图2
下面给出计算积分图像的matlab程序:
Integral.m
function I=Integral(Img) Img=double(Img); [m,n]=size(Img); I=zeros(m,n); for i=1:m for j=1:n if i==1 && j==1 %积分图像左上角 I(i,j)=Img(i,j); elseif i==1 && j~=1 %积分图像第一行 I(i,j)=I(i,j-1)+Img(i,j); elseif i~=1 && j==1 %积分图像第一列 I(i,j)=I(i-1,j)+Img(i,j); else %积分图像其它像素 I(i,j)=Img(i,j)+I(i-1,j)+I(i,j-1)-I(i-1,j-1); end end end
main.m
close all; clear all; clc; Img=double(imread('lena.tif')); Int=integral(Img); figure; imshow([Img/max(Img(:)),Int/max(Int(:))]);
图3
积分图像是一种预计算技术,本质是空间换时间。得到积分图像后,通过4次查表便可以在常量时间内计算出任意一个矩形区域的灰度之和。如图4,为了计算ABCD围成的红色矩形区域中
的和,需要从它的积分图像中取出四个值
、
、
、
并进行如下计算:
图4
值得注意的是,上述的A、B、C三个像素点并不在红色区域内,如图5所示,这在编程的时候需要格外注意!
图5
相关文章推荐
- 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
- HTML中head里的内容经浏览器解析后全到body里了
- 常用的百度API地图操作
- 28. Implement strStr()
- 2015/6/5 杭州--米趣
- 在mysql中统计每人每天num总和
- 小型电子商务网站设计原则
- 修改页面JS 360浏览器
- Base关键字,指定调用基类中的哪个构造函数
- Android广播接收机制详细介绍(附短信接收实现)
- MyEclipse 2015优化七步法<亲测有效>
- 大型电子商务网站架构
- Activity的生命周期
- PHP学习之[第01讲]开启PHP学习之路,融入新互联网时代
- Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
- mysql的常用语句
- UItableView详解--1
- 修改Visual Studio Express 2012新建C++文件编码
- 一起talk C栗子吧(第七回:C语言实例--进制转换)
- JAVA