文档库 最新最全的文档下载
当前位置:文档库 › 用于图像去雾的优化对比度增强算法

用于图像去雾的优化对比度增强算法

用于图像去雾的优化对比度增强算法
用于图像去雾的优化对比度增强算法

用于图像去雾的优化对比度增强算法图像去雾哪家强?之前我们已经讨论过了著名的基于暗通道先验的图像去雾(Kaiming He, 2009)算法,如果你用兴趣可以参考:

此外,网上也有很多同道推荐了一篇由韩国学者所发表的研究论文《Optimized contrast enhancement for real-time image and video dehazing》(你也可以从文末参考文献【1】给出的链接中下载到这篇经典论文),其中原作者就提出了一个效果相当不错的图像去雾算法。最近有朋友在我们的图像处理算法研究学习群中也提到了该算法,恰巧想到主页君也很久未发图像相关之文章了,今天遂心血来潮,向大家科普一下这个新算法。

为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。

算法核心1:计算大气光值

通常,图像去雾问题的基本模型可以用下面这个公式来表示(这一点在基于暗通道先验的图像去雾中我们也使用过):

I(p)=t(p)J(p)+(1?t(p))A

其中,J(p)=(Jr(p),Jg(p),Jb(p))T 表示原始图像(也就是没有雾的图像);I(p)=(Ir(p),Ig(p),Ib(p))T 表示我们观察到的图像(也就是有雾的图像)。r、g、b 表示位置p 处的像素的三个分量。A=(Ar,Ag,Ab)T 是全球大气光,它表示周围环境中的大气光。

此外,t(p)∈[0,1] 是反射光的透射率, 由场景点到照相机镜头之间的距离所决定。因为光传播的距离越远,那么通常光就约分散而且越发被削弱。所以上面这个公式的意思就是,本来没有被雾所笼罩的图像J 与大气光 A 按一定比例进行混合后就得到我们最终所观察到的有雾图像。

大气光A 通常用图像中最明亮的颜色来作为估计。因为大量的灰霾通常会导致一个发亮(发白)的颜色。然而,在这个框架下,那些颜色比大气光更加明亮的物体通常会被选中,因而便会导致一个本来不应该作为大气光参考值的结果被用作大气光的估计。为了更加可靠的对大气光进行估计,算法的作者利用了这样一个事实:通常,那些灰蒙蒙的区域(也就是天空)中像素的方差(或者变动)总体来说就比较小。

基于这个认识,算法的作者提出了一个基于四叉树子空间划分的层次搜索方法。如下图所示,我们首先把输入图像划分成四个矩形区域。然后,为每个子区域进行评分,这个评分的计算方法是“用区域内像素的平均值减去这些像素的标准差”(the average pixel value subtracted by the standard deviation

of the pixel values within the region)。记下来,选择具有最高得分的区域,并将其继续划分为更小的四个子矩形。我们重复这个过程直到被选中的区域小于某个提前指定的阈值。例如下图中的红色部分就是最终被选定的区域。在这被选定的区域里,我们选择使得距离||(Ir(p),Ig(p),Ib(p))?(255,255,255)|| 最小化的颜色(包含r,g,b 三个分量)来作为大气光的参考值。注意,这样做的意义在于我们希望选择那个离纯白色最近的颜色(也就是最亮的颜色)

来作为大气光的参考值。

我们假设在一个局部的小范围内,场景深度是相同的(也就是场景内的各点到相机镜头的距离相同),所以在一个小块内(例如32×32)我们就可以使用一个固定的透射率t,所以前面给出的有雾图像与原始(没有雾的)图像之间的关系模型就可以改写为

J(p)=1t(I(p)?A)+A

可见,在求得大气光 A 的估计值之后,我们希望复原得到的原始(没有雾的)图像J(p) 将依赖于散射率t。

总的来说,一个有雾的块内,对比度都是比较低的,而被恢复的块内的对比度则随着t 的估计值的变小而增大,我们将设法来估计一个最优的t 值,从而使得去雾后的块能够得到最大的对比度。

下面是原作者给出的大气光计算函数代码(C/C++版)

void dehazing::AirlightEstimation(IplImage* imInput)

{

int nMinDistance = 65536;

int nDistance;

int nX, nY;

int nMaxIndex;

double dpScore[3];

double dpMean[3];

double dpStds[3];

float afMean[4] = {0};

float afScore[4] = {0};

float nMaxScore = 0;

int nWid = imInput->width;

int nHei = imInput->height;

int nStep = imInput->widthStep;

// 4 sub-block

IplImage *iplUpperLeft = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 3);

IplImage *iplUpperRight = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 3);

IplImage *iplLowerLeft = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 3);

IplImage *iplLowerRight = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 3);

IplImage *iplR = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 1);

IplImage *iplG = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 1);

IplImage *iplB = cvCreateImage(cvSize(nWid/2, nHei/2),IPL_DEPTH_8U, 1);

// divide

cvSetImageROI(imInput, cvRect(0, 0, nWid/2, nHei/2));

cvCopyImage(imInput, iplUpperLeft);

cvSetImageROI(imInput, cvRect(nWid/2+nWid%2, 0, nWid, nHei/2));

cvCopyImage(imInput, iplUpperRight);

cvSetImageROI(imInput, cvRect(0, nHei/2+nHei%2, nWid/2, nHei));

cvCopyImage(imInput, iplLowerLeft);

cvSetImageROI(imInput, cvRect(nWid/2+nWid%2, nHei/2+nHei%2, nWid, nHei));

cvCopyImage(imInput, iplLowerRight);

// compare to threshold(200) --> bigger than threshold, divide the block

if(nHei*nWid > 200)

