阈值数值越大图像的像素会变的越浅,平时可以行使经典USM技术来落实

     
在开局从前,首先说明一些,Photoshop的USM锐化只是本文所指USM的一种相比较独特的例子而已。

出于CSDN博客和果壳网的编制方面有不平等的地方,导致文中部分图片错位,为不影响浏览效果,指出点击打开链接。 

Photoshop:滤镜表达(下)(3) (载入中…) 本文来源于[陌生人小筑
1ps.cn]转载时请保留此音信  八、夏普en(锐化)滤镜
  锐化滤镜紧要用于通过增强相邻像素间的相比度,使图像具有显明的概况,并变得越来越清晰。这类滤镜的意义与“模糊”滤镜的意义正好相反。
  (1) Sharpen(锐化)
  通过提高图像相邻像素的比较度来达成清晰图像的目标。效能微小.
  (2) Sharpen Edges(锐化边缘)
  该滤镜同USM锐化滤镜类似。但它从未参数控制,且它只对图像中兼有明确差异的边缘举办锐化处理,假如距离较小,则不会锐化处理。
  (3) Sharpen More(进一步锐化)
  通过提高图像相邻像素的比较度来达到清晰图像的目标。强度要大一部分。
  (4) Unsharp Mask(USM 锐化)
  该滤镜是通过锐化图像的概貌,使图像的两样颜色之间浮动显著的分界线,从而达到图像清晰化的目标。与此外锐化滤镜不同的是,该滤镜允许用户设定锐化的品位。有人将它译为“虚蒙板锐化”滤镜。
  (Amount)数量:数值越大,图像里的像素的颜色变的越亮。
  (Radius)半径:数值越大,图像深色的地点的像素会越深。
  (Threshold)阈值:阈值数值越大图像的像素会变的越浅。

     
通过加强图像的往往部分的情节,图像的视觉效果可以大幅度的拿走改观。为达到这么些目标,日常可以应用经典USM技术来贯彻。这些技能的流水线可用下图来落实:

   
 在胚胎此前,首先表达某些,Photoshop的USM锐化只是本文所指USM的一种相比奇特的事例而已。

                   
图片 1

     
通过加强图像的再三部分的情节,图像的视觉效果可以大幅度的拿走改观。为达到这一个目的,经常可以运用经典USM技术来促成。这些技能的流水线可用下图来实现:

      用实际的公式表明即为:

                    图片 2

                    y(n,m)= x(n,m)+
λz(n,m)                                                      
(1)

      用实际的公式表明即为:

     
其中, x(n,m)为输入图像,y(n,m)为出口图像,而z(n,m)为校正信号,一般是通过对x举行高通滤波获取。λ是用于控制增强效用的的一个缩放因子。

                    y(n,m)= x(n,m)+
λz(n,m)                                                       (1)

     
在观念的USM算法中,z(n,m)一般能够经过下式获取:

     
其中, x(n,m)为输入图像,y(n,m)为出口图像,而z(n,m)为校正信号,一般是透过对x举办高通滤波获取。λ是用于控制增强效用的的一个缩放因子。

             
z(n,m)=4x(n,m)-x(n-1,m) -x(n +1,m)-x(n, m-1) -x(n,m+1)            
(2)

      在传统的USM算法中,z(n,m)一般可以由此下式获取:

      当然也足以用如下的模版:

              z(n,m)=4x(n,m)-x(n-1,m) -x(n +1,m)-x(n,
m-1) -x(n,m+1)             (2)

                     
图片 3

      当然也得以用如下的沙盘:

        贴部分参考代码:

                      图片 4

   Width = Bitmap.Width; Height = Bitmap.Height; Stride = Bitmap.Stride; 
   NewHeight = Height +  2; NewStride = (Width +  2) * BytePerPixel;          
   ExpandPtr = (byte*)Win32Api.GlobalAlloc(Win32Const.GPTR, NewStride * NewHeight);  // 为保证边缘部分处理方便,扩展边界部分
   Utility.GetExpandImage(Bitmap, 1, ExpandPtr);      // 拷贝图像到缓冲区,以及填充边缘像素
   for (Y = 0; Y < Height; Y++)                // 处理灰度图像
   {
       Pointer = Bitmap.Pointer + Y * Stride;
       ExpandP = ExpandPtr + (Y+1) * NewStride+1;
       for (X = 0; X < Width; X++)
       {
           HighPass = (ExpandP[X] << 2) - ExpandP[X - 1] - ExpandP[X + 1] - ExpandP[X - NewStride] - ExpandP[X + NewStride];   // z(n,m)
           Value = Pointer[X] + Amount * HighPass / 100;   // x(n,m)+ λz(n,m),式中的Amount即这里的λ     
           Pointer[X] = (byte)((((ushort)Value | ((short)(255 - Value) >> 15)) & ~Value >> 15));  // 防止数据溢出
        }
    }
    Win32Api.GlobalFree((IntPtr)ExpandPtr);

        贴部分参考代码:

  在重重场所,这一个法子也能拿到较好的效用,比如下述的莉娜(Lena)图。

   Width = Bitmap.Width; Height = Bitmap.Height; Stride = Bitmap.Stride; 
   NewHeight = Height +  2; NewStride = (Width +  2) * BytePerPixel;          
   ExpandPtr = (byte*)Win32Api.GlobalAlloc(Win32Const.GPTR, NewStride * NewHeight);  // 为保证边缘部分处理方便,扩展边界部分
   Utility.GetExpandImage(Bitmap, 1, ExpandPtr);      // 拷贝图像到缓冲区,以及填充边缘像素
   for (Y = 0; Y < Height; Y++)                // 处理灰度图像
   {
       Pointer = Bitmap.Pointer + Y * Stride;
       ExpandP = ExpandPtr + (Y+1) * NewStride+1;
       for (X = 0; X < Width; X++)
       {
           HighPass = (ExpandP[X] << 2) - ExpandP[X - 1] - ExpandP[X + 1] - ExpandP[X - NewStride] - ExpandP[X + NewStride];   // z(n,m)
           Value = Pointer[X] + Amount * HighPass / 100;   // x(n,m)+ λz(n,m),式中的Amount即这里的λ     
           Pointer[X] = (byte)((((ushort)Value | ((short)(255 - Value) >> 15)) & ~Value >> 15));  // 防止数据溢出
        }
    }

    Win32Api.GlobalFree((IntPtr)ExpandPtr);

     图片 5 
  图片 6   
