emgucv中的高斯噪声

时间:2011-10-16 07:27:39

标签: emgucv gaussian

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

3 个答案:

答案 0 :(得分:3)

我不太确定您作为高斯滤波器的要求往往会消除噪音。要使用自定义内核,您可以使用以下代码。如果您希望使用集合均值和方差添加噪声,则可能必须使用循环遍历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();

我希望这有助于,

克里斯

答案 1 :(得分:0)

    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);

答案 2 :(得分:0)

 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