{

// compute the mean and std-dev in the sub-block

// upper left https://www.wendangku.net/doc/ef7760943.html,ock

cvCvtPixToPlane(iplUpperLeft, iplR, iplG, iplB, 0);

cvMean_StdDev(iplR, dpMean, dpStds);

cvMean_StdDev(iplG, dpMean+1, dpStds+1);

cvMean_StdDev(iplB, dpMean+2, dpStds+2);

// dpScore: mean - std-dev

dpScore[0] = dpMean[0]-dpStds[0];

dpScore[1] = dpMean[1]-dpStds[1];

dpScore[2] = dpMean[2]-dpStds[2];

afScore[0] = (float)(dpScore[0]+dpScore[1]+dpScore[2]);

nMaxScore = afScore[0];

nMaxIndex = 0;

// upper right sub-block

cvCvtPixToPlane(iplUpperRight, iplR, iplG, iplB, 0);

cvMean_StdDev(iplR, dpMean, dpStds);

cvMean_StdDev(iplG, dpMean+1, dpStds+1);

cvMean_StdDev(iplB, dpMean+2, dpStds+2);

dpScore[0] = dpMean[0]-dpStds[0];

dpScore[1] = dpMean[1]-dpStds[1];

dpScore[2] = dpMean[2]-dpStds[2];

afScore[1] = (float)(dpScore[0]+dpScore[1]+dpScore[2]);

if(afScore[1] > nMaxScore)

{

nMaxScore = afScore[1];

nMaxIndex = 1;

}

// lower left sub-block

cvCvtPixToPlane(iplLowerLeft, iplR, iplG, iplB, 0);

cvMean_StdDev(iplR, dpMean, dpStds);

cvMean_StdDev(iplG, dpMean+1, dpStds+1);

cvMean_StdDev(iplB, dpMean+2, dpStds+2);

dpScore[0] = dpMean[0]-dpStds[0];

dpScore[1] = dpMean[1]-dpStds[1];

dpScore[2] = dpMean[2]-dpStds[2];

afScore[2] = (float)(dpScore[0]+dpScore[1]+dpScore[2]);

if(afScore[2] > nMaxScore)

{

nMaxScore = afScore[2];

nMaxIndex = 2;

}

// lower right sub-block

cvCvtPixToPlane(iplLowerRight, iplR, iplG, iplB, 0);

cvMean_StdDev(iplR, dpMean, dpStds);

cvMean_StdDev(iplG, dpMean+1, dpStds+1);

cvMean_StdDev(iplB, dpMean+2, dpStds+2);

dpScore[0] = dpMean[0]-dpStds[0];

dpScore[1] = dpMean[1]-dpStds[1];

dpScore[2] = dpMean[2]-dpStds[2];

afScore[3] = (float)(dpScore[0]+dpScore[1]+dpScore[2]);

if(afScore[3] > nMaxScore)

{

nMaxScore = afScore[3];

nMaxIndex = 3;

}

// select the sub-block, which has maximum score

switch (nMaxIndex)

{

case 0:

AirlightEstimation(iplUpperLeft); break;

case 1:

AirlightEstimation(iplUpperRight); break;

case 2:

AirlightEstimation(iplLowerLeft); break;

case 3:

AirlightEstimation(iplLowerRight); break;

}

}

else

