日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

暗通道图像去雾

發(fā)布時間:2024/3/13 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 暗通道图像去雾 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、??????????實驗原理

在絕大多數(shù)非天空的局部區(qū)域里,某一些像素總會有至少一個顏色通道有很低的值。換言之,該區(qū)域光強度的最小值是個很小的數(shù)。

  我們給暗通道一個數(shù)學(xué)定義,對于任意的輸入圖像J,其暗通道可以用下式表達:

??????式中Jc表示彩色圖像的每個通道?Ω(x)表示以像素X為中心的一個窗口。?

??式(5)的意義用代碼表達也很簡單,首先求出每個像素RGB分量中的最小值,存入一副和原始圖像大小相同的灰度圖中,然后再對這幅灰度圖進行最小值濾波,濾波的半徑由窗口大小決定,一般有WindowSize = 2 * Radius + 1;?????????

??????暗通道先驗的理論指出:

?????實際生活中造成暗原色中低通道值主要有三個因素:a)汽車、建筑物和城市中玻璃窗戶的陰影,或者是樹葉、樹與巖石等自然景觀的投影;b)色彩鮮艷的物體或表面,在RGB的三個通道中有些通道的值很低(比如綠色的草地/樹/植物,紅色或黃色的花朵/葉子,或者藍色的水面);c)顏色較暗的物體或者表面,例如灰暗色的樹干和石頭。總之,自然景物中到處都是陰影或者彩色,這些景物的圖像的暗原色總是很灰暗的。

首先,在計算機視覺和計算機圖形中,下述方程所描述的霧圖形成模型被廣泛使用:

其中,I(X)就是我們現(xiàn)在已經(jīng)有的圖像(待去霧的圖像),J(x)是我們要恢復(fù)的無霧的圖像,A是全球大氣光成分,?t(x)為透射率。現(xiàn)在的已知條件就是I(X),要求目標值J(x),顯然,這是個有無數(shù)解的方程,因此,就需要一些先驗了。

  將式(1)稍作處理,變形為下式:

????如上所述,上標C表示R/G/B三個通道的意思。

????首先假設(shè)在每一個窗口內(nèi)透射率t(x)為常數(shù),定義他為,并且A值已經(jīng)給定,然后對式(7)兩邊求兩次最小值運算,得到下式:

????上式中,J是待求的無霧的圖像,根據(jù)前述的暗原色先驗理論有:

?????因此,可推導(dǎo)出:

????把式(10)帶入式(8)中,得到:

????這就是透射率的預(yù)估值。

????在現(xiàn)實生活中,即使是晴天白云,空氣中也存在著一些顆粒,因此,看遠處的物體還是能感覺到霧的影響,另外,霧的存在讓人類感到景深的存在,因此,有必要在去霧的時候保留一定程度的霧,這可以通過在式(11)中引入一個在[0,1]之間的因子,則式(11)修正為:

?????本文中所有的測試結(jié)果依賴于:? ω=0.95

?????上述推論中都是假設(shè)全球大氣光A值時已知的,在實際中,我們可以借助于暗通道圖來從有霧圖像中獲取該值。具體步驟如下:

????1?從暗通道圖中按照亮度的大小取前0.1%的像素。

???????? 2?在這些位置中,在原始有霧圖像I中尋找對應(yīng)的具有最高亮度的點的值,作為A值。

?????到這一步,我們就可以進行無霧圖像的恢復(fù)了。由式(1)可知:? J = ( I - A)/t + A??,現(xiàn)在I,A,t都已經(jīng)求得了,因此,完全可以進行J的計算。

?????當投射圖t?的值很小時,會導(dǎo)致J的值偏大,從而使淂圖像整體向白場過度,因此一般可設(shè)置一閾值T0,當t值小于T0時,令t=T0,本文中所有效果圖均以T0=0.1為標準計算。

?????因此,最終的恢復(fù)公式如下:

?

二、實驗步驟

1、找出每個像素的RGB三通道的最小值、形成圖像的暗通道圖像。

2、在暗通道圖片中每個像素的周圍15*15的矩形中找像素最小的值,作為該像素的值。

3、由12式算出投射圖。

具體代碼如下:

<span style="font-size:14px;">void dark_channel(unsigned char* des,const unsigned char* img,int width,int height) {int A = 0;for(int y = 0; y < height; y++){for(int x = 0; x < width; x++){int B = img[y * width * 3 + x * 3 + 0];int G = img[y * width * 3 + x * 3 + 1];int R = img[y * width * 3 + x * 3 + 2];if(B<G)des[y * width + x]=B;elsedes[y * width + x]=G;if(R<des[y * width + x])des[y * width + x]=R;}}for(int y = 0; y < 5; y++){for(int x = 0; x < width; x++){if(des[y * width + x]>A)A=des[y * width + x];}} int patch= 6;printf("A的值%d",A);double w=0.95*A/255;unsigned char* ocl = new unsigned char[width * height];memcpy(ocl,des,width * height);for(int y = patch; y < height-patch; y++){for(int x = patch; x < width-patch; x++){for(int i = -patch; i < patch+1; i++){for(int j = -patch; j < patch+1; j++){if(des[(y + i) * width + (x + j)]<ocl[y * width + x])ocl[y * width + x]=des[(y + i) * width + (x + j)];}}ocl[y * width + x]=int(255-w*ocl[y * width + x]);}}memcpy(des,ocl,width * height); }</span>

二、??????????實驗結(jié)果


總結(jié)

以上是生活随笔為你收集整理的暗通道图像去雾的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。