어제보다 나은 내가 되자
잡음(noise) 본문
가우시안 잡음
표준 편차가 시그마인 가우시안 분포는
-시그마 <= 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