公海赌船网址收获各子块新的照射直方图,获取各子块新的照射直方图

   
界定比较度自适应直方图均衡化算法原理、完结及效果一文中针对全局直方图均衡化的部分缺点,建议了分块的自适应均衡化技术,很好的战胜了大局直方图均衡化的有的缺陷,对于图像增强也持有分明的效应,大家多少回看下CLAHE的算法流程,不难的能够用上边包车型客车长河描述:

  在很久前达成相比度受限的自适应直方图均衡化时,就曾经想过对该算法实行一定水准的壮大,之后选用自动比较度和自动色阶代替直方图均衡化也提出了新的算法,也达到了科学的功能。本文进一步对该算法实行一定程度的扩大和互补优化。

  在很久前兑现相比较度受限的自适应直方图均衡化时,就已经想过对该算法实行自然水准的恢弘,之后采纳机关比较度和自动色阶代替直方图均衡化也提议了新的算法,也高达了正确的成效。本文进一步对该算法进行自然水准的壮大和补偿优化。

for each Tile in Image 
{
   Calcuate( HistGram);
   ClipHistGram(HistGram, ClipLimit);
   MakeMapping(HistGram);
}
for each Tile in Image 
    for each Pixel in Tile
        use bilinear interpolation between four adjacent HistGram info to generate new Pixel

① 、本文算法的概述

一 、本文算法的概述

   原始的直方图均衡化算法的基本在上述 MakeMapping(HistGram)函数中得以显示,

  依照选拔的优化的水平和垂直网格数,将图像切分成八个一个的子块,然后计算各样子块的直方图消息,并和原图全部的直方图消息进行某种混合,对于彩色图像,为了幸免不一致通道之间处理后转移过于不协调,还扩大了各通道直方图与亮度通道直方图的音讯合成,然后对合成后的直方图举办直方图裁剪和均衡化的,获取各子块新的照射直方图,为了防止新的映射表中的数据有较大的奇点或噪音,对映射表的数目举办多点取样,然后接纳样条插值算法对取样点展开插值,大概对新的映射表进行自然水准的高斯模糊,获得一张较为平缓的映射表。最后选取类似CLAHE算法中的双线性插值对种种子块之间的映射表进行插值获得新的像素值。本方法计算量小,速度高速,对映射表举行平整插值或高斯模糊能管用的防止相比度调整时发出的噪声,幸免了音讯的过度放手造成图片失真,是一种高效并且职能非凡的相比较度增强算法。

  根据选择的优化的程度和垂直网格数,将图像切分成3个两个的子块,然后计算各种子块的直方图音信,并和原图全体的直方图音讯进行某种混合,对于彩色图像,为了防止分裂通道之间处理后转变过于不协调,还增添了各通道直方图与亮度通道直方图的音讯合成,然后对合成后的直方图实行直方图裁剪和均衡化的,获取各子块新的映射直方图,为了防止新的映射表中的数据有较大的奇点或噪音,对映射表的多少开始展览多点取样,然后利用样条插值算法对取样点展开插值,恐怕对新的映射表举行一定水平的高斯模糊,获得一张较为平缓的映射表。最终选用类似CLAHE算法中的双线性插值对各种子块之间的映射表实行插值得到新的像素值。本方法计算量小,速度迅猛,对映射表实行平整插值或高斯模糊能管用的压制相比较度调整时产生的噪声,幸免了新闻的过于松开造成图片失真,是一种高效并且职能卓绝的相比度增强算法。

void MakeMapping(int* Histgram)
{
    int I, Sum = 0, Amount = 0;
    for (I = 0; I < 256; I++) Amount += Histgram[I];
    for (I = 0; I < 256; I++)
    {
        Sum += Histgram[I];
        Histgram[I] = Sum * 255/ Amount;     // 计算分布
    }
}

② 、算法进度详解

二 、算法进度详解

    上述Histgram[I] = Sum * 255/
