zoukankan      html  css  js  c++  java
  • 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏

    积分图像(integral image)是一种快速计算矩形区域之和的数据结构,常利用它对算法进行加速。积分图像中处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即:


    其中 为原图像, 为积分图像。图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


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    idea 连接 hive
    css img自适应
    测试视频文件
    ubuntu不显示ipv4地址的解决办法
    nginx path捕获
    union all两个结果集报ORA-12704: character set mismatch错误
    润乾报表试用指南
    报表工具对比之润乾报表与锐浪报表对比
    项目微管理36
    docker远程调用
  • 原文地址:https://www.cnblogs.com/luo-peng/p/4646217.html
Copyright © 2011-2022 走看看