{

// select the atmospheric light value in the sub-block

for(nY=0; nY

{

for(nX=0; nX

{

// 255-r, 255-g, 255-b

nDistance = int(sqrt(float(255-(uchar)imInput->imageData[nY*nStep+nX*3])*float(255-(uchar)imInput->ima geData[nY*nStep+nX*3])

+float(255-(uchar)imInput->imageData[nY*nStep+nX*3+1])*float(255-(uchar)imInput->imageD ata[nY*nStep+nX*3+1])

+float(255-(uchar)imInput->imageData[nY*nStep+nX*3+2])*float(255-(uchar)imInput->imageD ata[nY*nStep+nX*3+2])));

if(nMinDistance > nDistance)

{

nMinDistance = nDistance;

m_anAirlight[0] = (uchar)imInput->imageData[nY*nStep+nX*3];

m_anAirlight[1] = (uchar)imInput->imageData[nY*nStep+nX*3+1];

m_anAirlight[2] = (uchar)imInput->imageData[nY*nStep+nX*3+2];

}

}

}

}

cvReleaseImage(&iplUpperLeft);

cvReleaseImage(&iplUpperRight);

cvReleaseImage(&iplLowerLeft);

cvReleaseImage(&iplLowerRight);

cvReleaseImage(&iplR);

cvReleaseImage(&iplG);

cvReleaseImage(&iplB);

}

或者你也可以使用下面这个Matlab的实现,显而易见代码更加简单(源码由图像算法研究学习群里“薛定谔的猫”提供,略有修改):

function airlight = est_airlight(img)

%compute atmospheric light A through hierarchical

%searching method based on the quad-tree subdivision

global best;

[w,h,z] = size(img);

img = double(img);

if w*h > 200

lu = img(1:floor(w/2),1:floor(h/2),:);

ru = img(1:floor(w/2),floor(h/2):h,:);

lb = img(floor(w/2):w,1:floor(h/2),:);

rb = img(floor(w/2):w,floor(h/2):h,:);

lu_m_r = mean(mean(lu(:,:,1)));

lu_m_g = mean(mean(lu(:,:,2)));

lu_m_b = mean(mean(lu(:,:,3)));

ru_m_r = mean(mean(ru(:,:,1)));

ru_m_g = mean(mean(ru(:,:,2)));

ru_m_b = mean(mean(ru(:,:,3)));

lb_m_r = mean(mean(lb(:,:,1)));

lb_m_g = mean(mean(lb(:,:,2)));

lb_m_b = mean(mean(lb(:,:,3)));

rb_m_r = mean(mean(rb(:,:,1)));

rb_m_g = mean(mean(rb(:,:,2)));

rb_m_b = mean(mean(rb(:,:,3)));

lu_s_r = std2(lu(:,:,1));

lu_s_g = std2(lu(:,:,2));

lu_s_b = std2(lu(:,:,3));

ru_s_r = std2(ru(:,:,1));

ru_s_g = std2(ru(:,:,2));

ru_s_b = std2(ru(:,:,3));

lb_s_r = std2(lb(:,:,1));

lb_s_g = std2(lb(:,:,2));

lb_s_b = std2(lb(:,:,3));

rb_s_r = std2(rb(:,:,1));

rb_s_g = std2(rb(:,:,2));

rb_s_b = std2(rb(:,:,3));

score0 = lu_m_r + lu_m_g + lu_m_b - lu_s_r - lu_s_g - lu_s_b;

score1 = ru_m_r + ru_m_g + ru_m_b - ru_s_r - ru_s_g - ru_s_b;

score2 = lb_m_r + lb_m_g + lb_m_b - lb_s_r - lb_s_g - lb_s_b;

score3 = rb_m_r + rb_m_g + rb_m_b - rb_s_r - rb_s_g - rb_s_b;

x = [score0,score1,score2,score3];

if max(x) == score0

est_airlight(lu);

elseif max(x) == score1

est_airlight(ru);

elseif max(x) == score2

est_airlight(lb);

elseif max(x) == score3

est_airlight(rb);

end

else

for i = 1:w

for j = 1:h

nMinDistance = 65536;

distance = sqrt((255 - img(i,j,1)).^2 + (255 - img(i,j,2)).^2 + (255 - img(i,j,3)).^2);

if nMinDistance > distance

nMinDistance = distance;

best = img(i,j,:);

end

end

end

end

airlight =best;

end

算法核心2:透射率的计算

我们首先给出图像对比度度量的方法(论文中,原作者给出了三个对比度定义式,我们只讨论其中第一个):

CMSE=∑p=1N=(Jc(p)?Jˉc)2N

其中c∈{r,g,b} 是颜色通道的索引标签,Jˉc 是Jc(p)的平均值,并且p=1,?,N,N 是块中像素的数量。

根据之前给出的有雾图像与原始(没有雾的)图像之间的关系模型

J(p)=1t(I(p)?A)+A

我们可以把上述对比度定义式重新为

CMSE=∑p=1N=(Ic(p)?Iˉc)2t2N

其中Iˉc 是Ic(p)的平均值,而且你会发现上述式子也告诉我们对比度是关于t 的递减函数。

既然我们希望通过增强对比度的方法来去雾,那么不妨将一个区块B内三个颜色通道上的MSE对比度加总,然后再取负,如下

Econtrast=?∑c∈{r,g,b}∑p∈B(Jc(p)?Jˉc)2NB=?∑c∈{r,g,b}∑p∈B(Ic(p)?Iˉc)2t2NB 由于加了负号,所以取对比度最大就等同于取上式最小。

另外一方面,因为对比度得到增强,可能会导致部分像素的调整值超出了0和255的范围,这样就会造成信息的损失以及视觉上的瑕疵。所以算法作者又提出了一个信息量损失的计算公式:

于是我们把所有问题都统一到了求下面这个式子的最小值问题上

E=Econtrast+λLEloss

其中,λL 是一个权重参数用于控制信息损失和对比度之间的一个相对重要性。With a small value λL, the restored images have significantly increased contrast, but they lose information and contain unnaturally dark pixels due to the truncation of pixel values. On the contrary, with a large value of λL, we can prevent the information loss but cannot remove haze fully. 总的来说, λL= 5 strikes a balance between the information loss prevention and the haze removal effectively.

下面是基于OpenCV实现的示例代码:

float dehazing::NFTrsEstimationColor(int *pnImageR, int *pnImageG, int *pnImageB, int nStartX, int nStartY, int nWid, int nHei)

{

int nCounter;

int nX, nY;

int nEndX;

int nEndY;

int nOutR, nOutG, nOutB;

int nSquaredOut;

int nSumofOuts;

int nSumofSquaredOuts;

float fTrans, fOptTrs;

int nTrans;

int nSumofSLoss;

float fCost, fMinCost, fMean;

int nNumberofPixels, nLossCount;

nEndX = __min(nStartX+m_nTBlockSize, nWid);

nEndY = __min(nStartY+m_nTBlockSize, nHei);

nNumberofPixels = (nEndY-nStartY)*(nEndX-nStartX) * 3;

fTrans = 0.3f;

nTrans = 427;

for(nCounter=0; nCounter<7; nCounter++)

{

nSumofSLoss = 0;

nLossCount = 0;

nSumofSquaredOuts = 0;

nSumofOuts = 0;

for(nY=nStartY; nY

{

for(nX=nStartX; nX

{

nOutB = ((pnImageB[nY*nWid+nX] - m_anAirlight[0])*nTrans + 128*m_anAirlight[0])>>7; // (I-A)/t + A --> ((I-A)*k*128 + A*128)/128

nOutG = ((pnImageG[nY*nWid+nX] - m_anAirlight[1])*nTrans + 128*m_anAirlight[1])>>7;

nOutR = ((pnImageR[nY*nWid+nX] - m_anAirlight[2])*nTrans + 128*m_anAirlight[2])>>7;

if(nOutR>255)

{

nSumofSLoss += (nOutR - 255)*(nOutR - 255);

nLossCount++;

}

else if(nOutR < 0)

{

nSumofSLoss += nOutR * nOutR;

nLossCount++;

}

if(nOutG>255)

{

nSumofSLoss += (nOutG - 255)*(nOutG - 255);

nLossCount++;

}

else if(nOutG < 0)

{

nSumofSLoss += nOutG * nOutG;

nLossCount++;

}

if(nOutB>255)

{

nSumofSLoss += (nOutB - 255)*(nOutB - 255);

nLossCount++;

}

else if(nOutB < 0)

{

nSumofSLoss += nOutB * nOutB;

nLossCount++;

}

nSumofSquaredOuts += nOutB * nOutB + nOutR * nOutR + nOutG * nOutG;;

nSumofOuts += nOutR + nOutG + nOutB;

}

}

fMean = (float)(nSumofOuts)/(float)(nNumberofPixels);

fCost = m_fLambda1 * (float)nSumofSLoss/(float)(nNumberofPixels)

- ((float)nSumofSquaredOuts/(float)nNumberofPixels - fMean*fMean);

if(nCounter==0 || fMinCost > fCost)

{

fMinCost = fCost;

fOptTrs = fTrans;

}

fTrans += 0.1f;

nTrans = (int)(1.0f/fTrans*128.0f);

}

return fOptTrs;

}

在原文中,作者还提供了并行实现的算法(如果你参考作者的源码,你会发现他使用了OpenMP)用于实时对视频进行去雾,这已经超出本文的研究范围,我们不做深究。

实验效果

作者的项目主页(文献[2])中提供有一个基于OpenCV的实现,不过由于OpenCV代码配置起来太麻烦,所以我并未采用。非常感谢图像算法研究群里的同学分享给我MA TLAB 版的代码(我略有修改)。其实这个算法用MA TLAB来写真的非常方便,大约不超过150行即可搞定,特别是MATLAB2014之后集成了导向滤波算法,所以一个函数调用直接搞定,省去很多麻烦。下面是我基于这个MATLAB版程序给出一些测试结果,可供参考(由于我和原作者所使用的参数可能存在差异,所以效果并不保证完全相同)。

主要结论:

算法对于天空部分的处理相当到位,更优于Kaiming He的暗通道先验算法;

对比度过大时,图像很容易发暗,可以后期将图片稍微调亮一些。

算法本身是从对比增强的角度来进行去雾操作的,所以你可以看出结果自动带对比度增强加成,所以这个算法所取得的结果通常更加鲜亮。

基于matlab的图像去雾算法详细讲解与实现-附matlab实现源代码

本文主要介绍基于Retinex理论的雾霭天气图像增强及其实现。并通过编写两个程序来实现图像的去雾功能。 1 Rentinex理论 Retinex(视网膜“Retina”和大脑皮层“Cortex”的缩写)理论是一种建立在科学实验和科学分析基础上的基于人类视觉系统(Human Visual System)的图像增强理论。该算法的基本原理模型最早是由Edwin Land(埃德温?兰德)于1971年提出的一种被称为的色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论的基本容是物体的颜色是由物体对长波(红)、中波(绿)和短波(蓝)光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照非均性的影响,具有一致性,即Retinex理论是以色感一致性(颜色恒常性)为基础的。 根据Edwin Land提出的理论,一幅给定的图像S(x,y)分解成两幅不同的图像:反射物体图像R(x,y)和入射光图像L(x,y),其原理示意图如图8.3-1所示。 图-1 Retinex理论示意图 对于观察图像S中的每个点(x,y),用公式可以表示为: S(x,y)=R(x,y)×L(x,y) (1.3.1) 实际上,Retinex理论就是通过图像S来得到物体的反射性质R,也就是去除了入射光L的性质从而得到物体原本该有的样子。 2 基于Retinex理论的图像增强的基本步骤 步骤一: 利用取对数的方法将照射光分量和反射光分量分离,即: S'(x, y)=r(x, y)+l(x, y)=log(R(x, y))+log(L(x, y)); 步骤二:用高斯模板对原图像做卷积,即相当于对原图像做低通滤波,得到低通滤波后的图像D(x,y),F(x, y)表示高斯滤波函数: D(x, y)=S(x, y) *F(x, y); 步骤三:在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像G (x, y):

图像去雾设计报告

课程设计——图像去雾 一、设计目的 1、通过查阅文献资料,了解几种图像去雾算法,; 2、理解和掌握图像直方图均衡化增强用于去雾的原理和应用; 3、理解和掌握图像退化的因素,设计图像复原的方法; 4、比较分析不同方法的效果。 二、设计内容 采用针对的有雾图像,完成以下工作: 1、采用直方图均衡化方法增强雾天模糊图像,并比较增强前后的图像和直方图; 2、查阅文献,分析雾天图像退化因素,设计一种图像复原方法,对比该复原图像与原始图像以及直方图均衡化后的图像; 3、分析实验效果; 4、写出具体的处理过程,并进行课堂交流展示。 三、设计要求 1、小组合作完成; 2、提交报告(*.doc)、课堂交流的PPT(*.ppt)和源代码。

四、设计原理 (一)图像去雾基础原理 1、雾霭的形成机理 雾实际上是由悬浮颗粒在大气中的微小液滴构成的气溶胶,常呈现乳白色,其底部位于地球表面,所以也可以看作是接近地面的云。霭其实跟雾区别不大,它的一种解释是轻雾,多呈现灰白色,与雾的颜色十分接近。广义的雾包括雾、霾、沙尘、烟等一切导致视觉效果受限的物理现象。由于雾的存在,户外图像质量降低,如果不处理,往往满足不了相关研究、应用的要求。在雾的影响下,经过物体表面的光被大气中的颗粒物吸收和反射,导致获取的图像质量差,细节模糊、色彩暗淡。 2、图像去雾算法 图像去雾算法可以分为两大类:一类是图像增强;另一类是图像复原。图1-1介绍了图像去雾算法的分类: 图1-1 去雾算法分类 从图像呈现的低亮度和低对比度的特征考虑,采用增强的方法处理,即图像增强。比较典型的有全局直方图均衡化,同态滤波,Retinex 算法,小波算法等等。 基于物理模型的天气退化图像复原方法,从物理成因的角度对大气散射作用进行建模分析,实现场景复原,即图像复原。运用最广泛、

图像的对比度增强

图像的对比度增强 1.原理 增强图像对比度实际是增强原图的各部分的反差。实际中往往是通过增强原图里某两个灰度值间的动态范围来实现的。我选用的是书本上最典型的图像增强对比度。 如图所示,可以看出通过这样一个变换,原图中灰度值在0到1s 和2s 到L-1间的动态 范围减小了,而原图中灰度值在1s 和2s 间的动态范围增强了,从而这个范围内的对比度增 强了。实验中我选用的数值是s1=50,s2=120,t1=60,t2=100。 2.代码 void CImageProcessingDoc::OnImageContrast() { m_pDibInit->Save("r_temp1.bmp"); // TODO: Add your command handler code here int i,j; //循环变量 int m_Width, m_Height, m_SaveWidth; int t[256]={0},s[256]={0}; double s1=50,s2=120,t1=60,t2=100; m_Width = m_pDibInit->GetWidth(); m_Height = m_pDibInit->GetHeight(); m_SaveWidth = m_pDibInit->GetSaveWidth(); for(j=0;jm_pDibBits[j*m_SaveWidth + i]m_pDibBits[j*m_SaveWidth + i]=(unsigned char) (m_pDibInit->m_pDibBits[j*m_SaveWidth + i]*(t1/s1)); else if(m_pDibInit->m_pDibBits[j*m_SaveWidth + i]>=s1||m_pDibInit->m_pDibBits[j*m_SaveWidth + i]<=s2) m_pDibInit->m_pDibBits[j*m_SaveWidth + i]=(unsigned char)

基于matlab的图像去雾算法详细讲解与实现附matlab实现源代码

基于matlab的图像去雾算法详细讲解与实现-附matlab 实现源代码

————————————————————————————————作者: ————————————————————————————————日期: ?

本文主要介绍基于Retinex理论的雾霭天气图像增强及其实现。并通过编写两个程序来实现图像的去雾功能。 1Rentinex理论 Retinex(视网膜“Retina”和大脑皮层“Cortex”的缩写)理论是一种建立在科学实验和科学分析基础上的基于人类视觉系统(Human Visual System)的图像增强理论。该算法的基本原理模型最早是由Edwin Land(埃德温?兰德)于1971年提出的一种被称为的色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论的基本内容是物体的颜色是由物体对长波(红)、中波(绿)和短波(蓝)光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照非均性的影响,具有一致性,即Retinex理论是以色感一致性(颜色恒常性)为基础的。 根据Edwin Land提出的理论,一幅给定的图像S(x,y)分解成两幅不同的图像:反射物体图像R(x,y)和入射光图像L(x,y),其原理示意图如图8.3-1所示。 图-1 Retinex理论示意图 对于观察图像S中的每个点(x,y),用公式可以表示为:? S(x,y)=R(x,y)×L(x,y) (1.3.1)实际上,Retinex理论就是通过图像S来得到物体的反射性质R,也就是去除了入射光L的性质从而得到物体原本该有的样子。 2 基于Retinex理论的图像增强的基本步骤 步骤一: 利用取对数的方法将照射光分量和反射光分量分离,即: S'(x,y)=r(x,y)+l(x, y)=log(R(x,y))+log(L(x, y)); 步骤二:用高斯模板对原图像做卷积,即相当于对原图像做低通滤波,得到低通滤波后的图像D(x,y),F(x, y)表示高斯滤波函数: D(x,y)=S(x, y) *F(x, y); 步骤三:在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像G (x,y): G(x,y)=S'(x, y)-log(D(x, y)) ;

【CN110197471A】一种图像对比度增强方法【专利】

(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201910154634.5 (22)申请日 2019.03.01 (71)申请人 合肥工业大学 地址 230000 安徽省芜湖市屯溪路193号 (72)发明人 郝世杰 汪雷宇 张又明 洪日昌  汪萌  (74)专利代理机构 北京睿智保诚专利代理事务 所(普通合伙) 11732 代理人 杨海明 (51)Int.Cl. G06T 5/40(2006.01) (54)发明名称 一种图像对比度增强方法 (57)摘要 本发明公开一种图像对比度增强方法,所述 增强方法包括:采集待处理的图像,获得原始图 像;将所述原始图像采用色彩处理方法进行色彩 处理,获得色彩处理图像;将所述色彩处理图像 进行数据预处理,获得预处理色彩图像;将所述 原始图像进行预增强处理,获得第一增强图像; 根据所述色彩处理图像、所述第一增强图像和所 述原始图像采用图像增强方法,获得第二增强图 像。本发明提供的图像增强方法能够在像素级别 感知图像的结构,进行非均一的增强,产生对比 度得到增强且兼具自然性的结果。权利要求书1页 说明书2页 附图1页CN 110197471 A 2019.09.03 C N 110197471 A

1.一种图像对比度增强方法,其特征在于,所述增强方法包括: 采集待处理的图像,获得原始图像I; 将所述原始图像采用色彩处理方法进行色彩处理,获得色彩处理图像L;将所述色彩处理图像L进行数据预处理,获得预处理色彩图像; 将所述原始图像I进行预增强处理,获得第一增强图像; 根据所述色彩处理图像L、 所述第一增强图像和所述原始图像I采用图像增强方法,获得第二增强图像。 2.根据权利要求1所述的一种图像对比度增强方法,其特征在于,所述将所述原始图像采用色彩处理方法进行色彩处理,获得色彩处理图像L具体包括: 对所述原始图像做最大化颜色通道技术处理,获得色彩处理图像L。 3.根据权利要求1所述的一种图像对比度增强方法,其特征在于,所述将所述色彩处理图像L进行数据预处理,获得预处理色彩图像具体包括: 对所述色彩处理图像L进行取反和开操作,获得预处理色彩图像1-L。 4.根据权利要求1所述的一种图像对比度增强方法,其特征在于,所述将所述原始图像I进行预增强处理,获得第一增强图像具体包括: 对所述原始图像I采用简化的Retinex模型处理,获得第一增强图像。 5.根据权利要求1所述的一种图像对比度增强方法,其特征在于,所述根据所述色彩处理图像L、所述第一增强图像和所述原始图像I采用图像增强方法,获得第二增强图像具体包括: 第二增强图像。 权 利 要 求 书1/1页 2 CN 110197471 A

三种不同灰度图像增强算法对比

三种不同灰度图像增强算法对比 一、摘要 本文主要是运用直方图均衡化、平滑、锐化三种常见的图像增强算法对图像进行处理,并在此基础上分别用这 3 种算法处理的灰度图像进行比较,比对它们对图像的处理效果, 分析3 种方法在图像增强处理能力的优劣之处。 结果发现,直方图均衡化可以均衡图像的灰度等级, 经过直方图的均衡化,图像的细节更加清楚了,但是由于直方图均衡化没有考虑图像的内容,只是简单的将图像进行直方图均衡,提高图像的对比度,使图像看起来亮度过高,使图像细节受到损失; 图像平滑的目的是减少或消除图像的噪声, 图像平滑可以使图像突兀的地方变得不明显, 但是会使图像模糊,这也是图像平滑后不可避免的后果,只能尽量减轻,尽量的平滑掉图像的噪声又尽量保持图像细节,这也是图像平滑研究的主要问题; 图像锐化使图像的边缘、轮廓变得清晰,并使其细节清晰,常对图像进行微分处理,但是图像的信噪比有所下降。 关键词: 图像增强灰度图直方图平滑锐化 二、三种图像增强算法 图像预处理是相对图像识别、图像理解而言的一种前期处理,主要是指按需要进行适当的变换突出某些有用的信息,去除或削弱无用的信息,在对图像进行分析之前, 通常要对图像质量进行改善,改善的目的就是要使处理后的图像比原始图像更适合特定的应用。影响图像清晰度的因素很多,主要有光照不足、线路传输收到干扰等。 现存的图像增强技术主要分为空间域法和频率域法两类,其中的增强方法主要有直方图的修正、灰度变换、图像平滑、图像锐化、伪彩色和假彩色处理等。下面主要采用直方图均衡化、图像平滑、图像线性锐化对图像进行增强处理, 对比他们的处理效果,分析 3 种方法的在图像增强处理方面的优劣。 1、直方图均衡化 直方图均衡化也称为直方图均匀化,是一种常见的灰度增强算法,是将原图像的直方图经过变换函数修整为均匀直方图,然后按均衡后的直方图修整原图像。 为方便研究,先将直方图归一化,然后图像增强变换函数需要满足2个条件。 假设灰度级为归一化至范围[0,1]内的连续量,设其中任一灰度级别Z归一化为r,变换后图像的任一灰度级Z'归一化为s,显然r,s应当满足:0<=r<=1,0<=s<=1 因此直方图修正就是对下列公式的计算过程:s=T(r)或r=T'(s) 式中T(r)为变换函数,它必须满足下列条件: a在0<=r<=1区间内是单值单调增加函数; b对于0<=r<=1,有T(r)在[0,1]内。 条件a 保证灰度级从黑到白的次序,而条件b确保映射后的像素灰度在允许的范围内,避免整个图像明显变亮或者变暗。 从S 到r的反变换关系为r=T'(s) ;T'(s)对r同样满足上述条件。 灰度变换是对图像上各个像素点的灰度值x 按某个函数T 变换到y ,将图像的灰度级整个范围或其中某一段( A, B)扩展或压缩到( A, B)。直方图均衡化是灰度变换的一个重要应用,是以累计分布函数变换为基础的直方图修正法, 可以产生一幅灰度级分布具有均匀概率密度的图像。一幅图像灰度级r k 出现的概率近似为 其中n 是图像中像素的总和, nk 是灰度级为r k 的像素个数, L 为图像中灰度级总数。若

基于retinex的图像去雾算法

I=imread('1.jpg'); R = I(:, :, 1); G = I(:, :, 2); B = I(:, :, 3); R0 = double(R); G0 = double(G); B0 = double(B); [N1, M1] = size(R); Rlog = log(R0+1); Rfft2 = fft2(R0); sigma1 = 128; F1 = fspecial('gaussian', [N1,M1], sigma1); Efft1 = fft2(double(F1)); sigma2 = 256; F2 = fspecial('gaussian', [N1,M1], sigma2); Efft2 = fft2(double(F2)); sigma3 = 512; F3 = fspecial('gaussian', [N1,M1], sigma3); Efft3 = fft2(double(F3)); DR0 = Rfft2.* Efft1; DR = ifft2(DR0); DRlog = log(DR +1); Rr1 = Rlog - DRlog; DR0 = Rfft2.* Efft2; DR = ifft2(DR0); DRlog = log(DR +1); Rr2 = Rlog - DRlog; DR0 = Rfft2.* Efft3; DR = ifft2(DR0); DRlog = log(DR +1); Rr3 = Rlog - DRlog; Rr = (Rr1 + Rr2 +Rr3)/3; a = 125; II = imadd(R0, G0); II = imadd(II, B0); Ir = immultiply(R0, a); C = imdivide(Ir, II); C = log(C+1); Rr = immultiply(C, Rr); EXPRr = exp(Rr); MIN = min(min(EXPRr)); MAX = max(max(EXPRr)); EXPRr = (EXPRr - MIN)/(MAX - MIN); EXPRr = adapthisteq(EXPRr); Glog = log(G0+1); Gfft2 = fft2(G0); DG0 = Gfft2.* Efft1;

图像去雾霭算法及其实现..

图像去雾霭算法及其实现 电气工程及其自动化 学生姓名杨超程指导教师李国辉 摘要雾霭等天气条件下获得的图像,具有图像不清晰,颜色失真等等一些图像退化的现象,直接影响了视觉系统的发挥。因此,为了有效的改善雾化图像的质量,降低雾霭等天气条件下造成户外系统成像的影响,对雾霭图像进行有效的去雾处理显得十分必要。 本设计提出了三种图像去雾算法,一种是基于光照分离模型的图像去雾算法;一种是基于直方图均衡化的图像去雾算法;还有一种是基于暗原色先验的图像去雾算法。并在MATLAB的基础上对现实生活的图像进行了去雾处理,最后对不同的方法的处理结果进行了简要的分析。 关键词:图像去雾光照分离直方图均衡化暗原色先验

Algorithm and its implementation of image dehazing Major Electrical engineering and automation Student Yang Chaocheng Supervisor Li Guohui Abstract Haze weather conditions so as to obtain the image, the image is not clear, the phenomenon of color distortion and so on some image degradation, directly influence the exertion of the visual system. Therefore, in order to effectively improve the atomization quality of the image, reduce the haze caused by outdoor weather conditions such as imaging system, the influence of the haze image effectively it is necessary to deal with the fog. This design introduced three kinds of algorithms of image to fog, a model is based on the separation of light image to fog algorithm; One is the image to fog algorithm based on histogram equalization; Another is based on the dark grey apriori algorithms of image to fog. And on the basis of MATLAB to the real life to deal with the fog, the image of the processing results of different methods are briefly analyzed. Key words:Image to fog Light separation histogram Dark grey

电子科大图像对比度增强实验报告

电子科技大学通信学院学院标准实验报告 (实验)课程名称图像对比度增强实验 电子科技大学教务处制表

电子科技大学 实验报告 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:通信系统实验室 二、实验项目名称:图像对比度增强实验 三、实验学时:16 四、实验原理: 图像增强的目的是针对应用或人们主观需求,对输入图像进行某种处理,使得处理后的图像在特定结构或对比度等方面有明显的改善,其源头可以追溯到1969年。随着应用需求的不断发展,世界各国对此问题展开了广泛的研究。 特定结构或对比度不够清晰,可能来自质量不佳的成像设备、恶劣的大气条件、不恰当图像压缩算法等,其特点是图像中像素灰度集中在一个相对较小的范围,导致后端处理设备的观察者不能有效对图像进行判读。 造成图像对比度不够清晰的原因是多方面,包括电子系统的热噪声、光照过强、光照过弱、目标反射率过低、大雾天气、逆光拍摄、压缩等等。由于其产生原因的多样性,导致图像对比度不够清晰在图像中体现出来的现象也不同,可以分为以下3类:整体偏暗、整体偏亮、分布在亮和暗的两端,并且有可能在空间分布上存在多个区域。 现有的对比度增强技术根据其处理方法理论依据不同可分为:直方图均衡化、基于Retinex理论的图像增强、基于梯度场重建的图像增强;根据其处理范围,又可以分为全局处理与局部处理两大类。本实验将主要论述直方图均衡化和基于梯度场重建的图像增强两种方法,其中直方图均衡化进描述基本原理,其实

现由学生独立完成,而基于梯度场重建的图像增强方法,本实验将重点阐述,并给出参考代码,要求学生在此基础上进行进一步的完善。 直方图均衡化的基本原理就是对图像进行灰度变换。灰度变换有逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等方法。虽然它们对图像的处理效果不同,但处理过程中都运用了点运算,通常可分为线性变换、分段线性变换、非线性变换。其缺点是需要用户根据不同的图像调整不同的变换函数。灰度变换是最简单的对比度增强技术,它可增大图像动态范围,扩展对比度,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。灰度变换不改变图像内的空间关系,灰度级的改变是根据某种特定的灰度变换函数进行。 实验所需基本结构如图1所示。 图1 实验所需基本结构图 本实验把成像设备(即摄像头)采集的一幅图像,传入计算机,由图像增强技术算法实现的编程软件处理后,对图像进行增强,然后实时显示增强后的图像。图像对比度增强技术,不仅要保持图像整体的一致性,还需要对图像的局部区域进行增强处理,使其具有最佳的表现力。因此,本文采用梯度场方法。技术方案特点有: a)梯度域增强避免了亮度不同对增强算子的影响 b)重建图像是基于最小二乘法,与原始的图像在亮度方面不同 c)重建图像在梯度域与原始图像具有强烈的相似性 d)重建图像具有亮度平均值的相对保持性 e)重建图像的边界条件周期延拓(采用DST变换要求) f)所有算子都是直接计算

