Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
관리 메뉴

어제보다 나은 내가 되자

잡음(noise) 본문

영상처리

잡음(noise)

rudruddl 2020. 5. 19. 21:24

가우시안 잡음

표준 편차가 시그마인 가우시안 분포는

-시그마 <= x <= 시그마 구간에서 67%,

-2시그마 <= x <= 2시그마 구간에서 95%,

-3시그마 <= x <= 3시그마 구간에서 99.7%가 존재한다.

그러므로 표준 편차가 작은 가우시안 잡음 모델일수록 잡음에 의한 픽셀 값 변화가 적다.

표준 편차가 커질수록 잡음의 영향이 커져 더욱 지저분해진다.

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
	Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return 0;
	}

	imshow("src", src);

	for (int stddev = 10; stddev <= 30; stddev += 10) {
		Mat noise(src.size(), CV_32SC1);
		randn(noise, 0, stddev);

		Mat dst;
		add(src, noise, dst, Mat(), CV_8U);

		String desc = format("stddev = %d", stddev);
		putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0,
			Scalar(255), 1, LINE_AA);
		imshow("dst", dst);
		waitKey();
	}

	return 0;
}


소금&후추 잡음

미디언 필터는 자신과 주변 픽셀의 값을 정렬하여 가장 중간에 있는 값으로 결과 영상 픽셀 값을 바꾸는 기법이다. 픽셀 값이 큰 차이가 있는 경우에 매우 효과적이다. 소금&후추 잡음(salt and pepper noise)는 잡음이 흰색, 검은색으로 구서오디기 때문에 미디언 필터가 매우 효과적이다.

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
	Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed" << endl;
		return 0;
	}

	int num = (int)(src.total() * 0.1);
	for (int i = 0; i < num; i++) {
		int x = rand() % src.cols;
		int y = rand() % src.rows;
		src.at<uchar>(y, x) = (i % 2) * 255;
	}

	Mat dst1;
	GaussianBlur(src, dst1, Size(), 1);

	Mat dst2;
	medianBlur(src, dst2, 3);

	imshow("src", src);
	imshow("dst1", dst1);
	imshow("dst2", dst2);

	waitKey();
	return 0;
}

소금&후추 잡음에 대해 가우시안 블러링을 사용하면 잡음이 거의 그대로지만 미디언 필터를 사용하면 잡음이 거의 제거된 것을 확인할 수 있다.

'영상처리' 카테고리의 다른 글

필터링  (0) 2020.05.18
히스토그램 평활화  (0) 2020.05.14
히스토그램 스트레칭  (0) 2020.05.14
히스토그램 그리기  (0) 2020.05.14
모든 픽셀을 방문하여 밝기 변화하기  (0) 2020.05.13
Comments