一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

圖像處理之積分圖算法...

 mediatv 2021-11-23

圖像處理之積分圖算法

一:積分圖來源與發(fā)展

積分圖像是Crow在1984年首次提出,是為了在多尺度透視投影中提高渲染速度。隨后這種技術(shù)被應(yīng)用到基于NCC的快速匹配、對象檢測和SURF變換中、基于統(tǒng)計學(xué)的快速濾波器等方面。積分圖像是一種在圖像中快速計算矩形區(qū)域和的方法,這種算法主要優(yōu)點是一旦積分圖像首先被計算出來我們可以計算圖像中任意大小矩形區(qū)域的和而且是在常量時間內(nèi)。這樣在圖像模糊、邊緣提取、對象檢測的時候極大降低計算量、提高計算速度。第一個應(yīng)用積分圖像技術(shù)的應(yīng)用是在Viola-Jones的對象檢測框架中出現(xiàn)。

二:積分圖像概念

在積分圖像(Integral Image - ii)上任意位置(x, y)處的ii(x, y)表示該點左上角所有像素之和,表示如下:



從給定圖像I從上到下、從左到右計算得到和的積分圖像公式如下:


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

得到積分圖像之后,圖像中任意矩形區(qū)域和通過如下公式計算:



三:代碼實現(xiàn):

積分圖像算法的Java代碼實現(xiàn)如下:

  1. package com.gloomyfish.ii.demo;  
  2.   
  3. public class IntIntegralImage extends AbstractByteProcessor {  
  4.     // sum index tables  
  5.     private int[] sum;  
  6.     private int[] squaresum;  
  7.     // image  
  8.     private byte[] image;  
  9.     private int width;  
  10.     private int height;  
  11.   
  12.     public byte[] getImage() {  
  13.         return image;  
  14.     }  
  15.   
  16.     public void setImage(byte[] image) {  
  17.         this.image = image;  
  18.     }  
  19.       
  20.     public int getBlockSum(int x, int y, int m, int n) {  
  21.         int swx = x + n/2;  
  22.         int swy = y + m/2;  
  23.         int nex = x-n/2-1;  
  24.         int ney = y-m/2-1;  
  25.         int sum1, sum2, sum3, sum4;  
  26.         if(swx >= width) {  
  27.             swx = width - 1;  
  28.         }  
  29.         if(swy >= height) {  
  30.             swy = height - 1;  
  31.         }  
  32.         if(nex < 0) {  
  33.             nex = 0;  
  34.         }  
  35.         if(ney < 0) {  
  36.             ney = 0;  
  37.         }  
  38.         sum1 = sum[ney*width+nex];  
  39.         sum4 = sum[swy*width+swx];  
  40.         sum2 = sum[swy*width+nex];  
  41.         sum3 = sum[ney*width+swx];  
  42.         return ((sum1 + sum4) - sum2 - sum3);  
  43.     }  
  44.       
  45.     public int getBlockSquareSum(int x, int y, int m, int n) {        
  46.         int swx = x + n/2;  
  47.         int swy = y + m/2;  
  48.         int nex = x-n/2-1;  
  49.         int ney = y-m/2-1;  
  50.         int sum1, sum2, sum3, sum4;  
  51.         if(swx >= width) {  
  52.             swx = width - 1;  
  53.         }  
  54.         if(swy >= height) {  
  55.             swy = height - 1;  
  56.         }  
  57.         if(nex < 0) {  
  58.             nex = 0;  
  59.         }  
  60.         if(ney < 0) {  
  61.             ney = 0;  
  62.         }  
  63.         sum1 = squaresum[ney*width+nex];  
  64.         sum4 = squaresum[swy*width+swx];  
  65.         sum2 = squaresum[swy*width+nex];  
  66.         sum3 = squaresum[ney*width+swx];  
  67.         return ((sum1 + sum4) - sum2 - sum3);  
  68.     }  
  69.   
  70.     @Override  
  71.     public void process(int width, int height) {  
  72.         this.width = width;  
  73.         this.height = height;  
  74.         sum = new int[width*height];  
  75.         squaresum = new int[width*height];  
  76.         // rows  
  77.         int p1=0, p2=0, p3=0, p4;  
  78.         int offset = 0, uprow=0, leftcol=0;  
  79.         int s=0;  
  80.         for(int row=0; row<height; row++ ) {  
  81.             offset = row*width;  
  82.             uprow = row-1;  
  83.             for(int col=0; col<width; col++) {  
  84.                 leftcol=col-1;  
  85.                 p1=image[offset]&0xff;// p(x, y)  
  86.                 p2=(leftcol<0) ? 0:sum[offset-1]; // p(x-1, y)  
  87.                 p3=(uprow<0) ? 0:sum[offset-width]; // p(x, y-1);  
  88.                 p4=(uprow<0||leftcol<0) ? 0:sum[offset-width-1]; // p(x-1, y-1);  
  89.                 s = sum[offset]= p1+p2+p3-p4;  
  90.                 squaresum[offset]=s*s;  
  91.                 // System.out.print("\t[" + offset+"]=" + s);  
  92.                 offset++;  
  93.             }  
  94.             // System.out.println();  
  95.         }  
  96.     }  
  97.       
  98.     public static void main(String[] args) {  
  99.         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};  
  100.         IntIntegralImage ii = new IntIntegralImage();  
  101.         ii.setImage(data);  
  102.         ii.process(7, 3);  
  103.           
  104.         int sum = ii.getBlockSum(3, 2, 3, 3);  
  105.         System.out.println("sum = " + sum);  
  106.     }  
  107. }  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产免费自拍黄片免费看| 香港国产三级久久精品三级| 亚洲中文字幕亲近伦片| 丰满人妻一二区二区三区av| 国产精品欧美日韩中文字幕| 午夜精品麻豆视频91| 都市激情小说在线一区二区三区| 91精品国产品国语在线不卡 | 女同伦理国产精品久久久| 麻豆在线观看一区二区| 亚洲av又爽又色又色| 九九热这里只有精品哦| 国产免费一区二区三区不卡| 日韩精品一区二区三区含羞含羞草 | 91在线播放在线播放观看| 日韩黄色大片免费在线| 国产精品午夜性色视频| 日本精品中文字幕人妻| 又黄又爽禁片视频在线观看| 亚洲欧美日本国产不卡| 我想看亚洲一级黄色录像| 亚洲一区二区亚洲日本| 亚洲色图欧美另类人妻| 极品熟女一区二区三区| 国产精品一级香蕉一区| 亚洲第一视频少妇人妻系列| 深夜福利亚洲高清性感| 国产午夜福利在线观看精品| 在线视频免费看你懂的| 国产中文字幕一二三区| 亚洲伦理中文字幕在线观看 | 亚洲一区二区三区av高清| 亚洲欧美视频欧美视频| 成人免费高清在线一区二区| 中文字幕人妻日本一区二区| 国产超薄黑色肉色丝袜| 久久机热频这里只精品| 精品人妻一区二区三区在线看 | 国产原创中文av在线播放| 欧美一区二区三区五月婷婷| 最近中文字幕高清中文字幕无|