基于同态滤波的图像去雾方法本科毕业论文

本科毕业设计(论文) 题目:基于同态滤波的图像去雾方法

基于同态滤波的图像去雾方法摘要 在雾霭等天气条件下获得的图像,模糊不清、颜色失真,影响视觉效果。因此有必要对图像进行去雾研究。图像去雾是通过一定的手段去除图像中雾的干扰,达到快速有效的去雾和清晰度恢复的作用,从而得到高质量的图像。 图像去雾的方法众多,同态滤波是一种在频域中进行的图像对比度增强和压缩图像亮度范围的特殊滤波方法。这种方法能减少低频并增加高频,即尽量保留低频中的灰度级(保存图像原貌),又锐化细节,从而达到去雾的效果。 本文把基于同态滤波的去雾算法,与全局均衡化的图像去雾算法等方法进行对比,借鉴其他算法的优点,优化同态滤波算法,使图像去雾效果更加理想。实验结果表明,同态滤波能较好的锐化细节,同时保持原图概况。若要使图片达到更好的清晰度,需结合多种算法,叠加运行。 关键词:图像去雾;图像增强;同态滤波;直方图均衡化

Image defog method based on the method of image filterin Abstract The image obtained in bad weather conditions such as fog, blur, color distortion, visual effects.Therefore, it is necessary to study images defogging.Images defogging is through a certain means of removing fog interference and achieve rapid recovery of fog and clarity of role, resulting in high quality images. Homomorphic filtering is an image in the frequency domain of contrast enhancement and special filtering method of image brightness range, homomorphic filtering can reduce the frequency and increase the frequency, that is, try to keep the low frequency of gray levels (save the original image) and sharpen details, so as to achieve the effect of fog. This fog based on homomorphic filtering method, and global equalization algorithm for images defogging method compares the advantages of other algorithms, optimizing the homomorphic filter algorithm, making the image to fog effect is more ideal. Experimental results show that the homomorphic filtering can be used to sharpen detail, while keeping the original profile. To make the image better definition, should be combined with a variety of algorithms, stacking operation. Key words: image, image enhancement, image enhancement, image enhancement, image enhancement, histogram equalization.