Amount;   一句正是HE算法的骨干,就直方图数据再一次分布。

  一 、水平和垂直网格数的规定

  一 、水平和垂直网格数的规定

    大家回看一下PS的调动菜系,除了直方图均衡化是一键式菜单(即点击无可调参数界面,实际上直翻图均衡化照旧有些,在有选区的事态下回弹出一个框),还有此外多少个常用的一键操作,即:自动色阶、自动比较度以及机关颜色。从精神上讲,那四个算法同直方图均衡化一样,在个中也是3个直方图再度分布和像素重新照射的进程,因而,要是把那边的MakeMapping函数总映射进程替换他们三者中的某一种会是什么样情形和意义啊,
那实际上是通晓了CLAHE算法的法则后,很当然的能加大和联想到的。

  类似于CALHE算法,对网格的合理采取也会对本算法的结果产生首要的熏陶,过多的网格数会使得总括量分明加大,过少的网格数使得结果趋于接近全部的直方图均衡化,一般情形下,可选用8*九个网格,那里能够通过以下标准来大约的做个优化:图像的亮度的均方差越小,即整幅图像的明暗相比较相同,使用较多的网格数,比如8*8,不然使用较少的网格,比如4*4。那是因为当图像明暗较为一致时,各小块的直方图数据差距不会十分大,而一旦明暗分裂,选取较小的块,各块之间的直方图音讯差别大概不小,会导致插值时出现显然的症结。

  类似于CALHE算法,对网格的创设选取也会对本算法的结果爆发重庆大学的影响,过多的网格数会使得总括量分明加大,过少的网格数使得结果趋于接近全体的直方图均衡化,一般景色下,可挑选8*8个网格,那里能够透过以下原则来大约的做个优化:图像的亮度的均方差越小,即整幅图像的明暗相比较相同,使用较多的网格数,比如8*8,不然使用较少的网格,比如4*4。那是因为当图像明暗较为一致时,各小块的直方图数据差异不会相当的大,而要是明暗不一致等,选取较小的块,各块之间的直方图音讯差别恐怕不小,会造成插值时出现明显的弱点。

    
关于机关色阶和机关对比度的规律,笔者在调整图像-
自动对比度、自动色阶算法
一文中早就有了较为详细的贯彻,而有关机关颜色的原理,近年来截止小编就像并未意识有任何人对其实行了详细的阐述。作者在Imageshop中也只是做了一种简易的效仿,那里就不提了。

   
贰 、按规定的网格数划分图像,并获得每块的直方图消息HistB,HistG,Hist陆风X8。

   
二 、按规定的网格数划分图像,并拿走每块的直方图音信HistB,HistG,Hist揽胜。

    
以机关色阶为例,上述MakeMapping函数的样式恐怕如下所示:

 
三 、获取全图的直方图数据HistgramB,HistgramG,HistgramEscort以及亮度直方图HistgramL。

 
三 、获取全图的直方图数据HistgramB,HistgramG,Histgram奥迪Q7以及亮度直方图HistgramL。

void MakeMapping(int* Histgram,float CutLimit=0.01)
{
    int I, Sum = 0, Amount = 0;
    const int Level = 256;
    for (I = 0; I < Level; I++) Amount += Histgram[I];
    int MinB,MaxB;
    for (I = 0; I < Level; I++)
    {
        Sum = Sum + Histgram[I];
        if (Sum >= Amount * CutLimit )
        {
            MinB = I;                              
            break;
        }
    }  
    Sum = 0;
    for(I = Level-1; I >= 0; I--)
    {
        Sum = Sum +Histgram[I];
        if (Sum >= Amount * CutLimit )
        {
            MaxB = I ;                            
            break;
        }   
    }

    if (MaxB!=MinB)
    {
        for (I = 0; I < Level; I++)
        {
            if (I<MinB)
                Histgram[I] =0;
            else if(I>MaxB)
                Histgram[I]=255;
            else
                Histgram[I] = 255* (I - MinB) / (MaxB - MinB) ;     
        }
    }
    else
    {
        for (I = 0; I < Level; I++) Histgram[I]=MaxB;        //     必须有,不然会有一些图像平坦的部位效果出错
    }
}

       其中亮度定义为:  Lightness =
