图像处理之积分图算法

简介: 图像处理之积分图算法

图像处理之积分图算法


一:积分图来源与发展


积分图像是Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。随后这种技术被应用到基于NCC的快速匹配、对象检测和SURF变换中、基于统计学的快速滤波器等方面。积分图像是一种在图像中快速计算矩形区域和的方法,这种算法主要优点是一旦积分图像首先被计算出来我们可以计算图像中任意大小矩形区域的和而且是在常量时间内。这样在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。第一个应用积分图像技术的应用是在Viola-Jones的对象检测框架中出现。


二:积分图像概念


在积分图像(Integral Image - ii)上任意位置(x, y)处的ii(x, y)表示该点左上角所有像素之和,表示如下:

20160930133226930.png


20160930133251758.png



从给定图像I从上到下、从左到右计算得到和的积分图像公式如下:


20160930133430636.png


其中(x<0 || y<0) 时ii(x,y)=0, i(x,y)=0


得到积分图像之后,图像中任意矩形区域和通过如下公式计算:

20160930133515618.png

20160930133542994.png




三:代码实现:


积分图像算法的Java代码实现如下:

package com.gloomyfish.ii.demo;
 
public class IntIntegralImage extends AbstractByteProcessor {
  // sum index tables
  private int[] sum;
  private int[] squaresum;
  // image
  private byte[] image;
  private int width;
  private int height;
 
  public byte[] getImage() {
    return image;
  }
 
  public void setImage(byte[] image) {
    this.image = image;
  }
  
  public int getBlockSum(int x, int y, int m, int n) {
    int swx = x + n/2;
    int swy = y + m/2;
    int nex = x-n/2-1;
    int ney = y-m/2-1;
    int sum1, sum2, sum3, sum4;
    if(swx >= width) {
      swx = width - 1;
    }
    if(swy >= height) {
      swy = height - 1;
    }
    if(nex < 0) {
      nex = 0;
    }
    if(ney < 0) {
      ney = 0;
    }
    sum1 = sum[ney*width+nex];
    sum4 = sum[swy*width+swx];
    sum2 = sum[swy*width+nex];
    sum3 = sum[ney*width+swx];
    return ((sum1 + sum4) - sum2 - sum3);
  }
  
  public int getBlockSquareSum(int x, int y, int m, int n) {    
    int swx = x + n/2;
    int swy = y + m/2;
    int nex = x-n/2-1;
    int ney = y-m/2-1;
    int sum1, sum2, sum3, sum4;
    if(swx >= width) {
      swx = width - 1;
    }
    if(swy >= height) {
      swy = height - 1;
    }
    if(nex < 0) {
      nex = 0;
    }
    if(ney < 0) {
      ney = 0;
    }
    sum1 = squaresum[ney*width+nex];
    sum4 = squaresum[swy*width+swx];
    sum2 = squaresum[swy*width+nex];
    sum3 = squaresum[ney*width+swx];
    return ((sum1 + sum4) - sum2 - sum3);
  }
 
  @Override
  public void process(int width, int height) {
    this.width = width;
    this.height = height;
    sum = new int[width*height];
    squaresum = new int[width*height];
    // rows
    int p1=0, p2=0, p3=0, p4;
    int offset = 0, uprow=0, leftcol=0;
    int s=0;
    for(int row=0; row<height; row++ ) {
      offset = row*width;
      uprow = row-1;
      for(int col=0; col<width; col++) {
        leftcol=col-1;
        p1=image[offset]&0xff;// p(x, y)
        p2=(leftcol<0) ? 0:sum[offset-1]; // p(x-1, y)
        p3=(uprow<0) ? 0:sum[offset-width]; // p(x, y-1);
        p4=(uprow<0||leftcol<0) ? 0:sum[offset-width-1]; // p(x-1, y-1);
        s = sum[offset]= p1+p2+p3-p4;
        squaresum[offset]=s*s;
        // System.out.print("\t[" + offset+"]=" + s);
        offset++;
      }
      // System.out.println();
    }
  }
  
  public static void main(String[] args) {
    byte[] data = new byte[]{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    IntIntegralImage ii = new IntIntegralImage();
    ii.setImage(data);
    ii.process(7, 3);
    
    int sum = ii.getBlockSum(3, 2, 3, 3);
    System.out.println("sum = " + sum);
  }
}

后续应用相关博文会陆续出炉!

相关文章
|
8月前
|
算法 计算机视觉
图像处理之积分图应用四(基于局部均值的图像二值化算法)
图像处理之积分图应用四(基于局部均值的图像二值化算法)
585 0
|
8月前
|
监控 算法 图计算
图像处理之积分图应用三(基于NCC快速相似度匹配算法)
图像处理之积分图应用三(基于NCC快速相似度匹配算法)
102 0
|
8月前
|
文字识别 算法 计算机视觉
图像处理之Zhang Suen细化算法
图像处理之Zhang Suen细化算法
196 0
|
8月前
|
资源调度 算法 计算机视觉
图像处理之积分图应用二(快速边缘保留滤波算法)
图像处理之积分图应用二(快速边缘保留滤波算法)
50 0
|
8月前
|
算法 BI 计算机视觉
图像处理之积分图应用一(半径无关的快速模糊算法)
图像处理之积分图应用一(半径无关的快速模糊算法)
63 0
|
8月前
|
算法 计算机视觉
图像处理之基于泛红算法的二值图像内部区域填充
图像处理之基于泛红算法的二值图像内部区域填充
61 0
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
147 68
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。

热门文章

最新文章