基于matlab的图像去雾算法详细讲解与实现-附matlab实现源代码

基于matlab的图像去雾算法详细讲解与实现-附matlab实现源代码

本文主要介绍基于Retinex理论的雾霭天气图像增强及其实现。并通过编写两个程序来实现图像的去雾功能。 1 Rentinex理论 Retinex(视网膜“Retina”和大脑皮层“Cortex”的缩写)理论是一种建立在科学实验和科学分析基础上的基于人类视觉系统(Human Visual System)的图像增强理论。该算法的基本原理模型最早是由Edwin Land(埃德温?兰德)于1971年提出的一种被称为的色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论的基本内容是物体的颜色是由物体对长波(红)、中波(绿)和短波(蓝)光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照非均性的影响,具有一致性,即Retinex理论是以色感一致性(颜色恒常性)为基础的。 根据Edwin Land提出的理论,一幅给定的图像S(x,y)分解成两幅不同的图像:反射物体图像R(x,y)和入射光图像L(x,y),其原理示意图如图8.3-1所示。 图-1 Retinex理论示意图 对于观察图像S中的每个点(x,y),用公式可以表示为: S(x,y)=R(x,y)×L(x,y) (1.3.1)实际上,Retinex理论就是通过图像S来得到物体的反射性质R,也就是去除了入射光L的性质从而得到物体原本该有的样子。 2 基于Retinex理论的图像增强的基本步骤 步骤一: 利用取对数的方法将照射光分量和反射光分量分离,即: S'(x, y)=r(x, y)+l(x, y)=log(R(x, y))+log(L(x, y)); 步骤二:用高斯模板对原图像做卷积,即相当于对原图像做低通滤波,得到低通滤波后的图像D(x,y),F(x, y)表示高斯滤波函数: D(x, y)=S(x, y) *F(x, y); 步骤三:在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像G (x, y):

