• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      多分辨率曝光融合在安卓平臺(tái)上的實(shí)現(xiàn)

      2017-03-17 09:51:19徐志偉黃偉峰張海
      電腦知識與技術(shù) 2016年32期

      徐志偉++黃偉峰++張海

      摘要:數(shù)碼成像設(shè)備只能表示非常有限的動(dòng)態(tài)范圍,因此亮度差異很大的物體很難在一副圖像中清楚顯示。曝光融合就是將不同曝光條件下采集的圖像合并成一幅所有細(xì)節(jié)都清晰的圖像,而多分辨率曝光融合是其中一種簡單且高效的方法。該文闡述了該算法在安卓平臺(tái)上的設(shè)計(jì)和實(shí)現(xiàn)方法,并在手機(jī)上進(jìn)行測試,實(shí)驗(yàn)結(jié)果表明該算法能運(yùn)行在手機(jī)上,為以后測試更多曝光融合算法提供了一個(gè)平臺(tái)。

      關(guān)鍵詞:多分辨率曝光融合;安卓平臺(tái);系統(tǒng)實(shí)現(xiàn)

      中圖分類號:TP37 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)32-0262-02

      1 背景

      普通數(shù)碼相機(jī)或具有拍照功能的手機(jī)已成為人們記錄生活的主要工具。由于數(shù)碼成像設(shè)備能表示的動(dòng)態(tài)范圍遠(yuǎn)低于現(xiàn)實(shí)世界的動(dòng)態(tài)范圍,因此亮度差異很大的兩個(gè)對象難以在一幅圖像中清晰成像。曝光融合是通過圖像融合技術(shù),將多幅不同曝光條件下采集的圖像合成一幅更能反映現(xiàn)實(shí)景象,從而保證所有細(xì)節(jié)都比較清晰。這種算法簡化了中間過程,不需要生成高動(dòng)態(tài)范圍圖像,減少了相機(jī)響應(yīng)函數(shù)估計(jì)誤差對合成結(jié)果的影響,其中最具代表性的是多分辨率曝光融合算法[1]。

      該算法由T. Mertens、J. Kautz和F. V. Reeth共同提出,其主要思想是:首先,根據(jù)對比度、飽和度和曝光度,為原始輸入圖像計(jì)算權(quán)值矩陣;然后,對圖像進(jìn)行拉普拉斯分解,而對權(quán)值矩陣進(jìn)行高斯分解;最后,在對每一層的圖像分別融合后,將所有層的融合結(jié)果合并成一幅圖像。下面將介紹如何將該算法在安卓平臺(tái)上實(shí)現(xiàn)。

      2 多分辨率曝光融合在安卓平臺(tái)上的實(shí)現(xiàn)

      圖1 多分辨率曝光融合系統(tǒng)的UML圖

      為了能在手機(jī)端運(yùn)行曝光融合算法,這個(gè)系統(tǒng)至少包括連拍和多分辨率曝光融合兩大功能。當(dāng)選擇連拍時(shí),能進(jìn)入拍照畫面,并且能拍出多張具有不同曝光度的照片;當(dāng)選擇曝光融合時(shí),能夠?qū)x定的多張圖片進(jìn)行融合并顯示出結(jié)果圖片。為了實(shí)現(xiàn)這些功能,我們設(shè)計(jì)的類及類間關(guān)系如圖1所示。

      類MainActivity是該系統(tǒng)的第一個(gè)界面,主要包括連拍和融合2個(gè)按鈕,分別切換到拍照界面和融合界面。類CameraAty是拍照界面,不僅提供照片預(yù)覽功能,還能通過多次啟動(dòng)拍照并在每次啟動(dòng)前修改相機(jī)曝光值,達(dá)到采集具有不同曝光度的照片的效果。類rongheActivity是融合界面,用以顯示所有圖像,并提供選擇工具,一旦選中多幅圖像后通過開始融合按鈕,實(shí)現(xiàn)融合并顯示結(jié)果。

      類imageMap和類weightMap用來實(shí)現(xiàn)彩色圖像和權(quán)值映射的基本操作,并在此基礎(chǔ)上,類mulResDecompo實(shí)現(xiàn)了多分辨率曝光融合算法,其中3個(gè)主要成員函數(shù)exposure_fusion、gaussian_pyramid和laplacian_pyramid分別實(shí)現(xiàn)了融合算法的主體、高斯分解和拉普拉斯分解。用Java語言描述多分辨率曝光融合算法主體如下所示:

      public Bitmap exposure_fusion(List wms, List bmps){

      int nlev = (int)(Math.floor(Math.log((double)(Math.min(bmps.get(0).getWidth(),bmps.get(0).getHeight()))) / Math.log((double)2)));//根據(jù)輸入圖像的長度和寬度,自動(dòng)計(jì)算圖像分解的層數(shù)

      List ans = new ArrayList();

      for(int i = 0; i < wms.size(); i++){

      List pyrW = gaussian_pyramid(wms.get(i), nlev);//對第i幅圖像的權(quán)值矩陣進(jìn)行高斯分解

      List pyrB = laplacian_pyramid(bmps.get(i), nlev);//對第i幅圖像進(jìn)行拉普拉斯分解

      for(int j = 0; j < nlev; j++){//逐層融合,每層得到1幅結(jié)果圖像

      if(i==0){

      imageMap tmp = new imageMap();

      tmp.setWidth(pyrB.get(j).getWidth());

      tmp.setHeight(pyrB.get(j).getHeight());

      tmp.setRed(new double[tmp.getWidth()*tmp.getHeight()]);

      tmp.setGreen(new double[tmp.getWidth()*tmp.getHeight()]);

      tmp.setBlue(new double[tmp.getWidth()*tmp.getHeight()]);

      for(int x = 0; x < tmp.getWidth(); x++)

      for(int y = 0; y < tmp.getHeight(); y++){

      tmp.setARed(x, y, pyrB.get(j).getARed(x, y)* pyrW.get(j).getAWeight(x, y));

      tmp.setAGreen(x, y, pyrB.get(j).getAGreen(x, y)* pyrW.get(j).getAWeight(x, y));

      tmp.setABlue(x, y, pyrB.get(j).getABlue(x, y)* pyrW.get(j).getAWeight(x, y));

      }

      ans.add(tmp);

      }

      else

      {

      imageMap tmp = ans.get(j);

      for(int x = 0; x < tmp.getWidth(); x++)

      for(int y = 0; y < tmp.getHeight(); y++){

      tmp.setARed(x, y, tmp.getARed(x, y)+pyrB.get(j).getARed(x, y)* pyrW.get(j).getAWeight(x, y));

      tmp.setAGreen(x, y, tmp.getAGreen(x, y)+pyrB.get(j).getAGreen(x, y)* pyrW.get(j).getAWeight(x, y));

      tmp.setABlue(x, y, tmp.getABlue(x, y)+pyrB.get(j).getABlue(x, y)* pyrW.get(j).getAWeight(x, y));

      }

      }

      }

      }

      return reconstruct_laplacian_pyramid(ans);//將nlev幅結(jié)果圖像合并成一幅輸出

      }

      該算法的輸入是原始彩色圖像和權(quán)值矩陣,其中權(quán)值矩陣根據(jù)對比度、飽和度和曝光度計(jì)算得到[1],而輸出則是融合后的結(jié)果圖像。算法的主要過程是:

      1)根據(jù)圖像的長度和寬度,自動(dòng)計(jì)算出圖像分解的層數(shù)nlev;

      2)gaussian_pyramid(weightMap a,int nlev)將權(quán)值矩陣分解為nlev層的高斯金字塔;

      3)laplacian_pyramid(imageMap a,int nlev)將圖像分解為nlev層的拉普拉斯金字塔;

      4)將同一層的所有圖像根據(jù)權(quán)值矩陣加權(quán)平均,得到nlev層結(jié)果圖像;

      5)reconstruct_laplacian_pyramid(List pyrI)將nlev個(gè)結(jié)果圖像合并,其合并方法是從分辨率最低的開始,將每一層圖像放大到與上一層圖像大小相同后疊加上去,直到達(dá)到最高分辨率為止。

      3 實(shí)現(xiàn)效果

      程序運(yùn)行后,單擊拍照按鈕,拍出3張曝光度不同的照片,并在單擊圖像融合后,能夠?qū)x定的3張圖像進(jìn)行融合處理,并得出最終的圖像。圖2顯示了一組實(shí)驗(yàn)結(jié)果,其中第一行3幅圖是待融合的輸入圖像,第二行是融合圖像。實(shí)驗(yàn)效果表明該系統(tǒng)已實(shí)現(xiàn)算法的基本功能。此外,允許用戶設(shè)置采集圖像的數(shù)量,選出其中包含信息較多的圖進(jìn)行融合,就可以得到一張保留場景信息最多最好的圖像。

      圖2 融合測試結(jié)果

      4 結(jié)束語

      本論文做了一種嘗試,將多分辨率曝光融合算法在安卓平臺(tái)上進(jìn)行實(shí)現(xiàn)并測試通過,為以后測試更多曝光融合算法提供了一個(gè)平臺(tái)。通過系統(tǒng)測試,我們也發(fā)現(xiàn)一些問題可以改進(jìn):

      1)連拍需要一段時(shí)間才能完成,這段時(shí)間內(nèi)相機(jī)即使有輕微抖動(dòng),融合后的圖像也會(huì)呈現(xiàn)出重影。因?yàn)槎喾直媛势毓馊诤纤惴ㄖ粚o態(tài)場景有效,所以可以嘗試動(dòng)態(tài)場景的融合算法。

      2)因?yàn)樵撓到y(tǒng)會(huì)產(chǎn)生一個(gè)圖像序列和一個(gè)權(quán)值矩陣序列,所以運(yùn)行時(shí)將耗費(fèi)大量的內(nèi)存,我們之后將進(jìn)一步改進(jìn)算法,盡量減少內(nèi)存消耗。

      參考文獻(xiàn):

      [1] Mertens T. Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography[J]. COMPUTER GRAPHICS forum, 2009, 28(1):161-171.

      [2] 李剛. 瘋狂的Android講義[M]. 2版.北京: 電子工業(yè)出版社, 2012.

      [3] 黃雋實(shí). Android開發(fā)最佳實(shí)踐[M]. 北京: 機(jī)械工業(yè)出版社, 2013.

      克拉玛依市| 通州区| 景德镇市| 株洲市| 新化县| 芦溪县| 张家川| 台州市| 图们市| 鲁山县| 亳州市| 特克斯县| 长宁县| 万山特区| 利川市| 枣强县| 靖宇县| 辽宁省| 浦北县| 日土县| 保德县| 阳曲县| 祥云县| 武宁县| 元朗区| 大石桥市| 文山县| 抚松县| 和田县| 十堰市| 米泉市| 梨树县| 洛川县| 玛多县| 宝山区| 和静县| 肇州县| 樟树市| 玉林市| 古丈县| 乌恰县|