【问题标题】:Gaussian Noise in emgucvemgucv中的高斯噪声
【发布时间】:2011-12-08 15:16:47
【问题描述】:

如何使用 emgucv 向图像添加高斯噪声(具有特定的均值和方差)?

【问题讨论】:

    标签: emgucv gaussian


    【解决方案1】:

    我不太确定您作为高斯滤波器的要求是为了消除噪声。要使用自定义内核,您可以使用以下代码。如果您希望添加具有设定均值和方差的噪声,那么您可能不得不求助于循环通过 my_image.Data 属性并以这种方式添加它。下面是使用自定义内核的代码,如果它不是你之后告诉我的,我会尝试找到更合适的东西,示例图像的链接在这种情况下可能有用。

    Image<Bgr, Byte> my_image = new Image<Bgr, byte>(open.FileName);
    
    float[,] k = { {0, 0, 0},
                   {0, 0, -0},
                   {0.33F, 0, -0}};
    
    ConvolutionKernelF kernel = new ConvolutionKernelF(k);
    
    Image<Bgr, float> convolutedImage = my_image * kernel;
    
    pictureBox1.Image = convolutedImage.ToBitmap();
    

    我希望这会有所帮助,

    克里斯

    【讨论】:

      【解决方案2】:
          Bitmap image = //your bitmap image
          Image<Hsv, Byte> templateImageInHsv = new Image<Hsv, Byte>(image);
          templateImageInHsv = templateImageInHsv.SmoothGaussian(3);
      
          // Summary:
          //     Perform Gaussian Smoothing in the current image and return the result
          //
          // Parameters:
          //   kernelSize:
          //     The size of the Gaussian kernel (kernelSize x kernelSize)
          //
          // Returns:
          //     The smoothed image
          public Image<TColor, TDepth> SmoothGaussian(int kernelSize);
      

      【讨论】:

        【解决方案3】:
         public static Image<Gray, byte> AddGaussianNoise(Image<Gray, byte> originalImage,int mean=0, int sigma=1)
                {
                    var rnd = new Random();
                    var noiseGenerator = new GaussianRandom(rnd);
                    var noiseImage = new Image<Gray, float>(originalImage.Width, originalImage.Height);
                    var tempImage = new Image<Gray, float>(originalImage.Bitmap);
                    var noiseArray = Enumerable.Range(0, tempImage.Width * tempImage.Height).Select(o =>(float) noiseGenerator.NextGaussian(0, sigma)+mean).ToArray();                
                    noiseArray = noiseArray.Select(o => o+mean ).ToArray();
                    var arrayAsBytes= GetByteArray(noiseArray);
                    noiseImage.Bytes = arrayAsBytes;
                    tempImage += noiseImage;
                    return tempImage.Convert<Gray, byte>();
        
                }
        

        对于 GaussianRandom 我使用的是https://stackoverflow.com/a/4594881

        【讨论】:

          猜你喜欢
          • 2016-02-07
          • 2014-08-26
          • 2016-08-17
          • 2014-09-23
          • 1970-01-01
          • 2017-05-01
          • 2021-12-07
          • 2011-09-12
          • 1970-01-01
          相关资源
          最近更新 更多