光影魔术手有柔化程度和强光柔化四个参数,y)实行高斯模糊而获得

     
算法的源码能够仿效小编在地点说的多少个开源的软件,当然那大概必要你有必然的编制程序基础,终归那么些软件的框架都相比复杂。 

   
 retinex算法的效益对于一些例行的图像管理后的魔法并倒霉,我们能够认为他正是为那一个在外头情况不优异的情事下拍片的图像巩固而规划的,非常的,对于航空拍片的雾天图片,军事学上的成像图片等成像条件恶劣的图有很明显的成效,再列出一部分肖像管理成效。

       效果如下图:

     
第二步:对原来图像按钦定的半径进行高斯模糊;

   
 正是通过那样轻松的管理,执行评释能够获得相当好的功能,上边贴出一些管理后的效用。

 

  
 由以上代码开端得出结论:他们是以高斯模糊以及亮度相比较度调整四个滤镜为底蕴,稍作混合即可。

       Log[R(x,y)] =
Log[I(x,y)]-Log[L(x,y)];                
     (2-2)

   图片 1

 ***************************小编:
laviewpbt   时间: 二〇一二.6.20    联系QQ:  33184777
 转发请保留本行信息*************************

   
上述照片均选拔最大条件为300,尺度数为3,Dynamic=2时的功用。

  对于画笔半径之内的任壹地点像素(X,Y),依照其所在的职位和半径之内的比值,根据强度的设定值依据有个别线性的公式,从通过点(PointX,PointY)和(X,Y)的直线中选用叁个职分像素作为新的像素值,倘若那一个新的职位位于两点之间(图中X1,Y1),则产出眼睛裁减的法力,而位于直线的延长线上(图中的X2,Y2),则会有眼睛放大的功效,用一段简单的代码表示便是:

   图片 2 

   
随想中说,尺度取值较时辰, 能够较好地完结动态范围的滑坡,暗区域的底细能得到较好地提升,但输出颜色易失真;取值非常大时,色感一致性较好。
笔者倒是没看到尺度小有啥样低价。

   
正规的来讲,眼睛缩放属于图像的一种局部扭曲,关于扭曲,Photoshop中的液化滤镜最能展示那类算法的灵魂。眼睛缩放完全能够用其中的一种方法来促成,如下图所示:

  图像柔光效果在好多商业软件中皆有落到实处,比方美图秀秀,光影魔术手等。其能针对原始图像发生一副新的相比较平缓以为光线相比平和的意义,给人一种朦胧美,如上面几幅图所示:

   
 在上述的两幅测验图像中,非常是第二幅,大家看出分明的偏色效果,那便是SSCRUISER和MS途乐遍布都存在的主题素材。给一段比较经典的故事集中的原话供大家参照他事他说加以考察:

   
 近期,手提式有线电话机上各类图像特效的软件应用App更加的流行,相比较盛名如美图秀秀,camare360,美颜相机等,还应该有一部分在一些特定的取向做的比较的优秀的如魔漫相机等。那几个软件大约无一例外的都提供了一对一数量的针对人脸进行美化的职能,正是那些最基础的效用吸热了累累真情美人丑女子中学女的志趣。以致于大约笔者所认知的每一个25-35之内的女性朋友都晓得美图秀秀,而领悟Photoshop的则微乎其微。但是近年来听一些情人聊到,认为手提式有线电话机上的图像软件已透过了支付的鼎盛期,也不亮堂到底是或不是那般。

     
第三步:对模糊后的图像继续开始展览亮度和相比较度的调动;

   
将(2-1)式两边取对数,则可抛开入射光的属性获得物体的当然风貌,即有关系式

 

      第一步:备份原始图像;

 

    图片 3

     
