zoukankan      html  css  js  c++  java
  • 锐化

        图像锐化是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。图像平滑往往使图像中的边界、轮廓模糊,为了减少这类不利影响,利用图像锐化技术可以使图像的边缘清晰。图像锐化处理的目的是使图像的边缘、轮廓线及图像的细节变得清晰。经过平滑的图像变得模糊的根本原因是对图像进行了平均或积分运算,因此对其进行逆运算。

    1。梯度锐化

        

    Bitmap desc = new Bitmap(source.Width, source.Height);
    BitmapData sourcedata 
    = source.LockBits(new Rectangle(00, source.Width, source.Height), 
                    ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    BitmapData descdata 
    = desc.LockBits(new Rectangle(00, desc.Width, desc.Height),
                    ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
    unsafe
    {
         
    byte* sourceptr = (byte*)sourcedata.Scan0;  
         
    byte* descptr = (byte*)descdata.Scan0;
         
    int step = source.Width * 3;
         
    double value;
         
    for (int x = 0; x < source.Height; x++)
         {
             
    for (int y = 0; y < source.Width; y++)
             {    
                  value 
    = Math.Sqrt((*sourceptr - *(sourceptr + step + 3)) * (*sourceptr - *(sourceptr + step + 3)) +
                          (
    *(sourceptr + 3- *(sourceptr + step)) * (*(sourceptr + 3- *(sourceptr + step)));
                  
    *(descptr++= value > 255 ? (byte)255 : (byte)(value);
                  sourceptr
    ++;
             }
             sourceptr 
    += sourcedata.Stride - source.Width * 3;
             descptr 
    += descdata.Stride - desc.Width * 3;
         }
    }
    source.UnlockBits(sourcedata);
    desc.UnlockBits(descdata);

    2。拉普拉斯掩膜锐化

    Bitmap desc = new Bitmap(source.Width, source.Height);
    BitmapData sourcedata 
    = source.LockBits(new Rectangle(00, source.Width, source.Height), 
                    ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    BitmapData descdata 
    = desc.LockBits(new Rectangle(00, desc.Width, desc.Height),
                    ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
    unsafe
    {
         
    byte* sourceptr = (byte*)sourcedata.Scan0;  
         
    byte* descptr = (byte*)descdata.Scan0;
         
    int step = source.Width * 3;
         
    double value;
         
    for (int x = 0; x < source.Height; x++)
         {
             
    for (int y = 0; y < source.Width; y++)
             {    
                  value 
    = Math.Abs(*(sourceptr - step) + *(sourceptr - 3+ *(sourceptr + 3+ 
                                   
    *(sourceptr + step) - *(sourceptr) * 4);
                  
    *(descptr++= value > 255 ? (byte)255 : (byte)(value);
                  sourceptr
    ++;
             }
             sourceptr 
    += sourcedata.Stride - source.Width * 3;
             descptr 
    += descdata.Stride - desc.Width * 3;
         }
    }
    source.UnlockBits(sourcedata);
    desc.UnlockBits(descdata);
  • 相关阅读:
    Vue条件判断
    揭秘webpack plugin
    vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
    npx 是什么?
    PAT 1100 Mars Numbers[难]
    PAT 1075 PAT Judge[比较]
    PAT 1083 List Grades[简单]
    PAT 1082 Read Number in Chinese[难]
    PAT 1135 Is It A Red-Black Tree[难]
    PAT 1127 ZigZagging on a Tree[难]
  • 原文地址:https://www.cnblogs.com/pennant/p/1822387.html
Copyright © 2011-2022 走看看