본문 바로가기
Daily Coding

[패스트캠퍼스 수강 후기] {컴퓨터비전인강} 100% 환급 챌린지 - 19일차

by 브래드(Brad) 2020. 11. 6.

OpenCV를 활용한 컴퓨터비전과 딥러닝

안녕하세요.

오늘은 오래간만에 회사 휴가를 내고 집에서 여유롭게 수강을 했습니다.

내일부터 주말이라 또 쉬겠지만 평일날 남들 출근할 때 쉬는 건 왠지 x2로 여유롭다고 느껴집니다. ㅎㅎ

근데 너무 여유부리다가 늦잠 자서 시간이 그냥 날아가버렸다는 거 ㅋㅋ

 

코딩 공부를 시작하게 된 배경을 다시 언급하자면,

인공지능이 앞으로 세상을 지배할 거라는데, 기계와 소통을 위해 코딩은 점점 필수 능력이 되어가는 것 같습니다.

파이썬으로 공부하면 쉽다는데, 왜 이렇게 어렵게 느껴지는 걸까요???

혼자 너튜브로 공부하려다 보니 두서없이 따라 하기만 하고, 정작 제가 하고 싶은 건 만들지 못하게 되는 것 같습니다.

아마도 제가 더 노력하지 않아서겠지요.

저는 뭔가를 할 수밖에 없는 환경에 놓여야만 움직이는 DNA를 가지고 있는 것 같아요

그래서 투자를 하고 본전심리가 장치가 되어 어쩔 수 없이 실행하게 만드는 유료수강제도를 이용하게 되는 것 같습니다.

 

요새 같은 코로나 시대에는 학원에 가기도 그렇고, 사람마다 이해도나 기본 실력이 다르니 수준이나 진도를 제가 정할 수 있는 온라인 교육이 좋은 것 같습니다.

FastCampus의 교육들은 커리큘럼들도 잘 짜여 있고, 한번 결제하면 평생 소장이 가능하다고 해서 종종 이용하고 있는데요.

이번에는 미션 수행하면 수강료 환급해주는 과정이 생겨서 도전해보기로 했습니다.

 

이번에 도전한 과정은 "OpenCV 를 활용한 컴퓨터 비전과 딥러닝"인데요.

마침 제가 요새 회사에서 추진하고 있는 프로젝트가 "지능형 CCTV 구축"과 관련된 것이어서,

관련 기술도 배울 겸 신청하게 되었어요

 

수강신청 후 환급 미션이 시작되기 전까지는 약간 시간이 있어서 Chapter 1 은 쉬엄쉬엄 들어봤는데요.

FastCampus 강의들의 장점은 영상 1개당 강의시간이 길어도 25분을 넘기지 않고 대체로 10분 안팎이어서

수강에 큰 부담이 없다는 것입니다.

문제는 본인이 꾸준히 하느냐에 대한 것인데 평생 소장이니 의지가 다시 타오를 때 또 보면 되죠 뭐...ㅋ

 

오늘은 전 강의에서도 몇번 본 적이 있는 캐니 에지 검출에 대해 배워봤습니다.

소벨 필터와 그래디언트에서 에지를 다소 두껍게 잡아주던 문제를 캐니라는 분이 해결을 하셨다고 하네요.

수학적인 방법은 총 4단계에 걸친 검출 과정을 거치는데

1. 가우시안 필터링(선택적) -> 2. 그래디언트 계산 ->3. 비 최대 억제 -> 4. 히스테리시스 에지 트래킹

 

캐니 에지 검출

 

캐니 에지 검출

개념은 어렵긴 하지만 우리는 함수만 가져다 쓰면 된다는 거죠 ㅋㅋ

cv2.Canny(image, threshold1, threshold2, edges=None, apertureSize=None, L2 gradient=None) -> edges

threshold1은 하단 임계값, threshold2는 상단 임계값이며 둘의 비율은 통상 1:2 혹은 1:3 정도가 적정한것 같습니다.

threshold는 마지막 히스테리시스 에지 트래킹의 개념적인 부분이에요.

 

이렇게 검출된 에지에서 직선이나 원등 특정 패턴을 가진 성분을 검출하는 방식을 통해 다른 용도의 확장이 이뤄지는데요 허프 변환을 통해 직선을 검출하는 것도 함께 배워봤습니다.

여기서의 수학적 배경은 좌표값의 성분을 파라미터 공간으로 변환해서 자주 겹쳐지는 부분을 파라미터로 선정한다는 개념인데요... 이해가 잘 되지 않습니다 ㅠ 그냥 함수만 외워서 쓰는 걸로 ㅋ

 

허프변환

관련 함수 중 단순 허프변환에 의한 선분 검출은

cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None) -> lines

확률적 허프변환에 의한 선분 검출은

cv2.HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, max_LineGap=None) -> lines

image는 입력 "에지"영상, 즉 에지가 검출된 영상입니다.

rho는 축적 배열에서 rho 값의 간격 예) 1.0 -> 1픽셀 간격

theta는 축적 배열에서 theta 값의 간격 예) np.pi/180 -> 1도 간격

threshold 축적배열에서 직선으로 판단할 임계값

lines는 직선 파라미터(rho, theta) 정보를 담고 있는 numpy.ndarray.shape 은

   허프변환에서는 (N,1,2)의 3차원 배열, dtype=numpy.float32이고

   확률적 허프 변환에서는 (N,1,4)의 3차원 배열, dtype=numpy.int32입니다.

srn, stn 은 멀티 스케일 허프 변환에서 rho 해상도 theta 해상도를 나누는 값인데 기본값은 0입니다.

min/max_theta는 검출할 선분의 최소, 최대 theta 값입니다.

minLineLength는 검출할 선분의 최소 길이

maxLineGap 은 직선으로 간주할 최대 에지 점 간격인데 기본이 0으로 되어 있지만 0보다 큰 값을 주는 게 좋다고 합니다. 예를 들어 5를 주면 5픽셀 떨어져 있어도 직선으로 간주하게 되는 것입니다.

 

 

오늘 배운 부분은 개념적인 백그라운드가 다소 천재적인? 내용이 담겨 있네요.

이런 알고리즘을 발견하신 캐니와 허프 님께 존경의 마음을 표현하고 싶지만 어쨌든 전 그냥 함수만 받아 쓰는 걸로 하겠습니다.

금요일 마무리 잘하시고, 코로나가 있으니 집에서 불금 만끽하세요~~~~

 

 

강의 링크: https://bit.ly/2DBM8d4

 

OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online. | 패스트캠퍼스

황선규 박사에게 배우는 컴퓨터 비전과 딥러닝. 고급 알고리즘의 원리를 제대로 이해하고 수십 가지의 실습을 통해 내 것으로 만드세요.

www.fastcampus.co.kr

 

댓글