常备可以行使杰出USM技巧来贯彻,通过加强图像的频仍部分的开始和结果

     
在开局以前,首先说可瑞康(Karicare)些,Photoshop的USM锐化只是本文所指USM的一种相比较出色的例子而已。

是因为CSDN博客和乐乎的编辑方面有不雷同的地点,导致文中部分图片错位,为不影响浏览效果,建议点击展开链接。 

Photoshop:滤镜表达(下)(3) (载入中…) 本文来源于[别人小筑
1ps.cn]转发时请保留此新闻  八、Sharpen(锐化)滤镜
  锐化滤镜主要用以通过升高相邻像素间的比较度,使图像具备鲜明的概略,并变得越来越清晰。那类滤镜的作用与“模糊”滤镜的功用正好相反。
  (1) Sharpen(锐化)
  通过加强图像相邻像素的比较度来完成清晰图像的目标。效用微小.
  (2) Sharpen Edges(锐化边缘)
  该滤镜同USM锐化滤镜类似。但它从不参数调控,且它只对图像中有所刚毅差别的边缘进行锐化管理,若是距离非常的小,则不会锐化管理。
  (3) Sharpen More(进一步锐化)
  通过加强图像相邻像素的相比度来实现清晰图像的指标。强度要大学一年级些。
  (4) Unsharp Mask(USM 锐化)
  该滤镜是由此锐化图像的概略,使图像的不等颜色之间改造显明的分水岭,进而完结图像清晰化的目标。与别的锐化滤镜差别的是,该滤镜允许用户设定锐化的水准。有人将它译为“虚蒙板锐化”滤镜。
  (Amount)数量:数值越大,图像里的像素的颜色变的越亮。
  (Radius)半径:数值越大,图像深色的部位的像素会越深。
  (Threshold)阈值:阈值数值越大图像的像素会变的越浅。

     
通过加强图像的一再部分的内容,图像的视觉效果能够十分的大的收获退换。为达到规定的规范那一个指标,常常可以接纳精湛USM技巧来落到实处。这一个技巧的流水生产线可用下图来促成:

   
 在开局从前,首先说Bellamy(Bellamy)些,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实行MTK滤波获取。λ是用于调控加强效用的的多少个缩放因子。

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

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

     
当中, x(n,m)为输入图像,y(n,m)为出口图像,而z(n,m)为校订确定性信号,一般是经过对x举办MediaTek滤波获取。λ是用于调控巩固功用的的三个缩放因子。

             
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)
线性的MTK滤波使得效果对噪声十二分灵活,那会招致有的不指望的扭曲,极度在图像调换相比缓慢的地方的噪声,比如上航海用教室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](原值-低通)则一定于MediaTek的结果,倘若原值和低通的出入的相对化值大于钦赐的阈值,则对改点举办所谓的锐化。

    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](原值-低通)则相当于MTK的结果,假若原值和低通的反差的绝对化值大于钦赐的阈值,则对改点进行所谓的锐化。

      实际的成效评释,这种格局的锐化要比守旧的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
  时间: 2011.5.19    联系QQ:  33184777
 转发请保留本行音信*************************