Adding Gaussian Noise in OpenCV Mat Image

asked 2014-01-24 00:08:11 -0500

Titas93 gravatar image

updated 2014-01-24 00:10:49 -0500

Hi Everyone! I have been trying to add Additive White Gaussian Noise in my Mat image(Using Qt 5.2.0) using the following piece of code, but i am getting the original image only. No noise is being added! Please can anyone help me by telling where I am going wrong!

    cv::Mat gaussianD;
    cv::Mat gaussian = grImage.clone();
    gaussian.convertTo(gaussianD, CV_32F);
    cv::Mat mult = cv::Mat::zeros(grImage.rows, grImage.cols, CV_32F);
    cv::randn(mult, 0, ui->doubleSpinBox_sDev->value());
    gaussianD = gaussianD + sqrt(ui->doubleSpinBox_sDev->value())*mult;
    gaussianD.convertTo(gaussianD, CV_8U);
    cv::namedWindow("Gaussian Noise");
    cv::imshow("Gaussian Noise", gaussianD);
    cv::imwrite("gaussian.jpg", gaussianD);
    gauss.load("gaussian.jpg");
    ui->label_NoiseImg->setPixmap(QPixmap::fromImage(gauss.scaled(ui->label_NoiseImg->size(), Qt::KeepAspectRatio)));

Here grImage is my original grayscale image, double spinbox s_Dev gives the value of the variance defined by the user, and mult is the array of gaussian random nos.

edit retag flag offensive close merge delete

Comments

Check the values in mult eg. cout << mult << endl. Also, I noticed you're generating a random matrix with a given standard deviation of doubleSpinBox_sDev, then multiplying again by the sqrt. Why the extra multiplication by the sqrt?

Nghia gravatar imageNghia ( 2014-01-24 01:29:35 -0500 )edit