Python OpenCV 강좌 : 제 40강 - 리매핑

Python OpenCV Remapping

Python OpenCV 강좌 : 제 40강 - 리매핑
[ Python-OpenCV ] - 윤대희

리매핑(Remapping)


1

리매핑(Remapping)은 입력 이미지에 기하학적인 변형을 적용하는 방법입니다.

기하학적 변환에서 다루었던 아핀 변환(Affine Transform)원근 변환(Perspective Transform)은 이미지에 변환 행렬을 적용하여, 이미지를 변경합니다.

리매핑은 이미지에 변환 행렬 연산을 적용하는 것이 아닌, 비선형 변환을 적용할 수 있습니다.

즉, 픽셀들의 좌표를 임의의 특정 좌표로 옮겨 이미지를 변경하는 작업을 의미합니다.



Main Code


import cv2
import numpy as np

src = cv2.imread("buildings.jpg")
height, width = src.shape[:2]
map2, map1 = np.indices((height, width), dtype=np.float32)

map1 = map1 + width / 100 * np.sin(map1)
map2 = map2 + height / 100 * np.cos(map2)

dst = cv2.remap(src, map1, map2, cv2.INTER_CUBIC)
cv2.imshow("dst", dst)
cv2.waitKey()



Detailed Code


map2, map1 = np.indices((height, width), dtype=np.float32)

색인 배열 생성 함수(np.indices)을 활용해 원본 이미지 크기와 동일한 색인 배열을 생성합니다.

np.indices((높이, 너비), 정밀도)를 의미하며, Y축 좌표 색인 행렬, X축 좌표 색인 행렬을 반환합니다.

여기서 이동되는 좌표의 값은 정수형이 아닌, 실수형을 갖습니다.



map1 = map1 + width / 100 * np.sin(map1)
map2 = map2 + height / 100 * np.cos(map2)

map1map2에 임의의 삼각 함수를 적용하여 행렬의 형태를 변경합니다.

map1과 map2는 매핑될 좌표의 값을 의미하므로, 해당 행렬의 값을 변경하면 최종 반환 이미지의 형태가 달라집니다.

이 행렬의 값을 대칭하거나 회전한다면, 기존의 기하학적 변환과 동일한 형태의 결과를 얻을 수 있습니다.



dst = cv2.remap(src, map1, map2, cv2.INTER_CUBIC)

리매핑 함수(cv2.remap)을 활용하여 원본 이미지에 리매핑을 적용합니다.

cv2.remap(원본 이미지, X축 좌표 색인 행렬, Y축 좌표 색인 행렬, 보간법, 외삽법, 외삽 색상)을 의미합니다.

원본 이미지의 픽셀 배열을 X축 좌표 색인 행렬Y축 좌표 색인 행렬의 값을 적용하여 픽셀들을 이동시킵니다.

색인 행렬의 값은 정수 좌표가 아니므로, 보간법과 외삽법을 적용합니다.

보간법과 외삽법은 제 8강 - 크기 조절제 13강 - 흐림 효과에서 내용을 확인하실 수 있습니다.



Result


2



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python OpenCV 강좌 : 제 39강 - 마우스 콜백 ⤧  Next post Python OpenCV 강좌 : 제 41강 - 색상 맵
    Python-OpenCV Category