Program/OPEN_CV

[Open CV] 특징점검출과매칭 _ 이미지 스티칭

사막여유 2022. 6. 24. 22:03
728x90

2022.06.25 금일은 이미지 스티칭에  관한 강의였다.

 

 

특징점 검출과 매칭 영상의 응용기법 중 하나인 이미지 스티칭에 대해서 알아본다.

 

이미지 스티칭 ( Image Stitching ) 이란?

 - 동일 장면의 사진을 자연스럽게 ( seamless ) 붙여서 한 장의 사진으로 만드는 기술

 - 사진 이어 붙이기, 파노라마 영상 ( Panorama Image ) 

 

여러장의 사진들에서 특징점을 여러개 검출하고 특징점들이 서로 겹치는 것들을 찾아서 

두장의 영상과의 Perspective Transform 관계를 찾아내서 이어 붙이는 기법이다.

위 영상을 보게되면 하늘 부분에는 특징점들이 잘 잡히지 않는데 산이 있는 곳에는 엣지들이 많아서

특징점들이 많이 잡히는 것을 볼 수 있다.

그래서 두 산에서 공통으로 매칭된 특징점들만 남겨놓은 사진이 아래 영상이다.

이렇게 공통적으로 매칭되는 특징점들의 Perspective transform을 추출한다.

그리고 위 Perspective transform을 Wapping ( 와핑 ) 해주면 아래와같이 이어진 영상을 결과로 얻을 수 있다.

 

물론 위 영상처럼 두개의 영상을 붙이기만하면 부자연스러운 색상으로 보이기 때문에 위와같은 부분을

Smooth 하기 변화시켜주는 브랜딩기법을 사용한다.

 

위 기법에서 특징점을 매칭할 때 사용하는 방법으로는 ( Stitcher Class )  ( OpenCV ) 기본적으로 SURF 또는 ORB를 사용하는데 현재는 ORB를 사용하도록 되어있다.
 ( 사용자가 선택할 수 있도록 수정중이라고 함 )

 


이미지 스티칭 객체 생성

cv2.Stitcher_create ( , mode=None ) -> retval

- mode : 스티칭모드. cv2.PANORAMA 또는 cv2.SCANS 중 하나 선택.
              기본값은 cv2.PANORAMA.
              ( SCANS는 두 영상의 밝기가 거의 동일하다는 가정하의 스티칭 모드이기때문에
                일반적인 영상에서는 PANORAMA를 많이 사용한다. )
- retval : cv2.Stitcher 클래스 객체


이미지 스티칭 함수

cv2.Stitcher.stitch ( images, pano=None ) -> retval, pano

image : 입력영상 리스트 ( ndarray list )

retval : 성공하면 cv2.Stitcer_OK.

pano : 파노라마 영상


 

 

입력영상 리스트를 주기 위해서 img_names 라는 이미지 제목 리스트를 만든다.

이후 imgs 라는 비어있는 리스트를 만들고 실제 검사할 이미지들을 불러와서 하나씩 추가해 준다.

만들어진 이미지 리스트를 이용하여 Stitch 검사를 진행시켜준다.

 

그럼 status 라는 결과값이 나오는데 이 결과값이 Stitcher_OK 라는 값과 다른값이 나오게되면 

파노라마에 실패한 것이므로 해당 프로그램을 종료시킨다.

만약 성공했다면 이미지를 저장하고 실제 이미지를 띄운다.

 

합성 전 이미지 3장
합성 결과 이미지

 

 

 

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90