近期,关于该算法的可控参数,美图秀秀只提供了五个水平(0-百分之百)调节量,其算法调解的成效和增长幅度都相当的小,光影魔术手有柔化程度和视网膜病变柔化四个参数,个中柔化程度决定柔化的迷茫效果,红眼病柔化调解图像的亮度。
还应该有点开源的软件如Imagestone、paint.net、gimp也可以有softglow算法,他们都提供了3个调整量:半径、亮度、相比度(锐度),个中Imagestone其实是翻译的gimp的算法,而GIMP和paint.net的算法在基本原理上是一样的,细节上有所分歧而已。

   
(3)Dynamic取值越小,图像的对照度越强。

     
根据上述细路写了个测验程序:http://files.cnblogs.com/Imageshop/ZoomEyes.rar

          图片 4       
  图片 5       
 图片 6     
 图片 7

       
(1)MSRC瑞虎效果要比MS帕Jero好多数,基本免除了色偏。

  作者未曾提供的完全的代码,是因为实在懂的人只要从只言片语就能够搞掌握,而那多少个呼吁党在自家这里是不收应接的。

   
 大家以paint.net的实现进程为例进行表明,在paint.net的源代码中,GlowEffect.cs为兑现该功用的文本,作者抽出其部分源代码简要表达下那一个算法的历程。

     
MSLX570(最大规格为300,尺度数为3)加强图像        
 MSRC福睿斯(最大标准为300,尺度数为3,Dynamic=2)加强图像
  MSRCPRADO(最大条件为300,尺度数为6,Dynamic=2)增强图像

   
作为人脸中最感奋的地点眼睛,自然是各软件开采商不会失掉的鼓吹对象,拿运转速度极差的可牛印象为例,他起码提供了双眼放大、去红眼、祛黑眼圈、眼睛变色、加眼影等居多和眼睛有关的美容刀。其实那几个,在先后开拓者开来但是有的完美的代码发言后开放多多鲜花,可确是许四个人为之用之美容的神器。

 

   
 MSRubicon(最大条件为300,尺度数为3)增强图像        
  MSRCKuga(最大原则为300,尺度数为3,Dynamic=2)巩固图像
  MSRC大切诺基(最大规格为300,尺度数为6,Dynamic=2)加强图像

   
使用该膨胀工具,选用妥贴的参数能获得非常完美的作用,不过一旦单独为了这些功用区研讨强大的液化滤镜的算法,是无比必要胆量的精力的。即便前段时间在开源内的软件中得以从GIMP的Iwarp代码恐怕paint.net的三个smudgle插件通过反编写翻译的措施获得代码参照他事他说加以侦查学习,可是这一个进度是相比较难过的,因为本身因为难熬过二遍了,这里分享贰个轻巧的格局去落实他,就缓慢解决大家的惨痛了啊。

     以及代码片段:

       
 继续贴图做相比较:

  中央点是用户通过鼠标单击获得的,画笔的大小决定了算法所影响到的限定。力度影响双眼放大的等级次序。

   public override unsafe void Render(
            EffectConfigToken parameters, 
            RenderArgs dstArgs, 
            RenderArgs srcArgs, 
            System.Drawing.Rectangle[] rois, 
            int startIndex, 
            int length)
        {
            // First we blur the source, and write the result to the destination surface
            // Then we apply Brightness/Contrast with the input as the dst, and the output as the dst
            // Third, we apply the Screen blend operation so that dst = dst OVER src

            ThreeAmountsConfigToken token = (ThreeAmountsConfigToken)parameters;

            AmountEffectConfigToken blurToken = new AmountEffectConfigToken(token.Amount1);
            this.blurEffect.Render(blurToken, dstArgs, srcArgs, rois, startIndex, length);

            BrightnessAndContrastAdjustmentConfigToken bcToken = new BrightnessAndContrastAdjustmentConfigToken(token.Amount2, token.Amount3);
            this.bcAdjustment.Render(bcToken, dstArgs, dstArgs, rois, startIndex, length);

            for (int i = startIndex; i < startIndex + length; ++i)
            {
                Rectangle roi = rois[i];

                for (int y = roi.Top; y < roi.Bottom; ++y)
                {
                    ColorBgra* dstPtr = dstArgs.Surface.GetPointAddressUnchecked(roi.Left, y);
                    ColorBgra* srcPtr = srcArgs.Surface.GetPointAddressUnchecked(roi.Left, y);

                    screenBlendOp.Apply(dstPtr, srcPtr, dstPtr, roi.Width);
                }
            }
        }

 
  图片 8 
 图片 9 
 图片 10