图片 7

  在诸多场地,那么些措施也能获取较好的意义,比如下述的Lena图,

                   原图
                  Amount=25                                   
Amount=100

    
图片 8     图片 9   图片 10

      不过这些地点也有以下的缺陷: 1)
线性的高通滤波使得效果对噪音分外灵敏,这会招致有些不指望的扭动,特别在图像变换相比较缓慢的地点的噪音,比如上图3中草帽的左侧平坦区域。2)对于图像的边缘(高比较度区域)会现出增长过头的气象,如上图草帽的边缘。 
这两点会促成出口图像存在有的让人看上去不舒服的地方。
     很多舆论中提议了一些自适应通过动态的改变式(1)中的λ参数来控制调节结果。在图像的转移相比坦荡的区域,λ取值小,在较大的比较度(边缘处)地方取适量的λ,而在中相比较度处取较大的λ值,以使得这有的的取得最大的增强。
比如那篇著作Image Enhancement via Adaptive Unsharp
Masking
 中就提议了一种逐渐翻新的模式。然而类似这样的著作都普遍存在一个题材,这就是可控参数过多,且那么些从参数的取值需要过多的人为参加,我觉着这么的算法,是不抱有实用的价值的。

                   原图
                  Amount=25                                   
Amount=100

    
在Photoshop的锐化菜单中也有一项USM锐化,其实那一个功效也是符合式1的概念的。通过其UI界面我们能够发现其有3个参数:半径、数量、阈值,其内部的算法过程可以用如下的简短代码表示:

      但是那几个方面也有以下的通病: 1)
线性的高通滤波使得效果对噪声非常乖巧,这会导致部分不希望的扭转,特别在图像变换相比较缓慢的位置的噪音,比如上图3中草帽的左手平坦区域。2)对于图像的边缘(高相比度区域)会冒出增长过头的景色,如上图草帽的边缘。 
这两点会招致出口图像存在有的令人看起来不爽快的地点。
     很多舆论中指出了有些自适应通过动态的改变式(1)中的λ参数来控制调节结果。在图像的变换相比坦荡的区域,λ取值小,在较大的相比度(边缘处)地点取适量的λ,而在中相比度处取较大的λ值,以使得这部分的取得最大的加强。
比如这篇小说Image Enhancement via Adaptive Unsharp
Masking
 中就指出了一种逐渐翻新的艺术。然而类似这样的小说都普遍存在一个题目,这就是可控参数过多,且那些从参数的取值需要过多的人为插手,我以为这么的算法,是不具有实用的价值的。

    Width = Bitmap.Width; Height = Bitmap.Height; Stride = Bitmap.Stride; BytePerPixel = Bitmap.BitCount / 8;
    FastBitmap Clone = Bitmap.Clone();    // 备份图像数据
    BlurEffect.GaussianBlur(Clone, Radius);  // 对备份的数据进行高斯模糊处理
    for (Y = 0; Y < Height; Y++)
    {
        Pointer = Bitmap.Pointer + Y * Stride;
        PointerC = Clone.Pointer + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            Value = Pointer[X] - PointerC[X];
            if (Utility.Abs (Value) > Threshold)
            {
                Value = Pointer[X] + Amount * Value / 100;
                Pointer[X] = (byte)((((ushort)Value | ((short)(255 - Value) >> 15)) & ~Value >> 15));
            }
        }
    }
    Clone.Dispose();

    
