크기 변환 ( Scale transformation ) 이란?
- 영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환
- x축과 y축 방향으로의 스케일 비율(scale factor)를 지정
크기변환은 영상처리과정에서 빈번하게 일어나기 때문에 OpenCV에서 함수를 제공하고있다.우리가 많이 보던 cv2.resize 함수이다.
cv2.resize( src, dsize, dst, fx, fy, interpolation )
src : 입력영상 dsize : 결과 영상 크기 ( w , h ) 튜플. ( 0,0 )이면 fx와 fy 값을 이용하여 결정 dst : 출력영상 fx, fy : x와 y 방향 스케일 비율 ( scale factor ). ( dsize 값이 0일 때 유효 )
( 영상의 크기를 2배로 키우기 위해서는 fx, fy 값을 각각 2로 줄 수 있다. ) * dsize나 fx,fy 둘중 하나는 꼭 명시해야한다. interpolation : 보간법 지정. 기본값은 cv2.INTER_LINEAR
결과 영상의 형태가 자연스러운지 부자연스러운지등의 결정을 해주는 인자
cv2.INTER_NEAREST - 속도는 가장 빠르지만 품질이 좋지 않음
cv2.INTER_LINEAR - 효율성이 가장 높음. 어느정도 퀄리티도 나오고 속도도 빠르다.
cv2.INTER_CUBIC - LINEAR보다는 느리지만 퀄리티가 조금 더 좋음
cv2.INTER_LANCZOS4 - 알고리즘이 조금 더 복잡해서 시간은 느리지만 퀄리티가 더 좋음
cv2.INTER_AREA - 영상 축소시 효과적
위 flag 에 대한 영상처리의 결과값을 살펴보면
출처 : https://deep-learning-study.tistory.com/185
위와같은 결과영상을 보면 아래로 갈수록 결과 퀄리티가 좋아진다는 것을 볼 수 있지만
NEAREST 를 제외한 나머지 3개 영상은 아주 큰 차이가 있지는 않다.
* NTER_LINEAR, CUBIC, LANCZOS4 는 픽셀값을 따로 계산해서 결과영상에 픽셀값을 따로 만들어낸다.
각각 2X2 , 4X4 , 8X8 의 픽셀값을 가지고 좀 더 자연스러운 영상을 만들어낸다는 의미이기는 하지만 시간과 퀄리티가
각각 다르기때문에 상황에 맞춰 선택해서 쓰는게 좋다.
영상의 축소시 고려할 사항
- 영상 축소 시 디테일이 사라지는 경우가 발생 ( e.g. 한 픽셀로 구성된 성분 )
- 입력 영상을 부드럽게 필터링한 후 축소, 다단계 축소
- 영상의 축소에서는 cv2.INTER_AREA 플래그를 사용
위와같이 INTER_LINEAR 플래그를 사용했을때는 디테일이 많이 변환되거나 사라지는 것을 볼 수 있고
INTER_AREA 플래그를 사용했을때는 디테일이 그대로 반영되는 것을 볼 수 있다.
영상의 대칭
영상의 대칭 변환 ( flip, reflection )
cv2.flip( src, flipCode , dst )
src : 입력영상
flipCode : 대칭 방향 지정
- +1(양수) : 좌우대칭
- 0 : 상하대칭
- -1 (음수) : 좌우 & 상하대칭
dst : 출력 영상
* 좌우대칭 - 원점을 기준으로 x축방향으로 -1배만큼 크기변환한 뒤 다시 1방향으로 이동변환한다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 기하학적 변환 _ 영상의 회전 (0) | 2022.05.25 |
---|---|
[Open CV] 기하학적 변환 _ 이미지 피라미드 (0) | 2022.05.24 |
[Open CV] 기하학적 변환 _ 영상의 이동 변환과 전단 변환 (0) | 2022.05.22 |
[Open CV] 필터링 _ 실전 코딩 ( 카툰 필터 카메라 ) (0) | 2022.05.21 |
[Open CV] 필터링 _ 잡음제거 _ 양방향 필터 (0) | 2022.05.20 |