본문 바로가기

python/컴퓨터 비전

OpenCV 기초

영상(image)이란?

 

    영상을 video로 생각할 수 있지만 여기서는 image를 다루는것이 곧 영상처리임을 알아야 합니다. 영상의 구성요소로는 픽셀이 있죠. 흔히들 1920 x 1080은 픽셀 수를 나타냅니다. 영상은 밝기와 색상이 다른 일정한 수의 픽셀들로 구성됨을 알 수 있습니다. 따라서 픽셀처리가 곧 영상처리의 출발점입니다.

 

   

    센서들을 살펴보면 빛을 통과시킬때 빨간색만 통과시키는, 초록색만 통과시키는, 파란색만 통과시키는 픽셀이 있음을 알 수 있습니다. CFA를 보면 초록색 픽셀이 더 많은것을 알 수 있는데요. 이는 사람의 눈이 초록색에 더 민감하게 반응하기 때문이라고 합니다. 

 

    color 이미지는 3개의 채널로 구성됨을 알 수 있습니다. 각각의 채널은 Red, Green, Blue를 나타냅니다. 이 3가지 채널이 모여서 하나의 이미지를 만들어 냅니다. 따라서 이미지는 3차원 배열임을 알 수 있죠!

 

 

    트루컬러(Truecolor)영상에 대해서 알아보겠습니다. 일단 Red, Green, Blue의 약자인 RGB 컬러성분을 256단계로 나눕니다. 0~255인 값을 보면 2의 8제곱, 즉 8bit가 생각납니다. 픽셀당 8bit로 표현하는 것이죠. 그리고 RGB색 성분의 조합을 통해 256 x 256 x 256 = 16,777,216가지의 어마어마한 양의 색을 표현할 수 있게됩니다.


그레이스케일 (Grayscale) 영상

 

    그레이 스케일 영상은 흑백영상이라고 이해하기 보다는 밝기 정보만으로 구성된 영상이라고 이해해야 합니다. 밝기 정보도 똑같이 256단계인 8bit로 표현됩니다. 픽셀값을 0~255 (integer)로 표현하게 되죠.

 

그레이스케일

    Y <- 0.299 * R + 0.587 * G + 0.114 * B 를 보면 직관적으로 알수 있다싶이 Y는 밝기를 나타내고 나머지는 RGB를 나타냄을 알 수 있습니다. RGB앞에있는 각각의 가중치를 좀 살펴보면 유난히 G의 가중치가 높다는것을 알 수 있습니다. 이 또한 사람의 눈에 녹색이 민감하기 때문에 다른값보다 보통 더 높게 해줍니다. 위는 공식이 정해진건 아니지만 위의 수식은 수많은 기법중에 하나입니다.

    어두울수록 0에 가깝고 밝을수록 255에 가까운걸 볼 수 있습니다. 그런데 그레이 스케일도 3차원 배열이라고 합니다. 가령 예를들어, 1920 x 1080 x 3채널 RGB는 3차원 배열임을 쉽게 받아들이지만, 1920 x 1080 x 1채널 Y값 도 3차원 배열임을 알아야 합니다.


영상 파일 형식

 

BMP

    마이크로소프트 사가 개발한 비트맵 이미지 형식입니다. 픽셀정보를 압축하지 않고 그대로 저장했습니다. 따라서 8bit의 각각의 RGB값이 그대로 남아있습니다. 따라서 1px은 24bit이겠죠? 만약 1920 x 1080 x 24bit 의 이미지가 있다면 용량이 매우 클것입니다. 대신에 파일구조가 단순하여 별도의 라이브러리 없이 파일 입출력 프로그래밍이 가능합니다. C언어로도 다룰수 있을정도로 간단해요.

 

JPG (JPEG)

    사진같은 컬러영상을 압축하여 저장하는 표준입니다. JPEG의 마지막 G는 기관의 뜻을 가지고있습니다 ^^. 압축시에는 데이터의 손실(lossy compression)이 발생합니다. 압축률이 높아서 용량이 크게 감소하는 장점을 가지고 있습니다. 영상 압축의 품질을 0~100% 로 정할 수 있습니다. 100%으로 하면 거의 BMP와 같은 품질입니다.

 

GIF

    우리가 흔히 볼수 있는 움짤입니다. 온라인 전송을 위해 만든 그래픽 포멧이라서 용량이 작아져야 했습니다. 위에서 RGB는 R, G, B 각각 8bit씩 사용해서 24bit로 트루톤 칼라를 만들어낸것을 알았습니다. 그런데 gif는 무손실 압축(lossless compression)을 지원하나 8bit = 256가지의 색상만을 지원합니다. 따라서 일반사진을 GIF로 변환하면 화질이 떨어집니다. 16,777,216가지의 색이 256개의 색으로만 표현해야 하니 그렇습니다.

 

PNG

    PNG는 GIF를 데체하기 위해 만들어진 오픈소스 포멧입니다. Poratble Network Graphics 의 약자입니다. 무손실 압축을 통해서 컬러영상도 무손실 압축을합니다. 24bit 컬러를 모두 무손실로 표현한다는데 무슨 어마어마한 수학적 기법으로 이를 가능하게 했습니다. PNG포멧은 투명도 옵션인 알파채널을 지원합니다. RGB + 알파 인데요 따라서 4채널이 될 수도 있습니다.