반응형
SMALL
잡음이 들어간 사진 만들기 (Gaussian Noise)
사진은 원래 잡음이 없는 것이 좋지만, 일부러 잡음을 만들어 넣더도
새로운 느낌이 난다.
잡음, 즉 noise를 만드는 방법 중, 여기서는 Gaussian Noise를 만들어 넣는 방법을 생각해보자.
우선 결과부터 살펴보면,
아래는 잡음이 없는 깨끗한 영상이다.
아래는 위의 깨끗한 영상에 일부러 잡음을 만들어 넣은 것이다.
특히 이 잡음은 Gaussian noise이다.
Gaussian noise
이것은 평균과 분산을 갖는 정규분포에 따라 임의로 발생한 noise를 말한다.
잡음값이 임의로 막 생겨나기는 하는데, 그 잡음들의 빈도수를 살펴보면 정규분포를 가지고 있다.
즉, 평균값에 가까운 잡음들의 개수가 평균에서 먼 잡음값들보다 많다.
아래는 위의 사진들을 만들어낸 소스코드이다.
line 24: Gaussian noise를 만들어 낸다.
line 28: Gaussian noise를 이미지에 적용하여 잡음이 낀 이미지를 만들어내는 과정이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { if (argc != 2) { cout << " Provide image name to read" << endl; return -1; } Mat inputImg; inputImg = imread(argv[1], CV_LOAD_IMAGE_COLOR); resize(inputImg, inputImg, Size(), 0.3, 0.3, CV_INTER_AREA); Mat noise_image(inputImg.size(), CV_16SC3); double average = 0.0; double std = 30.0; randn(noise_image, Scalar::all(average), Scalar::all(std)); Mat temp_image; inputImg.convertTo(temp_image, CV_16SC3); addWeighted(temp_image, 1.0, noise_image, 1.0, 0.0, temp_image); temp_image.convertTo(temp_image, inputImg.type()); namedWindow("Original", CV_WINDOW_AUTOSIZE); namedWindow("GaussianNoise", CV_WINDOW_AUTOSIZE); moveWindow("Original", 100, 100); moveWindow("GaussianNoise", 120, 120); imshow("Original", inputImg); imshow("GaussianNoise", temp_image); waitKey(0); return 0; } |
반응형
LIST
'Computer Vision by OpenCV' 카테고리의 다른 글
OpenCV 잡음(noise) 제거하기 - Local Averaging, Gaussian smoothing (0) | 2016.03.25 |
---|---|
OpenCV 잡음, Salt & Pepper Noise 추가하기 (1) | 2016.03.25 |
OpenCV 피부색 영역만 추출하기 (3) | 2016.03.24 |
OpenCV HLS형식의 이미지 채널별 분리 (Split HLS-formated image) (0) | 2016.03.19 |
OpenCV YUV형식의 이미지 분리 (Split YUV-formated image) (0) | 2016.03.19 |