zoukankan      html  css  js  c++  java
  • 图象处理算法(四)

    四、加噪
      本函数完成的功能是对图像进行加噪处理,参数Level是噪音的严重程度,Step是范围大小。函数的unsafe代码部分对每个象素点的不同颜色成分进行逐个处理,通过随机产生的值,来决定增或减的大小。函数最后执行成功后,同样得返回true值。
     1        public static bool Noise(Bitmap b, int Level, int Step)
     2        {
     3            BitmapData bmData = b.LockBits(new Rectangle(00, b.Width, b.Height), 
     4                ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
     5            int stride = bmData.Stride;
     6            System.IntPtr Scan0 = bmData.Scan0;
     7            unsafe
     8            {
     9                byte * p = (byte *)(void *)Scan0;
    10                int nOffset = stride - b.Width*3;
    11                int blue = 0, green = 0, red = 0;
    12                Random rad = new Random();
    13                for(int y=0;y<b.Height;++y)
    14                {
    15                    for(int x=0; x < b.Width; ++x )
    16                    {
    17                        if(y % Step == 0 && x % Step == 0)
    18                        {
    19                            int mLev = rad.Next(2 * Level) - Level;
    20                            blue = p[0+ mLev;
    21                            green = p[1+ mLev;
    22                            red = p[2+ mLev;
    23                            if(blue < 0)blue = 0;
    24                            else if(blue > 255)blue = 255;
    25                            if(green < 0)green = 0;
    26                            else if(green > 255)green = 255;
    27                            if(red < 0)red = 0;
    28                            else if(red > 255)red = 255;
    29                            p[0= (byte)blue;
    30                            p[1= (byte)green;
    31                            p[2= (byte)red;
    32                        }

    33                        p += 3;
    34                    }

    35                    p += nOffset;
    36                }

    37            }

    38            b.UnlockBits(bmData);
    39            return true;
    40        }
  • 相关阅读:
    编码导致 html和aspx 样式差异,变形
    Recommand of the Day:Names in English
    NSBundle常用方法及解释
    在K8S 中部署 Spring Boot 应用,爽!
    如果抛开 Spring,如何自己实现 AOP?面试必问。。。
    为什么阿里强制 boolean 类型变量不能使用 is 开头?
    CTO 说禁用 Lombok,看我怼死他。。
    面试官:什么是 YAML?和 Spring Boot 有什么关系?
    面试官:线程池多余的线程是如何回收的?
    JetBrains 发布下一代 IDE,无比轻量,几秒就能启动干活,IDEA 可以扔了。。
  • 原文地址:https://www.cnblogs.com/faib/p/660477.html
Copyright © 2011-2022 走看看