图像增强方法

图像增强所包含的主要内容如下图。 1.灰度变换 灰度变换可调整图像的动态范围或图像对比度,是图像增强的重要手段之一。(1)线性变换 令图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a′,b′],如下图 g(i,j)与f(i,j)之间的关系式为: 在曝光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内。这时在显示器上看到的将是一个模糊不清、似乎没有灰度层次的图像。采用线性变换对图像每一个像素灰度作线性拉伸,可有效地改善图像视觉效果。

(2)分段线性变换 为了突出感兴趣目标所在的灰度区间,相对抑制那些不感兴趣的灰度区间,可采用分段线性变换。如下图所示。 设原图像在[0,M f],感兴趣目标所在灰度范围在[a,b],欲使其灰度范围拉伸到[c,d],则对应的分段线性变换表达式为 通过调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行拉伸或压缩。

(3)非线性灰度变换 当用某些非线性函数如对数函数、指数函数等,作为映射函数时,可实现图像灰度的非线性变换。 ①对数变换 对数变换的一般表达式为 这里a,b,c是为了调整曲线的位置和形状而引入的参数。当希望对图像的低灰度区较大的拉伸而对高灰度区压缩时,可采用这种变换,它能使图像灰度分布与人的视觉特性相匹配。 ②指数变换 指数变换的一般表达式为 这里参数a,b,c用来调整曲线的位置和形状。这种变换能对图像的高灰度区给予较大的拉伸。

