-暗原色去霧霾處理c_第1頁
-暗原色去霧霾處理c_第2頁
-暗原色去霧霾處理c_第3頁
-暗原色去霧霾處理c_第4頁
-暗原色去霧霾處理c_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、北京航空航天大學數字圖像處理 課程設計報告 圖像去霧霾班().1. 實現目標1、算法功能霧霾是特定氣候條件與人類活動相互作用的結果。高密度人口的經濟及社會活動必然會排放大量細顆粒物,一旦排放超過大氣循環(huán)能力和承載度,細顆粒物濃度將持續(xù)積聚,此時如果受靜穩(wěn)天氣等影響,極易出現大范圍霧霾。2、 技術指標去霧霾方式是推測每一個像素點的霧霾濃度,將其去除?,F實中給我們的印象是,在霧霾天氣下,近距離的物體看得比較清,霧霾的濃度??;遠距離的物體看不清,霧霾的濃度大??梢哉f,霧霾圖像=清晰圖像+霧霾濃度。因此,為了準確恢復清晰圖像,我們必須估計圖像中物體所處位置的霧霾濃度,這是高性能去霧霾技術的關鍵所在。2

2、. 研究現狀分析1、 國內外研究現狀目前,國內外對于圖像去霧的方法主要分為兩大類,一類是基于大氣退化物理模型的方法,即從物理成因的角度對大氣散射作用進行建模分析,進而得到場景深度模型,實現場景復原,另一類是基于圖像增強的方法,也就是單純從圖像的角度考慮,無須借助其他設備或者參考圖像等輔助信息,直接利用圖像增強方法改善圖像質量,達到降低霧影響的目的。2、 目前存在的問題第一類方法一般需要復雜的建模過程,有些甚至還需要額外的特殊設備,或者需要無霧的圖像作為參考,實現過程比較困難。3、 算法描述基于暗原色先驗的單幅圖像去霧算法(使用opencv)首先求出每個像素RGB分量中的最小值,存入一副和原始圖

3、像大小相同的灰度圖中,然后再對這幅灰度圖進行最小值濾波,濾波的半徑由窗口大小決定,一般有WindowSize = 2 * Radius + 1; 根據霧圖成型模型,求出A,t(x)帶入求出J即可。暗原色先驗是通過對戶外無霧圖像的觀察得出的:在絕大多數非天空的局部區(qū)域里,某一些像素總會有至少一個顏色通道具有很低的值。換言之,該區(qū)域光強度的最小值是個很小的數。公式描述:J = ( I - A)/t + A 其中 I(X)就是我們現在已經有的圖像(待去霧的圖像),J(x)是我們要恢復的無霧的圖像,A是全球大氣光成分, t(x)為透射率。各參數對去霧結果的影響第一:窗口的大小。這個對結果來說是個關鍵的

4、參數,窗口越大,其包含暗通道的概率越大,暗通道也就越黑。我們不去從理論角度分析,從實踐的效果來看,似乎窗口越大,去霧的效果越不明顯。 我的建議是窗口大小在11-51之間,即半徑在5-25之間。式(12)中的具有著明顯的意義,其值越小,去霧效果越不明顯。當投射圖t 的值很小時,會導致J的值偏大,從而使淂圖像整體向白場過度,因此一般可設置一閾值T0,當t值小于T0時,令t=T0,本文中所有效果圖均以T0=0.1為標準計算。上述推論中都是假設全球達氣光A值時已知的,在實際中,我們可以借助于暗通道圖來從有霧圖像中獲取該值。具體步驟如下:1) 從暗通道圖中按照亮度的大小取前0.1%的像素。2) 在這些位

5、置中,在原始有霧圖像I中尋找對應的具有最高亮度的點的值,作為A值。4、 算法的實現主要算法:/求暗原色 ROI_rect.width=block;/rect.width獲取或設置矩形的寬度 ROI_rect.height=block;/高度;block 由滑動條給定 ROI_rect.x=0; ROI_rect.y=0; int i; int j; double min1=0; double max1=0; double min2=0; double max2=0; double min3=0; double max3=0; double min=0; CvScalar value;/CvSc

6、alar一個可以用來存放4個double數值的數組; /一般用來存放像素值(不一定是灰度值)的,最多可以存放4個通道的 for(i=0;iwidth/block;i+) for(j=0;jheight/block;j+) /分別計算三個通道內ROI的最小值 cvSetImageROI(dst1,ROI_rect);/ cvSetImageROI基于給定的矩形設置圖像的ROI cvCopy(dst1,imgroi1,NULL);/cvCopy 拷貝一個數組給另一個數組 cvMinMaxLoc(imgroi1,&min1,&max1,NULL,NULL); cvSetImageROI(dst2,R

7、OI_rect); cvCopy(dst2,imgroi2,NULL); cvMinMaxLoc(imgroi2,&min2,&max2,NULL,NULL);/cvMinMaxLoc 尋找數組中的最大最小值; cvSetImageROI(dst3,ROI_rect); cvCopy(dst3,imgroi3,NULL); cvMinMaxLoc(imgroi3,&min3,&max3,NULL,NULL); /求三個通道內最小值的最小值 if(min1min3) min=min3;/min為這個ROI中暗原色 value=cvScalar(min,min,min,min);/min放在val

