이미지 처리 심화 - Grayscale to BGR

be1le·2022년 3월 19일
5

Open-CV

목록 보기
10/11
post-thumbnail

이번 시간에는 조금 어려운 개념도 함께 배워가며 실습을 진행해 보려 한다!
우선 Grayscale이란 단어를 단순하게 흑백사진과 혼동해서 사용하는 경우가 상당히 많은데 이는 틀린 표현이다. 흑백이란 정말 Black and white 만으로 이루어진 사진이고 우리가 보통 생각하는 흑백사진은 Grayscale인 경우가 많다!

예를 들어보겠다!

구글 조차도 헷갈리는 Grayscale이란 개념 ! 하지만 우리는 제대로 알고가자!

흑백사진(Black and white)은 이처럼 정말 검정색과 하얀색 만으로 이루어진 사진이고


이렇게 우리가 밝기를 조금이라도 느낄 수 있다면 Grayscale img이다!

패키지 부터 로드하기!


이 실습은 단 두가지의 라이브러리면 충분하다!

모델 로드하기


모델 로드하는 과정이 조금 복잡해 졌다. 분명 앞선 실습까지는 변수에 모델을 할당하거나 변수에 함수를 할당하면 끝났는데 지금 보면 여러 추가적인 코드가 많이 작성된걸 확인 할 수 있다. 이것들은 무엇일까?

"개발 단계에서의 부산물"

우리가 정확히 모든 코드를 이해 할 필요는 없는 부분이다.마치 dets[2]이게 얼굴을 표현하는 index 였던것 처럼. 하지만 간단히 설명을 해보자면
해당 모델은 Caffe 라는 딥러닝 프레임워크로 학습된 모델인데 OpenCV dnn 으로 모델을 로드하는 과정에서 빠진 부분을 보충하는 코드인 것이다! 이 또한 딥러닝 연구원들이 연구하는 과정에서 파생된 것들입니다. 이전에 모델을 로드하던 것과 생김새는 다르지만 원리는 똑같다는 것만 알고 있자!

실제로 중요한 부분은 readNetFromCaffe 함수입니다. 이 부분에 모델의 경로를 입력해주는데 prototxt와 weights를 함께 입력해주어야 한다!

전처리



우리는 이제 프로이기에 주석만으로도 충분히 이해하고 실습을 진행할 수 있다. 하지만 처음보는 개념이 등장하였다 바로 lab채널

lab채널이란 무엇일까?

Lab 컬러 시스템
L (Luminosity) - 명도, 이미지의 밝기
a - 빨강 / 초록의 보색(a complementary color)축
b - 노랑 / 파랑의 보색(a complementary color)축

신가하게도 우리가 알던 RGB,BGR채널과는 다르게 실질적인 색을 표현하는 채널은 2개로 이루어진 컬러 시스템이다! 상당히 흥미로워서 더욱더 자세하게 알아보고 싶은사람은 참고할만한 사이트 하나를 추천해 두겠다!
위키백과-lab컬러 시스템

추론


항상 봐오던 setInput()함수에 차원변형이 되어있는 blob변수를 넣어준뒤 output함수에 net.forward()를 사용하여 추론을 하게된다! img와 동영상 모두 같은 flow인걸 우리는 이제 알 수 있다! 동영상도 img니까! :)

후처리

후처리 또한 항상 같은 flow를 보여주게 되는데 그를 정리해 보자면 이렇게 된다.

1.늘렸던 차원을 다시 줄여준다.

2.출력 크기에 맞게 resizing을 해준다

3.l채널 이미지랑 output_resized를 채널방향으로(순방향) concatenate(합쳐주는) 해준다.
(해당 실습에서는 lab채널을 사용하였기에 추가된 flow이다. BGR채널사용시 필요하지 않다.)

4.BGR 채널로 바꿔준다.

5.출력 크기 제한 ( clip()함수사용 )

6.컴퓨터만 이해하는 결과를 다시 astype('uint8')구문을 활용하여 사람이 알아볼 수 있게 만들어 준다.

이렇게 대략적으로 5~6가지 후처리 flow를 거치게 되는데 이는 외운다기 보다는 우리가 왔던길을 되돌아 간다는 생각으로 코드를 써내려 가면 훨씬 논리적으로 접근할 수 있다!!!

출력

이렇게 cv2의 imread()와 imshow()를 사용하여서 출력을 하게되면!


분명 Grayscale img를 넣었는데 우리가 출력한 결과는 너무나도 자연스로운 BGR 컬러의 결과물이다. 개인적으로는 너무 신기하기도 하고 재밌었던 실습이라서 꼭 블로깅을 하고싶다고 생각 했었는데 오늘 이렇게 블로깅을 함으로써 속이 편안해 졌다!

글을 마치며

정말로 내가 1~2년후에 나를 돌아봤을때 미래의 내가 지금의 나에게 참 고마워 했으면 좋겠다. 지금의 이렇게 잠을 할애하며 노력하는 지금의 내가 1~2년 후의 나를 만들었다고 미래의 내가 생각이 들게끔. 그렇게 살고싶다 오늘 하루를! :)

profile
그저 그런 개발자가 되지 않겠습니다.

0개의 댓글