2.直方图修整法 灰度直方图反映了数字图像中每一灰度级与其出现频率间的关系,它能描述该图 像的概貌。通过修改直方图的方法增强图像是一种实用而有效的处理技术。直方图修整法包括直方图均衡化及直方图规定化两类。(1)直方图均衡化直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。下面先讨论连续变化图像的均衡化问题,然后推广到离散的数字图像上。为讨论方便起见,设r和s分别表示归一化了的原图像灰度和经直方图修正后的图 像灰度。即。在[0,1]区间内的任一个r值,都可产生一个s值,且 。 T(r)作为变换函数,满足下列条件: ①在0≤r≤1内为单调递增函数,保证灰度级从黑到白的次序不变; ②在0≤r≤1内,有0≤T(r)≤1,确保映射后的像素灰度在允许的范围内。 反变换关系为,T-1(s)对s同样满足上述两个条件。由概率论理论可知,如果已知随机变量r的概率密度为pr(r),而随机变量s是r的函数,则s的概率密度ps(s)可以由pr(r)求出。假定随机变量s的分布函数用Fs(s) 表示,根据分布函数定义 利用密度函数是分布函数的导数的关系,等式两边对s求导,有: 可见,输出图像的概率密度函数可以通过变换函数T(r)可以控制图像灰度级的概率密度函数,从而改善图像的灰度层次,这就是直方图修改技术的基础。

图像对比度增强实验

电子科技大学通信学院 《图像对比度增强实验指导书》 2011年6月

图像对比度增强实验 一、实验目的 本实验是针对拟开设的《图像处理》课程而开发的综合性实验。该实验与概率统计、高等数学、信号处理等课程都有一定程度的联系。通过本实验,促使学生利用上述课程相关知识,更好地掌握图像增强的基本方法和原理。要求学生达到:掌握经典的数字图像空域增强算法的实现方法;了解实验所用的图像处理算法的运行效果;学会分析与比较各种方法的差异。 二、实验内容与要求 1.2学时:掌握图像对比度增强原理; 2.2学时:掌握图像变换原理; 3.2学时:给定输入图片,在MATLAB上实现线性变换增强和直方图增强 仿真; 4.8学时:构建图像采集系统,在已有的采集软件平台上将仿真算法用C 语言实现; 5.2学时:测试实际输入图片增强效果。 三、实验开设方式 本实验开设方式为两人一组实验,实验授课时间2学时,上机14学时。四、实验器材 硬件环境: 计算机一台; USB摄像头一个; 三脚架一个; 软件环境: Winxp操作系统; VC6.0开发环境;Open CV1.0,gsl-1.8 五、实验原理 图像增强的目的是针对应用或人们主观需求,对输入图像进行某种处理,使

得处理后的图像在特定结构或对比度等方面有明显的改善,其源头可以追溯到1969年。随着应用需求的不断发展,世界各国对此问题展开了广泛的研究。 特定结构或对比度不够清晰,可能来自质量不佳的成像设备、恶劣的大气条件、不恰当图像压缩算法等,其特点是图像中像素灰度集中在一个相对较小的范围,导致后端处理设备的观察者不能有效对图像进行判读。 造成图像对比度不够清晰的原因是多方面,包括电子系统的热噪声、光照过强、光照过弱、目标反射率过低、大雾天气、逆光拍摄、压缩等等。由于其产生原因的多样性,导致图像对比度不够清晰在图像中体现出来的现象也不同,可以分为以下3类:整体偏暗、整体偏亮、分布在亮和暗的两端,并且有可能在空间分布上存在多个区域。 现有的对比度增强技术根据其处理方法理论依据不同可分为:直方图均衡化、基于Retinex理论的图像增强、基于梯度场重建的图像增强;根据其处理范围,又可以分为全局处理与局部处理两大类。本试验将主要论述直方图均衡化和基于梯度场重建的图像增强两种方法,其中直方图均衡化仅描述基本原理,其实现由学生独立完成,而基于梯度场重建的图像增强方法,本实验将重点阐述,并给出参考代码,要求学生在此基础上进行进一步的完善。 直方图均衡化的基本原理就是对图像进行灰度变换。灰度变换有逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等方法。虽然它们对图像的处理效果不同,但处理过程中都运用了点运算,通常可分为线性变换、分段线性变换、非线性变换。其缺点是需要用户根据不同的图像调整不同的变换函数。灰度变换是最简单的对比度增强技术,它可增大图像动态范围,扩展对比度,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。灰度变换不改变图像内的空间关系,灰度级的改变是根据某种特定的灰度变换函数进行。 实验所需基本结构如图1所示。

图像去雾增强算法论文