(CRUISER*19595 + G*38469 + B*7472) >> 16

       当中亮度定义为:  Lightness =
(Rubicon*19595 + G*38469 + B*7472) >> 16

  注意在那个函数里本人增添了CutLimit参数,那个参数名和CLAHE的同等,实际上是因为机关色阶那种工作措施,正是对直方图的一种裁剪,因而CLAHE算法的ClipHistGram进程就足以舍去了,而把CutLimit作为机关色阶的2个调节参数也是听天由命的1个政工了。

   
四 、对子块直方图和大局直方图实行融合,如下代码所示:

   
四 、对子块直方图和全局直方图实行融合,如下代码所示:

      在上述代码代码中,if
(MaxB!=MinB)的论断首假若幸免出现除以0的谬误,同时在那种景观时有产生时,必须把直方图中的全体数据都安装为马克斯B(其实那种意况产生时,原始直方图数据中自然是大多数都等于马克斯B,但可能依然有部分是不一致的,倘使不赋值为马克斯B,处理的结果图像中会现身不可捉摸的纹理图)。

HistB[Index] = (HistB[Index] * Adaptation + (100 - Adaptation) * HistgramB[Index]) / 100;
HistG[Index] = (HistG[Index] * Adaptation + (100 - Adaptation) * HistgramG[Index]) / 100;
HistR[Index] = (HistR[Index] * Adaptation + (100 - Adaptation) * HistgramR[Index]) / 100;
HistL[Index] = (HistL[Index] * Adaptation + (100 - Adaptation) * HistgramL[Index]) / 100;
HistB[Index] = (HistB[Index] * Adaptation + (100 - Adaptation) * HistgramB[Index]) / 100;
HistG[Index] = (HistG[Index] * Adaptation + (100 - Adaptation) * HistgramG[Index]) / 100;
HistR[Index] = (HistR[Index] * Adaptation + (100 - Adaptation) * HistgramR[Index]) / 100;
HistL[Index] = (HistL[Index] * Adaptation + (100 - Adaptation) * HistgramL[Index]) / 100;

     
把上述代码替换掉CLAHE算法中相应的有个别,保持插值等代码不动,可得到如下效果:

  其中Adaptation为同生共死因子,其立见成效限制为[0,100],当取值越小时,全局直方图其主导成效,效果越接近一般的直方图均衡。

  当中Adaptation为风雨同舟因子,其行之有效限制为[0,100],当取值越小时,全局直方图其主导成效,效果越接近一般的直方图均衡。

   
 公海赌船网址 1    公海赌船网址 2

  伍 、对上述融合后的结果再一次和亮度直方图举办融合,融合进度如下所示:

  五 、对上述融合后的结果再度和亮度直方图进行融合,融合进度如下所示:

               原图                        
 块大小为200,CutLimit =0.01 处理后结果