****************************作者: laviewpbt
  时间: 2016.7.15    联系QQ:  33184777
转发请保留本行消息**********************

        public GlowEffect()  : base(StaticName, StaticImage, null, EffectDirectives.None, true)
        {
            this.blurEffect = new BlurEffect();
            this.bcAdjustment = new BrightnessAndContrastAdjustment();
            this.screenBlendOp = new UserBlendOps.ScreenBlendOp();
        }

   
 关于最大标准,个人提议取值以超乎100为佳。

  小编的算法是经过如下图所示的简便进程实现的。

 
  同样,提供个编写翻译好的文书给风乐趣商讨该算法的爱人看看效果:

 
  (2)利用类似下述公式计算各通道的Min和马克斯值。

 

 

     1、输入:
原始图像数据I(x,y),尺度(也便是所谓的歪曲的半径)

             
 图片 11    (为节约篇幅,旋转了下)

     
关于滤色格局的掺和算法这里大约的提一下:  Blend = X + Y – X * Y / 255 ;
 在那之中X和Y分别表示基色和混合色,Blend表示结果色。

   
量化的章程实在有非常多种,而这几个艺术在非常大的档期的顺序上对管理的功力有所决定性的震慑。于今自个儿没见到有哪一篇散文对这一块讲的很领悟,也不了然他们的那多少个结果是怎么获取的,一种最轻松易行的法子正是测算出Log[R(x,y)]的最大值马克斯和纤维值Min,然后对每三个值Value,进行线性量化,公式为:

   
在手动的肉眼缩放进程中,一般有七个参数:中央点、画笔大小、力度,大家独家用(PointX,PointY),Radius,Strength代表。举例美图提供了如下的用户分界面:

     
第四步:用原始图像的备份数据通原始图像(经过上述二及三拍卖后的图像)依据Photoshop的滤色(Screen)格局开始展览混合。

       
(2)对于MSRCLacrosse,尺度数对结果的形象不是特地大,不过随着标准化数的增添,算法耗费时间会线性扩大,由此,一般规范数取3就相比较合适了。

      
 图片 12 
 图片 13                        

     