在Photoshop的锐化菜单中也有一项USM锐化,其实这一个效用也是符合式1的概念的。通过其UI界面我们可以发现其有3个参数:半径、数量、阈值,其内部的算法过程可以用如下的简便代码表示:

     
众所周知,高斯模糊时低通滤波,那么 Value = Pointer[X] –
PointerC[X](原值-低通)则相当于高通的结果,假诺原值和低通的区其它相对值超出指定的阈值,则对改点举行所谓的锐化。

    Width = Bitmap.Width; Height = Bitmap.Height; Stride = Bitmap.Stride; BytePerPixel = Bitmap.BitCount / 8;
    FastBitmap Clone = Bitmap.Clone();    // 备份图像数据
    BlurEffect.GaussianBlur(Clone, Radius);  // 对备份的数据进行高斯模糊处理
    for (Y = 0; Y < Height; Y++)
    {
        Pointer = Bitmap.Pointer + Y * Stride;
        PointerC = Clone.Pointer + Y * Stride;
        for (X = 0; X < Width; X++)
        {
            Value = Pointer[X] - PointerC[X];
            if (Utility.Abs (Value) > Threshold)
            {
                Value = Pointer[X] + Amount * Value / 100;
                Pointer[X] = (byte)((((ushort)Value | ((short)(255 - Value) >> 15)) & ~Value >> 15));
            }
        }
    }
    Clone.Dispose();

     
这里对式(1)多引进了一个参数阈值,通过调试该值,来支配达到何种程度比较度的像素才需要加强。

      众所周知,高斯模糊时低通滤波,那么 Value = Pointer[X] –
PointerC[X](原值-低通)则一定于高通的结果,倘诺原值和低通的差其它相对值超出指定的阈值,则对改点举行所谓的锐化。

      实际的效劳讲明,这种办法的锐化要比传统的USM锐化能拿到更好的调剂成效。

     
这里对式(1)多引进了一个参数阈值,通过调试该值,来决定达到何种程度相比度的像素才需要提升。

     
以下为Threshold=0,Amount=50时不同半径的功能。

      实际的职能阐明,那种艺术的锐化要比传统的USM锐化能获取更好的调试功效。

 图片 11  图片 12  图片 13  图片 14  

     以下为Threshold=0,Amount=50时不同半径的服从。

 图片 15  图片 16  图片 17  图片 18

    
 图片 19   图片 20  图片 21 
 图片 22

                    原图                  
                                             Radius=5                  
                          Radius=50                                    
     Radius=200

      图片 23   图片 24  图片 25   图片 26

      随着半径的叠加,图像的对照度日益变强,边缘越发强烈,不过富有的调试后的图像都未现身显然的噪声增强,效果非凡之精良,对于Lena图,处理后的图样中得以显著的看出在眼睛部位,眼白和眼球的比较更为彰着、显然,而且整幅图形从感觉上说原本图像较为模糊,处理后的清晰不少。

                         
原图                                             Radius=5                                 
   Radius=50                                           Radius=200

     
Amount参数对职能的熏陶很醒目可以摸清,越大,相比较度越高,不过由于其和结果的线性关系,那一个参数的扭转对结果的熏陶比其它多个参数更灵活。

      随着半径的增大,图像的对待度逐步变强,边缘越发显明,但是拥有的调节后的图像都未出现显然的噪声增强,效果卓殊之精粹。

     
实际上,上述高斯模糊也可以用中值模糊、方框模糊来取代,所收获的坚守和高斯滤波非凡相像。在Paint.net的效果-》相片-》尖锐化滤镜就是用的中值的法门实现的。

     
Amount参数对效果的熏陶很分明能够识破,越大,相比度越高,不过出于其和结果的线性关系,这些参数的更动对结果的熏陶比此外六个参数更敏锐。

   
关于落实代码,基本上自己在下边已经提及,其实最着重仍旧高斯模糊的落实。假如你觉得有难度,正如上文所说,也能够用均值来代表,而均值模糊编码则万分简单。 

     
实际上,上述高斯模糊也得以用中值模糊、方框模糊来代表,所拿到的机能和高斯滤波非凡相像。在Paint.net的效率-》相片-》尖锐化滤镜就是用的中值的章程贯彻的。

 

   
关于落实代码,基本上我在下面已经提及,其实最关键仍然高斯模糊的落实。倘若您觉得有难度,正如上文所说,也可以用均值来替代,而均值模糊编码则非常简单。 

   
同样,提供个编译好的文件给有趣味研商该算法的情侣看看效果:

    
同样,提供个编译好的文件给有趣味探讨该算法的爱人看看效果: 

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

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

 

 

 

 ***************************笔者: laviewpbt
  时间: 2013.5.19    联系QQ:  33184777
 转载请保留本行音讯*************************

 

 

相关文章