• 积分图像


    积分图像(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


  • 相关阅读:
    VS2005调试问题与解决方法集锦
    [转]在.net 2005中,将数据集序列化成二进制,提高远程传输效率
    DotNet 网上相关资源
    NeHE中文学习网址
    Aspx页上设置客户端的缓存时间
    动态调用Win32 Function(API)
    PB调用COM组件
    字段绑定的效率问题
    三维向量类
    用DataTable绑定TreeView的方法
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6910435.html
Copyright © 2020-2023  润新知