728x90
명암비 콘트라스트 조절 방법
영상이 전반적으로 어둡거나 또는 전반적으로 밝은 픽셀로만 구성된 경우는 명암비가 낮다고 표현
밝은 영역과 어두운 영역이 골고루 섞여 있는 영상은 명암비가 높다고 표현
dst(x, y) = saturate(s * scr(x, y))
void contrast1()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
float s1 = 2.f;
Mat dst1 = s1 * src;
float s2 = 0.5f;
Mat dst2 = s2 * src;
imshow("src", src);
imshow("dst1", dst1);
imshow("dst2", dst2);
waitKey();
destroyAllWindows();
}
2023.04.06 - [러닝머신] - [컴퓨터 비전 & 머신러닝] 영상의 밝기 조절
dst1을 보면 앞서 배웠던 포화연산이 적용되어 흰색으로 나타나는 영역이 많아지게 된다
이로 인해 사물의 윤곽을 구분하기 더 어려워졌다
효과적으로 명암비를 조절하기 위해서는 밝은 픽셀은 더 밝게, 어두운 픽셀은 더 어둡게 변경해야 한다
그 기준을 그레이스케일 범위 중간 값인 128을 기준으로 설정할 수도 있고,
입력 영상의 평균 밝기로 설정할 수 있다
기준을 128로 설정하는 방법을 구현하면 밑에 식이 완성된다
dst(x, y) = scr(x, y) + (scr(x, y)-128)*α
이 수식은 항상 (128, 128) 좌표를 지나가고 α에 의해 기울기가 변경되는 직선의 방정식이다
앞의 식으로는 0보다 작아지거나 255보다 커지는 경우가 발생할 수도 있으니 포화연산도 함께 수행해야 한다
dst(x,y) = saturate(scr(x,y)+(scr(x,y)-128)* α)
void contrast2()
{
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
cerr << "Image load failed!" << endl;
return;
}
float alpha1 = 1.f;
Mat dst1 = src + (src - 128) * alpha1;
float alpha2 = -0.5f;
Mat dst2 = src + (src - 128) * alpha2;
imshow("src", src);
imshow("dst1", dst1);
imshow("dst2", dst2);
waitKey();
destroyAllWindows();
}
확실히 전에 실행했던 코드보다 명암비다 자연스럽게 증가된 것을 확인할 수 있다
728x90
'런닝머신 (ML)' 카테고리의 다른 글
[컴퓨터 비전 & 머신러닝] 영상의 산술 연산 (0) | 2023.04.18 |
---|---|
[컴퓨터 비전 & 머신러닝] 히스토그램 분석 (1) | 2023.04.17 |
[컴퓨터 비전 & 머신러닝] 영상의 밝기 조절 (0) | 2023.04.06 |
[컴퓨터 비전 & 머신러닝] 유용한 OpenCV 기능 (0) | 2023.04.05 |
[컴퓨터 비전 & 머신러닝] OpenCV 데이터 파일 출력 (0) | 2023.03.29 |