HistB[Index] = (HistB[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistG[Index] = (HistG[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistR[Index] = (HistR[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistB[Index] = (HistB[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistG[Index] = (HistG[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;
HistR[Index] = (HistR[Index] * Correction + (100 - Correction) * HistL[Index]) / 100;

    
由地点的图可以看到,处理前后的增长功用依然很扎眼的,整个图像体现更清晰。

   当中Correction为颜色改良因子,其一蹴而就限制为[0,100],当取值越大时,各通道之间越独立,效果越接近一般的直方图均衡。

   当中Correction为颜色修正因子,其立竿见影限制为[0,100],当取值越大时,各通道之间越独立,效果越接近一般的直方图均衡。

    
依据上述代码分析,那样处理的效益自然是本来图像中的黑的一部分更黑,白的一部分更白,因而,比较度尤其宣明。为了能操纵总体相比较度调节的水准,大家新扩展多个参数,用来调节在结尾隐射阶段的最大值。我那边做了之类的处理:

  上述代码中Index表示直方图色阶的目录范围,有效值[0,Bins
– 1],Bins为直方图的数目,5人时为256。

  上述代码中Index表示直方图色阶的目录范围,有效值[0,Bins
– 1],Bins为直方图的数据,六个人时为256。

void MakeMapping(int* Histgram,float CutLimit=0.01,float Contrast = 1)
{
    int I, Sum = 0, Amount = 0;
    const int Level = 256;
    for (I = 0; I < Level; I++) Amount += Histgram[I];
    int MinB =0 ,MaxB=255;
    int Min = 0,Max=255;
    for (I = 0; I < Level; I++)
    {
        if  (Histgram[I]!=0) 
        {
            Min = I ;
            break;
        }
    }

    for(I = Level-1; I >= 0; I--)
    {
        if  (Histgram[I]!=0) 
        {
            Max = I ;
            break;
        }
    }
    for (I = 0; I < Level; I++)
    {
        Sum = Sum + Histgram[I];
        if (Sum >= Amount * CutLimit )
        {
            MinB = I;                              
            break;
        }
    }

    Sum = 0;
    for(I = Level-1; I >= 0; I--)
    {
        Sum = Sum +Histgram[I];
        if (Sum >= Amount * CutLimit )
        {
            MaxB = I ;                            
            break;
        }   
    }
    int Delta = (Max - Min) * Contrast * 0.5  ;
    Min = Min - Delta;
    Max = Max +    Delta ;
    if (Min    < 0) Min = 0;
    if (Max > 255) Max = 255;

    if (MaxB!=MinB)
    {
        for (I = 0; I < Level; I++)
        {
            if (I<MinB)
                Histgram[I] =Min;
            else if(I>MaxB)
                Histgram[I]=Max;
            else
                Histgram[I] = (Max-Min)* (I - MinB) / (MaxB - MinB) + Min ;     
        }
    }
    else
    {
        for (I = 0; I < Level; I++) Histgram[I]=MaxB;        //     必须有,不然会有一些图像平坦的部位效果出错
    }
}

  ⑥ 、依据CALHE的艺术对直方图实行裁剪,之后对裁剪的直方图进行均衡化获得每种小块的映射表。

  陆 、依据CALHE的办法对直方图进行裁剪,之后对裁剪的直方图举行均衡化获得各样小块的映射表。

   首先分析获得原始块中的最大值和纤维值,然后再那几个的底蕴上根据设定的参数向黑和白三个趋势一致程度扩充,那样就制止了随便什么意况下的分布都间接扩充到0-255内。有效的遏制了噪音的推广。

  柒 、局地均衡化后映射表的坦荡。

  ⑦ 、局地均衡化后映射表的平滑。

  修改后,大家看看一些效益:

    1)  将映射表的
Bins取K等份,获得每等份数据对应的照耀表值,构成K个二维坐标点连串,亦能够依照直方图的一共数据,把一起数据平均分为K等分,获得K个二维类别点。

    1)  将映射表的
Bins取K等份,获得每等份数据对应的炫耀表值,构成K个二维坐标点种类,亦能够依据直方图的总共数据,把一起数据平均分为K等分,获得K个二维种类点。

公海赌船网址 3公海赌船网址 4公海赌船网址 5

    2)依据K个二维坐标点,使用样条插值算法拟合出一条过各种取样点的平滑映射曲线。

    2)依据K个二维坐标点,使用样条插值算法拟合出一条过种种取样点的平滑映射曲线。

          
原图                      CutLimit
=0.01,Contrast=1                    CutLimit
=0.05,Contrast=1

    3)在平滑曲线表中取0至于Bins中各色阶对应的插值结果,作为新的映射表结果。

    3)在平滑曲线表中取0至于Bins中各色阶对应的插值结果,作为新的映射表结果。

   
分析:下面那幅图原本图像全体就相比亮,由此,在Contrast=1的时候,很多块调整后的Min=0,马克斯也11分255了,由此继续扩张Contrast参数,图像的意义基本没有啥样变化了。而扩张CutLimit值使得图像的映射表由两极分化向中档靠拢,图像会稍微显得浓烈一些。

     对于Bins
=256的图像,K值建议可取32左右。

     对于Bins
=256的图像,K值建议可取32左右。

公海赌船网址 6公海赌船网址 7公海赌船网址 8

    或许其余一种处理格局正是对映射表实行一维主旋律的均值或然高斯平滑,平滑窗口可选WindowSize
= 7左右。

    可能其余一种处理格局正是对映射表举行一维样子的均值或许高斯平滑,平滑窗口可选WindowSize
= 7左右。

       原图                      CutLimit
=0.01,Contrast=1                    CutLimit
=0.01,Contrast=2.5    

  那种平滑能够拉动一定的裨益,特别是对此图像变换比较平和的区域,能够在肯定程度上削弱由于增强带来的色块感觉,而且那种方法加大到具备基于直方图增强技术的算法中。

  那种平滑可以推动一定的补益,越发是对于图像变换比较和缓的区域,能够在任其自然程度上弱化由于增强带来的色块感觉,而且那种方式加大到拥有基于直方图增强技术的算法中。

   
而地点那幅图像,则是因为全部相比较暗,增添Contrast的功能就比较鲜明了,当Contrast=2.5,图像顶部的一些细节音讯也能清晰的表明出来。

  ⑧ 、遵照CLAHE算法的经过对种种小块进行双线性插值获得最终的增强效用,当然对第贰行、第叁列、最终一行、最终一列的子块靠近图像边缘的那二分之一都只行使映射表单个方向的线性插值,而那一个子块的任何一些以及其余子块均运用映射表双线性插值得到最终结出。

  ⑧ 、依照CLAHE算法的长河对每一种小块进行双线性插值得到终极的拉长成效,当然对第②行、第③列、末了一行、最终一列的子块靠近图像边缘的那一半都只利用映射表单个方向的线性插值,而那些子块的任何一些以及其余子块均选用映射表双线性插值获得最终结果。

   
别的,分析原始代码的双线性插值部分可见,在四周边缘处,特备是离边缘小于TileX/2或低于TileY/2的一对,由于其临近消息的缺少,实际上是绝非展开双线性插值的,那样对于有些图像,边缘处显得某些不自然,弥补的办法正是在处理前对图像进行扩大,分别向周围扩张TileX/2和TileY/2大小,当然扩展部分的数目必要遵从镜像的法门填充数据。

     
 假若输入图像是灰度图,由于唯有贰个坦途,则本算法中的Correction在此场景中是可放弃的。

     
 倘若输入图像是灰度图,由于只有3个坦途,则本算法中的Correction在此场景中是可扬弃的。

    在贴一些以此算法的拍卖效用:

  整个进程的流程框图如下所示:

  整个进程的流程框图如下所示:

公海赌船网址 9公海赌船网址 10公海赌船网址 11

                           
 公海赌船网址 12

                           
 公海赌船网址 13

公海赌船网址 14公海赌船网址 15公海赌船网址 16

 

 

公海赌船网址 17   公海赌船网址 18 公海赌船网址 19                     公海赌船网址 20                

     
 叁 、测试结果

     
 三 、测试结果

     
尤其是终极一幅图,处理的效用都要比笔者博客中其它的三种艺术来的好,感觉真是帅呆了。

下图为未经过处理的本来面目图像,可知原始图中比较度很差,图像的细节新闻很少,图像饱和度也很差。右边是使用本算法后甩卖的法力图,处理后图像饱和度自然,色彩鲜艳,隐藏在原图左侧的一些不足易见的细节也能明了的体现出。

下图为未经过处理的原本图像,可知原始图中比较度很差,图像的底细音讯很少,图像饱和度也很差。左边是采纳本算法后甩卖的服从图,处理后图像饱和度自然,色彩鲜艳,隐藏在原图右边的有个别不得易见的细节也能驾驭的显示出。

      实际中还发现,假如每一种块的分寸太小,处理的速度和功能都聚会场全部下落,太大就一定于大局的处理了,因而,一般景色下可取将一副图平均分为约4*4块大小的块大小。同时,调节块大小时还会油不过生部分点突然过亮或过暗的面貌,那些题材或许会潜移默化局地图的作用。

公海赌船网址 21 
         公海赌船网址 22

公海赌船网址 23 
         公海赌船网址 24

      用C写个DLL,并提供了C#调用的实例:http://files.cnblogs.com/Imageshop/AdaptAutoContrastTest.rar

                  原始图像                                
          Adaptation = 50,Correction = 50, ClipLimit =
20时的效能

                  原始图像                                
          Adaptation = 50,Correction = 50, ClipLimit =
20时的遵守

    公海赌船网址 25

公海赌船网址 26 
        公海赌船网址 27

公海赌船网址 28 
        公海赌船网址 29

    上海体育场合中通道分别选项能够看做是一些自动色阶和自动比较度算法的切换,在勾选通道分别选项时,对于有个别图像会发现有偏色的现象,这么些情景在PS中使用自动色阶和机关比较度时也会并发。

              Adaptation =
0,Correction = 50, ClipLimit = 20时的功能                            
                                                         Adaptation =
100,Correction = 50, ClipLimit = 20时的效率

              Adaptation =
0,Correction = 50, ClipLimit = 20时的法力                            
                                                         Adaptation =
100,Correction = 50, ClipLimit = 20时的成效

 公海赌船网址 30

公海赌船网址 31 
       公海赌船网址 32

公海赌船网址 33 
       公海赌船网址 34

*********************************笔者:
laviewpbt   时间: 二〇一一.10.29    联系QQ:  33184777
 转发请保留本行消息************************

         艾达ptation =
50,Correction = 0, ClipLimit =
20时的功能                         Adaptation =
50,Correction = 100, ClipLimit = 20时的效益

         Adaptation =
50,Correction = 0, ClipLimit =
20时的作用                         Adaptation =
50,Correction = 100, ClipLimit = 20时的效用

 

   
 上边作图是其余一副未经处理的图像,那副图像音讯较为完好,色彩也较为丰盛,不过通过本算法处理后,获得的结果图(右图)则显得尤其惊艳和灿烂,因而对张晓芸规的图像,本算法也不无较强的实用性。

   
 下边作图是别的一副未经处理的图像,这副图像消息较为完好,色彩也较为丰裕,不过经过本算法处理后,获得的结果图(右图)则突显愈加惊艳和灿烂,因而对此正常的图像,本算法也有着较强的实用性。

 

 公海赌船网址 35     
  公海赌船网址 36

 公海赌船网址 37     
  公海赌船网址 38

  越发强调,该算法不妥善处理人脸图像。

  越发强调,该算法不相宜处理人脸图像。

     
 该算法难以使用SSE优化,作者在考虑是还是不是还有其他格局优化。速度上1080P的彩图大概30ms能够消除。

     
 该算法难以使用SSE优化,笔者在考虑是或不是还有此外方式优化。速度上1080P的彩图大约30ms能够化解。

     
 测试工程的地址:http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar

     
 测试工程的地方:http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar

公海赌船网址 39

公海赌船网址 40

      写博不易,欢迎点赞或者打赏。

      写博不易,欢迎点赞可能打赏。

公海赌船网址 41

公海赌船网址 42

相关文章