图像去雾增强算法研究 摘要:本文首先对目前几种常用图像去雾算法进行分析;然后根据实际应用需求,选取了计算简单且易于用硬件语言实现的自适应直方图均衡化增强算法,并在此基础上对算法进行改进,通过对比发现改进后的算法对有雾图像增强效果更为显著。 abstract: this paper first analyzes several image defogging algorithms commonly used, and then selects the adaptive histogram equalization enhancement algorithm characterized by the simple calculation and easy realization through the hardware language according to the actual application requirement. on this basis, the algorithm is further improved. the comparison results show that the improved algorithm is more remarkable in improving the fog image enhancement effect. 关键词:去雾;图像增强;直方图均衡化 key words: defog;image enhancement;histogram equalization 中图分类号:tp39 文献标识码:a 文章编号:1006-4311(2012)32-0219-03 0 引言 对公路行车而言,由于雾天环境下能见度偏低,视线不好,由

遥感图像对比度增强

实习四遥感图像对比度增强 一、实习目的 结合遥感图像对比度增强原理,掌握遥感图像的对比度增强操作步骤。 二、实习内容 基于ENVI对TM影像进行扫描增强处理。 三、实习数据及软件 ENVI软件及TM影像 四、实习步骤 首先打开ENVI软件,打开需要处理的图像,选择波段4,加载进来,右击主窗口,选择Quick Statistics---Select Plot---Histogram _Band 4,可以查看亮度分布直方图。

1、线性拉伸 点击RGB,选择4、3、2依次为R、G、B赋值,点击Load RGB,以假彩色显示,点击New Display,点击Load RGB,,点击2#主窗口上的Enhance--Scroll Linear0-255,得到最原始未经拉伸的原始图像。 1 百分比拉伸 点击原始图像的主窗口上的Enhance--Scroll Linear2%,得到按2%拉伸后的图像。

2、全段线性拉伸 Enhance--Interactive Stretching--Histogram_Sourse--Band,然后,点击Stretch_Type--Linear,然后在Stretch后面输入最低、高亮度值,点击 Apply

3、分段线性拉伸 Stretch_Type--Piecewise Linear,点击鼠标中间键,创建一个节点,左键移动节点,选择拉伸范围和尺度,如果不理想,可以右键取消。

2、非线性拉伸 1、高斯拉伸 Stretch_Type--Gaussion,鼠标点击途中的虚线可以左右移动拉伸范围。

2、均匀拉伸 Stretch_Type--Equalization鼠标点击途中的虚线可以左右移动拉伸范围 。 3、平方根拉伸 Stretch_Type--Square Root鼠标点击途中的虚线可以左右移动拉伸范围。

图像去雾技术研究概述

编号 图像去雾技术研究 The research on image defogging technology 学生姓名XX 专业电子科学与技术 学号XXXXXXX 学院电子信息工程学院

摘要 本文首先简单介绍了云雾等环境对图像成像的影响,接着从图像增强的角度研究图像去雾技术的基本方法,介绍了去雾算法的原理和算法实现步骤,并对去雾算法的优缺点和适用条件进行了总结。 基于图像增强的去雾原理,本文提出了联合使用同态滤波和全局直方图均衡的改进去雾算法。先进行同态滤波使有雾图像的细节充分暴露,然后采用全局直方图均衡扩展图像的灰度动态范围。去雾效果具有对比度高,亮度均匀,视觉效果好的特点,不足的是图像的颜色过于饱和。 关键字:图像增强图像去雾同态滤波全局直方图均衡

Abstract Firstly, this paper simply introduces the influence of cloud environment of image formation, then from the enhanced image perspective of image to fog technology basic method, is introduced to fog algorithm principle and algorithm steps, and has carried on the summary to fog algorithm advantages, disadvantages and applicable conditions. As for the defogging theory based on the image enhancement, the paper puts forward the improved defogging algorithm which requires combining homomorphic filtering and global histogram equalization. We should use homomorphic filtering to get details of the fogging images clearly exposed and then use global histogram equalization to spread the images’ gray scale dynamic range. Defogging has features of high contrast ratio, uniform brightness and good visual effect. But its drawback is that the image color is too saturated. Key words: image enhancement; image defogging; homomorphic filtering; global histogram equalization;

用于图像去雾的优化对比度增强算法

用于图像去雾的优化对比度增强算法图像去雾哪家强?之前我们已经讨论过了著名的基于暗通道先验的图像去雾(Kaiming He, 2009)算法,如果你用兴趣可以参考: 此外,网上也有很多同道推荐了一篇由韩国学者所发表的研究论文《Optimized contrast enhancement for real-time image and video dehazing》(你也可以从文末参考文献【1】给出的链接中下载到这篇经典论文),其中原作者就提出了一个效果相当不错的图像去雾算法。最近有朋友在我们的图像处理算法研究学习群中也提到了该算法,恰巧想到主页君也很久未发图像相关之文章了,今天遂心血来潮,向大家科普一下这个新算法。 为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。 算法核心1:计算大气光值 通常,图像去雾问题的基本模型可以用下面这个公式来表示(这一点在基于暗通道先验的图像去雾中我们也使用过): I(p)=t(p)J(p)+(1?t(p))A 其中,J(p)=(Jr(p),Jg(p),Jb(p))T 表示原始图像(也就是没有雾的图像);I(p)=(Ir(p),Ig(p),Ib(p))T 表示我们观察到的图像(也就是有雾的图像)。r、g、b 表示位置p 处的像素的三个分量。A=(Ar,Ag,Ab)T 是全球大气光,它表示周围环境中的大气光。 此外,t(p)∈[0,1] 是反射光的透射率, 由场景点到照相机镜头之间的距离所决定。因为光传播的距离越远,那么通常光就约分散而且越发被削弱。所以上面这个公式的意思就是,本来没有被雾所笼罩的图像J 与大气光 A 按一定比例进行混合后就得到我们最终所观察到的有雾图像。 大气光A 通常用图像中最明亮的颜色来作为估计。因为大量的灰霾通常会导致一个发亮(发白)的颜色。然而,在这个框架下,那些颜色比大气光更加明亮的物体通常会被选中,因而便会导致一个本来不应该作为大气光参考值的结果被用作大气光的估计。为了更加可靠的对大气光进行估计,算法的作者利用了这样一个事实:通常,那些灰蒙蒙的区域(也就是天空)中像素的方差(或者变动)总体来说就比较小。 基于这个认识,算法的作者提出了一个基于四叉树子空间划分的层次搜索方法。如下图所示,我们首先把输入图像划分成四个矩形区域。然后,为每个子区域进行评分,这个评分的计算方法是“用区域内像素的平均值减去这些像素的标准差”(the average pixel value subtracted by the standard deviation of the pixel values within the region)。记下来,选择具有最高得分的区域,并将其继续划分为更小的四个子矩形。我们重复这个过程直到被选中的区域小于某个提前指定的阈值。例如下图中的红色部分就是最终被选定的区域。在这被选定的区域里,我们选择使得距离||(Ir(p),Ig(p),Ib(p))?(255,255,255)|| 最小化的颜色(包含r,g,b 三个分量)来作为大气光的参考值。注意,这样做的意义在于我们希望选择那个离纯白色最近的颜色(也就是最亮的颜色)

相关文档