본문 바로가기

Computer Vision by OpenCV

OpenCV 잡음이 들어간 사진 만들기 (Gaussian Noise)

반응형
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