• 4.3图像噪声


    4.3.1 椒盐噪声

     1 /////////////////////////////4.3.1椒盐噪声/////////////////////////////
     2 ////////https://blog.csdn.net/qq_35724402/article/details/60347024
     3 #include <iostream>
     4 #include <opencv2/core/core.hpp>
     5 #include <opencv2/highgui/highgui.hpp>
     6 #include <opencv2/opencv.hpp>
     7 
     8 using namespace cv;
     9 using namespace std;
    10 
    11 //加入椒盐噪声
    12 void salt(Mat image, int n)
    13 {
    14     int i, j;
    15     for (int k = 0; k<n; k++)
    16     {
    17         // rand()是随机数生成器
    18         i = rand() % image.cols;
    19         j = rand() % image.rows;
    20         if (image.type() == CV_8UC1)
    21         { // 灰度图像
    22             image.at<uchar>(j, i) = 255;
    23         }
    24         else if (image.type() == CV_8UC3)
    25         { // 彩色图像
    26             image.at<cv::Vec3b>(j, i)[0] = 255;
    27             image.at<cv::Vec3b>(j, i)[1] = 255;
    28             image.at<cv::Vec3b>(j, i)[2] = 255;
    29         }
    30     }
    31 }
    32 
    33 
    34 int main()
    35 {
    36     Mat image = imread("D:\彩色lena.jpg");
    37     if (image.empty())
    38     {
    39         cout << "Error!cannot be read...../n";
    40         return -1;
    41     }
    42     imshow("sourceimage", image);
    43     salt(image, 5000);
    44     //namedWindow("saltiamge");
    45     imshow("saltimage", image);
    46     waitKey(0);
    47 
    48 }
    View Code

    参考:https://blog.csdn.net/qq_34784753/article/details/69379135

     4.3.2 高斯噪声

     1 ////////https://blog.csdn.net/qq_34784753/article/details/69379135
     2 #include <cmath>
     3 #include <limits>
     4 #include <cstdlib>
     5 #include <iostream>
     6 #include <opencv2corecore.hpp>
     7 #include <opencv2highguihighgui.hpp>
     8 
     9 using namespace cv;
    10 using namespace std;
    11 
    12 double generateGaussianNoise(double m, double sigma);
    13 Mat addGaussianNoise(Mat &srcImag);
    14 
    15 int main()
    16 {
    17     Mat srcImage = imread("D:\彩色lena.jpg");
    18     if (!srcImage.data)
    19     {
    20         cout << "读入图片错误!" << endl;
    21         system("pause");
    22         return -1;
    23     }
    24     imshow("原图像", srcImage);
    25     Mat dstImage = addGaussianNoise(srcImage);
    26     imshow("添加高斯噪声后的图像", dstImage);
    27     waitKey();
    28     return 0;
    29 }
    30 
    31 //生成高斯噪声
    32 double generateGaussianNoise(double mu, double sigma)
    33 {
    34     //定义小值
    35     const double epsilon = numeric_limits<double>::min();
    36     static double z0, z1;
    37     static bool flag = false;
    38     flag = !flag;
    39     //flag为假构造高斯随机变量X
    40     if (!flag)
    41         return z1 * sigma + mu;
    42     double u1, u2;
    43     //构造随机变量
    44     do
    45     {
    46         u1 = rand() * (1.0 / RAND_MAX);
    47         u2 = rand() * (1.0 / RAND_MAX);
    48     } while (u1 <= epsilon);
    49     //flag为真构造高斯随机变量
    50     z0 = sqrt(-2.0*log(u1))*cos(2 * CV_PI*u2);
    51     z1 = sqrt(-2.0*log(u1))*sin(2 * CV_PI*u2);
    52     return z0*sigma + mu;
    53 }
    54 
    55 //为图像添加高斯噪声
    56 Mat addGaussianNoise(Mat &srcImag)
    57 {
    58     Mat dstImage = srcImag.clone();
    59     int channels = dstImage.channels();
    60     int rowsNumber = dstImage.rows;
    61     int colsNumber = dstImage.cols*channels;
    62     //判断图像的连续性
    63     if (dstImage.isContinuous())
    64     {
    65         colsNumber *= rowsNumber;
    66         rowsNumber = 1;
    67     }
    68     for (int i = 0; i < rowsNumber; i++)
    69     {
    70         for (int j = 0; j < colsNumber; j++)
    71         {
    72             //添加高斯噪声
    73             int val = dstImage.ptr<uchar>(i)[j] +
    74                 generateGaussianNoise(2, 0.8) * 32;
    75             if (val < 0)
    76                 val = 0;
    77             if (val>255)
    78                 val = 255;
    79             dstImage.ptr<uchar>(i)[j] = (uchar)val;
    80         }
    81     }
    82     return dstImage;
    83 }
    View Code

  • 相关阅读:
    暑假训练第三周总结
    UVA 1212 Duopoly
    UVA 12125 March of the Penguins
    UVA 1345 Jamie's Contact Groups
    UVA 10806 Dijkstra, Dijkstra.
    暑假训练第一周总结
    HDU 5792 World is Exploding
    HDU 5791 Two
    HDU 5787 K-wolf Number
    Sql With as 用法
  • 原文地址:https://www.cnblogs.com/thebreakofdawn/p/9532134.html
Copyright © 2020-2023  润新知