-暗原色去雾霾处理c_第1页
-暗原色去雾霾处理c_第2页
-暗原色去雾霾处理c_第3页
-暗原色去雾霾处理c_第4页
-暗原色去雾霾处理c_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京航空航天大学数字图像处理 课程设计报告 图像去雾霾班().1. 实现目标1、算法功能雾霾是特定气候条件与人类活动相互作用的结果。高密度人口的经济及社会活动必然会排放大量细颗粒物,一旦排放超过大气循环能力和承载度,细颗粒物浓度将持续积聚,此时如果受静稳天气等影响,极易出现大范围雾霾。2、 技术指标去雾霾方式是推测每一个像素点的雾霾浓度,将其去除。现实中给我们的印象是,在雾霾天气下,近距离的物体看得比较清,雾霾的浓度小;远距离的物体看不清,雾霾的浓度大。可以说,雾霾图像=清晰图像+雾霾浓度。因此,为了准确恢复清晰图像,我们必须估计图像中物体所处位置的雾霾浓度,这是高性能去雾霾技术的关键所在。2

2、. 研究现状分析1、 国内外研究现状目前,国内外对于图像去雾的方法主要分为两大类,一类是基于大气退化物理模型的方法,即从物理成因的角度对大气散射作用进行建模分析,进而得到场景深度模型,实现场景复原,另一类是基于图像增强的方法,也就是单纯从图像的角度考虑,无须借助其他设备或者参考图像等辅助信息,直接利用图像增强方法改善图像质量,达到降低雾影响的目的。2、 目前存在的问题第一类方法一般需要复杂的建模过程,有些甚至还需要额外的特殊设备,或者需要无雾的图像作为参考,实现过程比较困难。3、 算法描述基于暗原色先验的单幅图像去雾算法(使用opencv)首先求出每个像素RGB分量中的最小值,存入一副和原始图

3、像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定,一般有WindowSize = 2 * Radius + 1; 根据雾图成型模型,求出A,t(x)带入求出J即可。暗原色先验是通过对户外无雾图像的观察得出的:在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。公式描述: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:/课件/大三下/数字图像处理/图像处理作业/处理结果/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、/图像处理作业/处理结果/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:/课件/大三下/数字图像处理/图像处理作业/处理结果/removed_haze.jpg,dst);/保存图像/主函数如下void main() /打开图像 src=cv

15、LoadImage(22.bmp,-1); /创造窗口 cvNamedWindow(有雾图像,CV_WINDOW_AUTOSIZE);/cvNamedWindow该函数为开放计算机视觉(OpenCV)库库函数,用来创建指定的窗口 cvShowImage(有雾图像,src);/开放计算机视觉(OpenCV)库库函数,用来在在指定窗口中显示图像 cvNamedWindow(目的图像,CV_WINDOW_AUTOSIZE); cvCreateTrackbar(tbarname1, 目的图像, &block, 25, on_trackbar1);/ 创建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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论