NPP Geometry Transforms 2

Geometry Transforms 2

Affine Transforms

아핀 변환을 기반으로 이미지를 변형(왜곡)합니다.

아핀 변환은 행렬 c로 제공됩니다. 원본 이미지의 픽셀 위치는 대상 이미지의 위치에 매핑됩니다. 대상 이미지 좌표는 다음과 같이 계산됩니다.

\[\textcolor{Black}{ x'=c_{00}*x+c_{01}*y+c_{02} }\] \[\textcolor{Black}{ y'=c_{10}*x+c_{11}*y+c_{12} }\] \[\textcolor{Black}{ C=\begin{bmatrix} c_{00} && c_{01} && c_{02} \\ c_{10} && c_{11} && c_{12} \end{bmatrix} }\]

아핀 변환은 선형 변환(전통적인 행렬 곱셉)과 이동 연산으로 이해될 수 있습니다.

\(\textcolor{Black}{ L = \begin{bmatrix} c_{00} && c_{01} \\ c_{10} && c_{11} \end{bmatrix} \quad }\) 2x2 행렬 L 은 아핀 변환의 선형 변환 부분을 나타냅니다. \(\textcolor{Black}{ v=\begin{pmatrix} c_{02} \\ c_{12} \end{pmatrix} \quad }\) 벡터 v는 변환 후 이동, 즉 픽셀 위치가 변환된 후에 의해 변환 됩니다.

Perspective Transforms

   
   // 원본 직사각형 ROI와 대상 사각형 투영이 주어진 원근 변환 계수를 계산한다.
   // oSrcROI : 원본 사각형
   // quad : 목적지 사각형
   // aCoeffs : 원근 변환 계수
   NppStatus nppiGetPerspectiveTransform(NppiRect oSrcROI, const double quad[4][2], double aCoeffs[3][3])
   
   // 주어진 소스 직사각형 ROI의 원근 변환 투영을 계산합니다.
   // oSrcROI : 원본 사각형
   // quad : 목적지 사각형
   // aCoeffs : 원근 변환 계수
   NppStatus nppiGetPerspectiveQuad(NppiRect oSrcROI, double quad[4][2], const double aCoeffs[3][3])

   // 주어진 소스 직사각형 ROI의 원근 투영의 경계 상자를 계산한다.  
   // quad : 목적지 사각형  
   // aCoeffs : 원근 변환 계수  
   NppStatus nppiGetPerspectiveBound(NppiRect oSrcROI, double bound[2][2], const double aCoeffs[3][3])
   
 

Perspective Transform

원근 변환을 기반으로 이미지를 변형(왜곡)한다. 원근 변환은 행렬 3 x 3 C로 제공된다. 원본 이미지의 픽셀 위치(x,y)는 대상 이미지의 (x’,y’)위치에 매핑된다. 대상 이미지 좌표는 다음과 같이 계산된다.

\[\textcolor{Black}{ x'=\frac{c_{00}*x+c_{01}*y+c_{02}} {c_{20}*x+c_{21}*y+c_{22}} }\] \[\textcolor{Black}{ y'=\frac{c_{10}*x+c_{11}*y+c_{12}} {c_{20}*x+c_{21}*y+c_{22}} }\] \[\textcolor{Black}{ C=\begin{bmatrix} c_{00} && c_{01} && c_{02} \\ c_{10} && c_{11} && c_{12} \\ c_{20} && c_{21} && c_{22} \\ \end{bmatrix} }\]
  
  // 단일 채널 8비트 부호없는 정수 원근 왜곡.
  // pSrc : 원본 이미지 포인터.
  // oSrcSize : 원본 이미지 픽셀의 크기
  // nSrcStep : 원본 이미지의 라인 스탭
  // oSrcROI : 원본 ROI
  // pDst : 목적 이미지 포인터.
  // nDstStep : 목적 이미지 라인 스탭
  // oDstROI : 목적 ROI
  // aCoeffs : 원근 변환 계수
  // eInterpolation : 보상 모드(NPPI_INTER_NN, NPPI_INTER_LINEAR or NPPI_INTER_CUBIC)
  // nppStreamCtx : 애플리케이션 관리 스트림 컨텍스트.
  NppStatus nppiWarpPerspective_8u_C1R_Ctx(const Npp8u *pSrc, NppiSize oSrcSize, int nSrcStep, NppiRect oSrcROI, Npp8u *pDst, int nDstStep, NppiRect oDstROI, const double aCoeffs[3][3], int eInterpolation, NppStreamContext nppStreamCtx)
  

(https://docs.nvidia.com/cuda/npp/core_npp.html)
출처 - CUDA NPP