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
관리 메뉴

어제보다 나은 내가 되자

컬러 영상 히스토그램 평활화 본문

영상처리

컬러 영상 히스토그램 평활화

rudruddl 2020. 5. 13. 15:15
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
	Mat src = imread("../image/pepper.bmp");

	Mat src_ycrcb;
	cvtColor(src, src_ycrcb, COLOR_BGR2YCrCb);	// BRG->YCrCb 후 src_ycrcb에 저장

	vector<Mat> ycrcb_planes;
	split(src_ycrcb, ycrcb_planes);	// 채널 분리

	equalizeHist(ycrcb_planes[0], ycrcb_planes[0]); 

	Mat dst_ycrcb;
	merge(ycrcb_planes, dst_ycrcb);	// 분리한 채널 병합

	Mat dst;
	cvtColor(dst_ycrcb, dst, COLOR_YCrCb2BGR); // YCrCb->BGR 후 dst에 저장

	imshow("src", src);
	imshow("dst", dst);



	waitKey();
	return 0;
}

히스토그램을 통해 명암비를 증가하는 것을 "히스토그램 평활화"라고 한다.

히스토그램 평활화는 그레이스케일 영상만 입력받을 수 있기때문에 컬러 영상을 평활화하기 위해서는 그레이스케일 영상으로 바꾸어주어야한다.

 

그레이스케일 영상으로 바꾸어 준 후에 R, G, B채널 각각에 대해 평활화를 하게되면 명암비 변환 함수가 서로 달라 결과가 달라진다. 색 그자체의 값을 잃기 때문이다.

따라서, 색 정보는 건드리지 않고 명암 정보에 대해서만 건드려야한다.

YCrCb 색 공간에서는 Y가 명암, Cr과 Cb는 색상 정보를 담고 있으므로 Y만 건드린다.

이를 위해 우선 분리를 한 후에 Y채널만 평활화를 진행하고 다시 병합하면 "dst"창과 같은 결과가 나온다.

 

만약 HSI 색 공간에서는 I가 명암을 사용하는 것이므로 I만 건드려야한다.

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

히스토그램 역투영을 통한 피부색 영역 검출, calcBackProject  (0) 2020.05.13
특정 색상 영역 분할, inRange  (0) 2020.05.13
B, G, R 채널 분리  (0) 2020.05.13
색반전  (0) 2020.05.13
영상 저장!  (0) 2020.05.12
Comments