μ΄νμΈ κΈ°ν λ³ν (Affine Transformation)
μ λ Affineμ 'μ΄νμΈ'μΌλ‘ μ½λλ‘ λ°°μ μ§λ§ μν€νΌλμμμλ 'μ΄ν'μ΄λΌκ³ νλ λ΄ λλ€. μ°λ¦¬κ° 0-9μ μ«μλ₯Ό μ μνκ³ κ·Έ μμμ μ°μ°μ μ μν΄ λ¬Έμ λ₯Ό ν΄κ²°νλ―, μ΄νμΈλ μ΄λ ν 체κ³(곡κ°)λ₯Ό μλ―Έν©λλ€. μ΄νμΈμ μ κ³Ό 벑ν°λ₯Ό μμλ‘, κ·Έκ²λ€μ μ°μ°μ μ μν©λλ€. ν ν¬μ€ν μμμ λ€λ£¨κΈ°μλ μλ£κ° λ§μ, μΆνμ ν¬μ€ν ν΄λ³΄κ² μ΅λλ€. κ΄λ ¨ λ΄μ©μ μ νλΈλ ꡬκΈμ μ°Έκ³ νμκΈΈ λ°λλλ€.
μλ°©ν₯ 맀ν (Backward Mapping)
μ΄νμΈ λ³ν μ€ νλμΈ νμ λ³νμ μμ©ν μμ μ½λλ₯Ό 첨λΆν©λλ€. μ°λ¦¬κ° μκ°νλ μΌλ°μ μΈ νμ λ³νμ λ€μκ³Ό κ°μ΅λλ€. μ΄λ―Έμ§λ₯Ό 30λ νμ μν€κ³ μΆμ΅λλ€. 'μλ μ΄λ―Έμ§ μ’ν(x, y)λ₯Ό 30λ νμ μμΌμ(x', y'), κ·Έ μμΉμ f(x', y')←f(x, y)λ₯Ό λμ ν΄μΌκ² λ€'. μ΄κ²μ ν¬μλ 맀ν(Forward Mapping)μ΄λΌκ³ ν©λλ€..
νμ§λ§ μ΄κ²μ κ±°κΎΈλ‘ 'λ΄κ° λ§λ€ μ΄λ―Έμ§λ μλ μ΄λ―Έμ§μ 30λ νμ ν μνμΌ κ±°μΌ. κ·Έλ¬λκΉ λ§λ€ μ΄λ―Έμ§μ μ΄λ€ μ’ν(x', y')μμ κ°μ μλ μ΄λ―Έμ§λ‘λΆν° κ°μ Έμ¬ λ -30λ λ³νν κ³³(x, y)μμ κ°μ Έμ€λ©΄ λμ§ μμκΉ?' μκ°ν λ°©μμ΄ λ°±μλ 맀ν(Backward Mapping)μ λλ€.
λ λ°©λ²μ λΉκ΅ν΄λ³΄λ©΄ λ°±μλ 맀ν μ, ν¬μλ 맀νν κ·Έλ¦Όμ μλ ꡬλ©(hole)λ€μ΄ μ¬λΌμ§μ λ³Ό μ μμ΅λλ€.
μλλ κ³Όμ λ‘ μμ±νλ μ½λμ
λλ€.
import cv2
import numpy as np
def backward_transform(img, angle):
height, width = img.shape
result = np.zeros((height, width), np.uint8)
affine = np.array([[np.cos(np.radians(angle)), np.sin(np.radians(angle)), 0],
[-np.sin(np.radians(angle)), np.cos(np.radians(angle)), 0],
[0, 0, 1]])
for x in range(width):
for y in range(height):
p = affine.dot(np.array([x, y, 1]))
xp = int(p[0])
yp = int(p[1])
if 0 <= yp < height and 0 <= xp < width:
result[y, x] = img[yp, xp]
return result
in_image = cv2.imread('νμΌλͺ
.jpg', 0)
out_image = backward_transform(in_image, 20)
cv2.imshow('input', in_image)
cv2.imshow('output', out_image)
cv2.imwrite('bw_transformed.jpg', out_image)
cv2.waitKey()
'π» > λ©ν°λ―Έλμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μμμ²λ¦¬] μ€κ°κ° νν°, μ€κ³½μ κ²μΆ (0) | 2020.10.18 |
---|---|
[μμμ²λ¦¬] λ°μ€ νν°, κ°μ°μμ νν° (1) | 2020.10.18 |
[μμμ²λ¦¬] λΉνΈ νλ©΄ λΆνΈν, νμ€ν κ·Έλ¨ (0) | 2020.10.11 |
[μμμ²λ¦¬] λμ§νΈ μ΄λ―Έμ§ (0) | 2020.10.11 |
[νμ΄μ¬] μ΄λ―Έμ§ β 그리λ(λ°°μ΄) (0) | 2020.09.21 |