아핀 변환(Affine Transformation)이란 무엇인가?

2024. 8. 1. 07:00·Machine Learning Math/Linear Algebra
반응형

아핀 변환 이란?

아핀 변환(Affine Transformation)은 선형 변환(Linear Transformation)과 평행 이동(Translation)을 결합한 변환을 의미한다. 즉, 다음과 같은 수식 처럼 $\mathbf{x}$ 를 변환하면, 아핀 변환이다.

 

$ \mathbf{y} = \mathbf{A} \mathbf{x} + \mathbf{b} $

 

이곳에서 $\mathbf{A}$ 는 선형 변환을 하는 행렬이고, $\mathbf{b}$ 가 수평 변환을 하는 벡터이다.

 

아핀 변환 사용해보기

$\mathbf{x}$ 를 ${\theta}$도만큼 회전시키려면 다음과 같은 $\mathbf{A}$를 사용하면 된다. 

$\mathbf{A} = \begin{bmatrix} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{bmatrix}$

 

즉, 45도를 회전하려면 다음과 같은 $\mathbf{A}$를 사용하면 되며

$\mathbf{A} = \begin{bmatrix} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{bmatrix}$

 

전체 수식은 다음과 같아진다.

$\begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}
$

 

이를 다음과 같이 파이썬 코드로 만들어 실행해보면

import numpy as np

# 회전 각도 (라디안 단위)
theta = np.pi / 4  # 45도 회전

# 회전 행렬 정의
rotation_matrix = np.array([
    [np.cos(theta), -np.sin(theta)],
    [np.sin(theta), np.cos(theta)]
])

# 원래 점 정의
point = np.array([1, 0])

# 회전 변환 적용
rotated_point = np.dot(rotation_matrix, point)
print("Rotated point:", rotated_point)

 

$\begin{pmatrix}1 & 0 \end{pmatrix}$ 에 있던 점이 45도만큼 회전해  $\begin{pmatrix}\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix}$ 으로 이동한 것을 볼 수 있다.

 

 

이런 회전 변환 외에도 다음과 같은 변환들이 있으며, 이 변환들을 $\mathbf{A}$와 $\mathbf{b}$를 적절히 활용해 만들어 낼 수 있다.

  • 확대/축소(Scaling): 특정 비율로 확대하거나 축소시키는 변환.
  • 이동(Translation): 일정한 벡터만큼 평행 이동시키는 변환.
  • 반사(Reflection): 축을 기준으로 반사시키는 변환.
  • 왜곡(Shear): 특정 방향으로 평행하게 이동시키는 변환.
반응형
저작자표시 비영리 변경금지 (새창열림)

'Machine Learning Math > Linear Algebra' 카테고리의 다른 글

고윳값 분해(Eigen Decomposition) 란 무엇인가? Numpy, TensorFlow, PyTorch 사용해 고유값 분해 해보기  (0) 2024.08.06
고유 벡터(Eigenvector)와 고유 값(Eigenvalue)이란 무엇인가? Numpy, TensorFlow, PyTorch로 고유 벡터 구해보기  (0) 2024.08.02
직교 행렬(Orthogonal Matrix)이란 무엇인가?  (0) 2024.07.31
대각 행렬(Diagonal Matrix) 한 번에 정리하기  (0) 2024.07.23
역행렬(Inverse Matrix) 이란 무엇인가? Numpy, TensorFlow, PyTorch 에서 계산 방법 알아보기  (0) 2024.07.22


'Machine Learning Math/Linear Algebra' 카테고리의 다른 글
  • 고윳값 분해(Eigen Decomposition) 란 무엇인가? Numpy, TensorFlow, PyTorch 사용해 고유값 분해 해보기
  • 고유 벡터(Eigenvector)와 고유 값(Eigenvalue)이란 무엇인가? Numpy, TensorFlow, PyTorch로 고유 벡터 구해보기
  • 직교 행렬(Orthogonal Matrix)이란 무엇인가?
  • 대각 행렬(Diagonal Matrix) 한 번에 정리하기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    Coroutines Channel
    Coroutines
    코루틴
    컨테이너
    junit
    numpy
    TensorFlow
    coroutine
    unit testing
    도커
    Coroutines Context
    코루틴 Flow
    unit test
    pytorch
    Machine Learning
    Docker
    Kotlin
    코루틴 채널
    mockito
    Coroutines Flow
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
아핀 변환(Affine Transformation)이란 무엇인가?
상단으로

티스토리툴바