关于算法的实践进程能够说只在乎第二步,因为亮度相比较度的调理实际上是个查表的经过(PS的亮度相比较度指令其实要比大家想像的复杂点的,那些有空子再谈,也能够参见阿发伯的博文http://blog.csdn.net/maozefa/article/details/4778934),而第四步其实也是能够用查表的艺术来增长速度的(不过断定要用一人的不二法门)。高斯模糊那个老生长谈的标题,在本身所寻找过的网页中是未曾何人给出过三个完全的、完美的、实践进程和点名半径非亲非故的、可运转的VB或VC或JAVA程序源代码(一般都是交由参谋小说介绍)。笔者要好有其一方面包车型大巴代码,然则笔者也不甘于分享。真正有意思味的笔者引入您去找GIMP的算法代码,在GIMP的整套源码系统,至少给出了两种高斯模糊优化的代码,分别放在blur-gauss.c(给出了2种:SportageLE及IIKuga优化代码)以及contrast-retinex.c中(代码特别简洁),当然,那个代码假如提抽取来还应有举办代码层面包车型地铁整理和优化。Paint.net也提供了高斯模糊函数,不超时实质并不是高斯模糊,而是一种用线性布满的权重函数替代恒值权重,不过那八个算法里面未有浮点运算,并且还留存比Paint.net里的代码快许多即实行时间于半径毫无干系的优化算法,而且该优化算法比其他真正的高斯模糊优化算法要快1倍多,而效果上有别一点都不大,可视作实时性非常强的场合的备用算法。

  
 SS福睿斯和MSKoleos在最大口径同期什么人好何人坏小编还真讲不清。

               
 图片 14  

 
  http://files.cnblogs.com/Imageshop/SoftGlow.rar

   
由以上几组相片,能够观望,Retinex在图像去雾、宇宙航行图、军事学图像、老照片等图像的拍卖上效果至极家喻户晓。

           
 图片 15

            R(x,y) = (
Value – Min ) / (Max – Min) * (255-0)                          
(2-3)

   

                     
 原图                                  
经过Retinex(尺度为10)加强后的图像                
经过Retinex(尺度为300)加强后的图像

   
可是,那个归纳的功能,送之于百度或以此google寻觅相关算法,能找到想相配的消息量真的相当少,最起码作者没找到能够平昔用之于施行的东西。

   
 图片 16 
 图片 17   图片 18

 

      The general
effect of retinex processing on images with regional or global
gray-world violations is a “graying out” of the image, either globally
or in specific regions. This desaturation of color can, in some cases, be
severe (see Fig. 4, middle). More rarely, the gray-world violations
can simply produce an unexpected color distortion (see Fig. 4,top
left).

    Left = IIf(PointX - Radius < 0, 0, PointX - Radius)                     '  计算边界值
    Top = IIf(PointY - Radius < 0, 0, PointY - Radius)
    Right = IIf(PointX + Radius >= m_Width, m_Width - 1, PointX + Radius)
    Bottom = IIf(PointY + Radius >= m_Height, m_Height - 1, PointY + Radius)
    PowRadius = Radius * Radius

    For Y = Top To Bottom
        OffSetY = Y - PointY
        For X = Left To Right
            OffsetX = X - PointX
            XY = OffsetX * OffsetX + OffSetY * OffSetY                      '   距离的平方
            If XY <= PowRadius Then                                         '   在指定的半径内
                ScaleFactor = 1 - XY / PowRadius
                ScaleFactor = 1 - Strength / 100 * ScaleFactor              '   按照这种关系计算取样点的位置
                PosX = OffsetX * ScaleFactor + PointX
                PosY = OffSetY * ScaleFactor + PointY
                If PosX < 0 Then                                            '   放置越界
                    PosX = 0
                ElseIf PosX >= m_Width Then
                    PosX = m_Width - 1
                End If
                If PosY < 0 Then
                    PosY = 0
                ElseIf PosY >= m_Height Then
                    PosY = m_Height - 1
                End If
                Speed = Y * m_Stride + X * 3
                Index = PosY * m_Stride + PosX * 3
                ImageData(Speed) = ImageDataB(Index)                        '将当前点的值赋值为取样点的值
                ImageData(Speed + 1) = ImageDataB(Index + 1)
                ImageData(Speed + 2) = ImageDataB(Index + 2)
            End If
        Next
    Next

              (2)
遵照2-2式的测算方式统计出 Log[R(x,y)]的值。

   
本文就分享一些本人有关眼睛缩放这些主题素材的片段斟酌成果,那几个商量是3年前进行的。

    效果测量试验:

  上述代码有许多得以改进的地点,第一,上述出现的结果会有些不清楚,只是
由于总结的取样的坐标实际上是浮点数,由此一向取整会拉动相当的大的引用误差,较为合理的做法是选取双线性插值之类的插值算法实行总计优化。第二:线性映射的总结公式也能够做调解,举个例子调治成这种离眼珠越进的这么些像素的转变越小,而越远的更动越大等。

              (3)
将 Log[R(x,y)]量化为0到255限量的像素值,作为最后的输出。

   
NASA的管理效果要比小编那边的MSRC牧马人好有的,那当然未有可过分责问,人家是怎么着单位呀。

  图片 19 
 图片 20  图片 21

 
  图片 22  图片 23  图片 24

   
关于Rentinex,在分享两篇比较非凡的英文杂谈:

  • Dynamic * Var;  

       
 由上述三幅图的意义得出的下结论:

     2、管理:(1)
总括原始图像按钦赐尺度实行模糊后的图像 L(x,y);

           R(x,y) = (
Value – Min ) / (Max – Min) * (255-0)
,同不日常候要留神扩大一个溢出判别,即:

    A Multiscale
Retinex for Bridging the Gap Between Color Images and the Human
Observation of
Scenes

   
关于NASA对Retinex能力的应用,能够参照:http://dragon.larc.nasa.gov/retinex/

 

               
 MSRC奥迪Q7(Dynamic=1)巩固图像                          
 MSRCLAND(Dynamic=2)巩固图像                        
 MSRCRAV4(Dynamic=5)加强图像

                     
   原图                                  
经过Retinex(尺度为10)加强后的图像            
 经过Retinex(尺度为300)巩固后的图像

   
关于落成代码,提供GIMP的contrast-retinex.c的下载链接(要像完全看懂个中的持有代码的情趣很不方便,可是要提取个中的算法部分就不那么复杂了)。

  • Dynamic * Var;
        (3)  对Log[R(x,y)]的每三个值Value,进行线性映射: 

            Max = Mean

 ***************************笔者:
laviewpbt   时间: 二零一二.4.17    联系QQ:  33184777
 转发请保留本行新闻*************************

   
  由上述三幅图的功力得出的定论:

   
从本人如今的打听来看,GIMP的contrast-retinex.c文件里应用的算法很好,效果也很好。他一直从量化的不二等秘书籍上入手,引进了均值和均方差的概念,再增加一个决定图像动态的参数来促成无色偏的调整进程,简要描述如下。

    (1)
必要对原始图像举行每种尺度的高斯模糊,获得模糊后的图像Li(x,y),个中型小型标i表示原则数。

 
  图片 25 
 图片 26 
 图片 27

                     
原图                                             MSRCLAND                  
                                 美图秀秀 

   
一样,提供个编写翻译好的公文给风趣味切磋该算法的对象看看效果:

            Min = Mean

 
  图片 28   图片 29 
 图片 30

  图片 31 
 图片 32   图片 33

 图片 34

 
 图片 35 
 图片 36  图片 37 
   

   
(4)一般的话Dynamic取值2-3时期能获得相比较分明的加强效用,即能获得很自然过渡效果,又能保持图像的清晰度适度狠抓。

                     
  原图                                    
 经过SSKuga(尺度为300)加强后的图像              
经过MS奇骏(最大规格为300,尺度数为3)巩固后的图像

   
 因而这些算法的细路就很轻松了,具体步骤如下:

   
关于何人是何人非,为防止不供给的口舌之争,这里依然提交给位看管去辨别吧。

   
能够看得出,算法很轻巧,其主导的东西依然在于高斯模糊的完成。关于高斯模糊,英特网有许多便捷优化的稿子参谋,具体的参阅代码也许十分的少有好人提供的。

 
  http://files.cnblogs.com/Imageshop/Retinex.zip

   
 图片 38 
 图片 39 
 图片 40

                   
原始图像                                             MSRCPAJERO巩固的效果    
                                   NASA的Retinex巩固结果

 
 图片 41  图片 42  图片 43

   
为了获取越来越好的机能,大家又开辟出所谓的多尺度网膜加强算法(MS奥德赛,
Multi-Scale
Retinex),最为杰出的正是3规格的,大、中、小,不仅可以达成图像动态范围的回退,又能维持色感的一致性较好。同单尺度比较,该算法有在计算Log[R(x,y)]的值时步骤有所不一样:

 
  图片 44  图片 45  图片 46

 
  图片 47 
 图片 48  图片 49

  图片 50 
 图片 51

               
 可牛印象                                                
 光影魔术手

               
MSRCEscort(Dynamic=1)加强图像                          
 MSRC奥迪Q7(Dynamic=2)巩固图像                            
 MSRC翼虎(Dynamic=5)巩固图像

                     
 原图                                                 MSRC卡宴            
                                    美图秀秀 

   
以上算法所达成的进度一般倍称作为SS奥迪Q5(Single Scale
Retinex,单尺度网膜加强);

  图片 52 
  图片 53

 
  图片 54   图片 55 
 图片 56

                     
     原图                                    
 经过SS中华V(尺度为300)加强后的图像            
 经过MS奥德赛(最大口径为300,尺度数为3)加强后的图像

   
关于去雾效果,我们在来和美图秀秀、可牛影象、光影魔术手等现存的软件做个差相当少的比较:

 
  图片 57  图片 58  图片 59 

   
Retinex那些词是由视网膜(Retina)和大脑皮层(Cortex)
四个词组合构成的。Retinex理论主要含有了三个方面包车型大巴剧情:物体的水彩是由物体对长波、
中波和短波光线的反光工夫决定的,而不是由反射光强度的相对值调节的;物体的色彩不受光照 非均匀性的震慑,具有一致性
。 

 
  图片 60 
 图片 61 
 图片 62

           
I(x,y)=L(x,y)*R(x,y)                            (2-1)

*** ***  
 为此,研讨者又开拓出一种叫做带色彩恢复生机的多尺度视网膜加强算法(MSRC揽胜极光,Multi-Scale
Retinex with Color Restoration) ,具体探讨的进度详见 <A Multiscale
Retinex for Bridging the Gap Between Color Images and the Human
Observation of
Scenes>那篇散文,这里要说的是,笔者认为散文里的艺术不起其余作用,并且故事集里为了这么些又引进了太多的可调参数,扩张了算法的目眩神摇,不便利自动化达成。

           if (R(x,y)
> 255)  R(x,y) =255; else if (R(x,y) < 0) R(x,y)=0;

 
  图片 63  图片 64  图片 65

     (2)
 对每一个尺度下进展增添总结  Log[R(x,y)] =  Log[R(x,y)] + Weight(i)*
( Log[Ii(x,y)]-Log[Li(x,y)]);
 在那之中Weight(i)表示种种尺度对应的权重,要求各尺度权重之和必须为1,优良的取值为等权重。

   
http://files.cnblogs.com/Imageshop/contrast-retinex.rar

   
 别的的步调养单尺度的从未有过分别。

 
  图片 66

                
可牛影象                                                
光影魔术手

   
注意到一点,如同在量化的时候从不哪个人会将 Log[R(x,y)]举办Exp函数的演算而直接获得ENCORE(x,y),至于为何,作者无能为力提交鲜明的答案。

   
(1)分别总计出 Log[R(x,y)]中奥迪Q5/G/B各通道数据的均值Mean和均方差Var(注意是均方差)。

    Multi-Scale
Retinex for Color Image
Enhancement

   
依据Retinex理论,人眼感知物体的亮度取决于情形的照明和实体表面临照射光的反光,其数学表明式为:

  式中: I(x,y)代表被阅览或照相机接收到的图像时限信号;L(x,y)代表情形光的照耀分量
;Enclave(x,y)表示指点图像细节音信的靶子物体的反光分量 。

   
对地点的论争的张开二个简练的注释吧。把那个技术应用到图像管理上,就是针对大家未来已经获取的一副图像数据I(x,y),总结出相应的哈弗(x,y),则瑞虎(x,y)以为是加强后的图像,未来的珍视是怎么获得L(X,Y)。Retinex理论的建议者建议那几个L(x,y)可以因而对图像数据I(x,y)实行高斯模糊而获得,繁多散文中都列出了非常中央/围绕函数以及要求归一化的K值,搞的不在少数新手都不知道是怎样了,其实正是二个歪曲而已。从事实上应用的角度来说,也足以用均值模糊来替代高斯模糊。

相关文章