8、ue中,三個就可以了。 /min賦予dark_channel中相應的ROI cvSetImageROI(dark_channel,ROI_rect); cvSet(roidark,value,NULL); cvCopy(roidark,dark_channel,NULL); /釋放各個ROI cvResetImageROI(dst1); cvResetImageROI(dst2); cvResetImageROI(dst3); cvResetImageROI(dark_channel); /轉入下一個ROI ROI_rect.x=block*i; ROI_rect.y=block*j; /保存

9、暗原色先驗的圖像 cvSaveImage(G:/課件/大三下/數字圖像處理/圖像處理作業(yè)/處理結果/dark_channel_prior.jpg,dark_channel);/利用得到的暗原色先驗dark_channel_prior.jpg求大氣光強 double min_dark; double max_dark; CvPoint min_loc; CvPoint max_loc;/max_loc是暗原色先驗最亮一小塊的原坐標 cvMinMaxLoc(dark_channel,&min_dark,&max_dark,&min_loc,&max_loc,NULL); coutmax_loc.x

10、 max_loc.yendl; ROI_rect.x=max_loc.x; ROI_rect.y=max_loc.y; double A_dst1;/定義大氣光成分的估計值 double dst1_min; double A_dst2; double dst2_min; double A_dst3; double dst3_min; cvSetImageROI(dst1,ROI_rect);/按照論文方法求大氣光強估計值 cvCopy(dst1,imgroi1,NULL); cvMinMaxLoc(imgroi1,&dst1_min,&A_dst1,NULL,NULL);/cvMinMaxLo

11、c 尋找數組中的最大最小值; cvSetImageROI(dst2,ROI_rect); cvCopy(dst2,imgroi2,NULL); cvMinMaxLoc(imgroi2,&dst2_min,&A_dst2,NULL,NULL);/從暗通道圖中按照亮度的大小取前0.1%的像素。在這些位置中,在原始有霧圖像I中尋找對應的具有最高亮度的點的值,作為A值。 cvSetImageROI(dst3,ROI_rect); cvCopy(dst3,imgroi3,NULL); cvMinMaxLoc(imgroi3,&dst3_min,&A_dst3,NULL,NULL); coutA_dst1

12、 A_dst2 A_dst3endl;/這三值為大氣光強度估計值/求透射率 int k; int l; CvScalar m; CvScalar n;/暗原色先驗各元素值 for(k=0;kheight;k+) for(l=0;lwidth;l+) m=cvGet2D(dark_channel,k,l);/獲取dark_channel圖像中坐標為(k,l)的像素點的值 n=cvScalar(255-w*m.val0); /w目的是保留一部分的霧,使圖像看起來真實些 cvSet2D(toushelv,k,l,n);/透射率是針對窗口而言的 cvSaveImage(G:/課件/大三下/數字圖像處理

13、/圖像處理作業(yè)/處理結果/toushelv.jpg,toushelv);/求無霧圖像 int p,q; double tx; double jj1,jj2,jj3; CvScalar ix,jx; for(p=0;pheight;p+) for(q=0;qwidth;q+) tx=cvGetReal2D(toushelv,p,q);/獲得某個點的值 tx=tx/255; if(tx0.1) tx=0.1;/tx 的值很小時,會導致J的值偏大,從而使淂圖像整體向白場過度,因此設置一閾值T0,當t值小于T0時,令t=T0. ix=cvGet2D(src,p,q); jj1=(ix.val0-A_d

14、st1)/tx+A_dst1;/根據霧產生模型運算,還原出無霧圖像 jj2=(ix.val1-A_dst2)/tx+A_dst2;/typedef struct CvScalardouble val4;CvScalar; jj3=(ix.val2-A_dst3)/tx+A_dst3; jx=cvScalar(jj1,jj2,jj3,0.0); cvSet2D(dst,p,q,jx);/ 給某個點賦值 cvSaveImage(G:/課件/大三下/數字圖像處理/圖像處理作業(yè)/處理結果/removed_haze.jpg,dst);/保存圖像/主函數如下void main() /打開圖像 src=cv

15、LoadImage(22.bmp,-1); /創(chuàng)造窗口 cvNamedWindow(有霧圖像,CV_WINDOW_AUTOSIZE);/cvNamedWindow該函數為開放計算機視覺(OpenCV)庫庫函數,用來創(chuàng)建指定的窗口 cvShowImage(有霧圖像,src);/開放計算機視覺(OpenCV)庫庫函數,用來在在指定窗口中顯示圖像 cvNamedWindow(目的圖像,CV_WINDOW_AUTOSIZE); cvCreateTrackbar(tbarname1, 目的圖像, &block, 25, on_trackbar1);/ 創(chuàng)建trackbar并將它添加到指定的窗口 cvCreateTrackbar(tbarname2, 目的圖像, &w1, 100, on_trackbar2);/由w取值范圍可以確定w1最大值為100 cvWaitKey(0);/cvWaitKey()函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論