Initial commit with project files
This commit is contained in:
88
2_Bildbearbeitung/ü8/l_a.py
Normal file
88
2_Bildbearbeitung/ü8/l_a.py
Normal file
@@ -0,0 +1,88 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
img = cv2.imread("../../data/car.png")
|
||||
img = cv2.resize(img, (500, 500))
|
||||
cv2.imshow("Car", img)
|
||||
|
||||
print("Image Shape:", img.shape)
|
||||
|
||||
|
||||
def T(pos, rotation, translation):
|
||||
""" Transformation Matrix """
|
||||
new_pos = np.matmul(rotation, pos) + translation
|
||||
|
||||
return new_pos
|
||||
|
||||
|
||||
new_image = np.zeros_like(img)
|
||||
|
||||
alpha = -0.5 * np.pi
|
||||
rotation = [
|
||||
[np.cos(alpha), -np.sin(alpha)],
|
||||
[np.sin(alpha), np.cos(alpha)]
|
||||
]
|
||||
translation = [
|
||||
[0],
|
||||
[img.shape[1]]
|
||||
]
|
||||
|
||||
|
||||
for x in range(img.shape[1]):
|
||||
for y in range(img.shape[0]):
|
||||
old_pos = np.asarray([[x], [y]])
|
||||
new_pos = T(old_pos, rotation, translation)
|
||||
new_pos = new_pos.astype(int)
|
||||
if 0 <= new_pos[0] < img.shape[1] and 0 <= new_pos[1] < img.shape[0]:
|
||||
new_image[new_pos[1], new_pos[0]] = img[y, x]
|
||||
|
||||
print(new_image.shape)
|
||||
cv2.imshow("After Transformation", new_image)
|
||||
|
||||
"""
|
||||
Naive Solution
|
||||
|
||||
1. Rotate the image with 90° -> alpha=90°
|
||||
2. Translate in y axis with image length -> [ [0], [height] ]
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
Mathematical solution
|
||||
|
||||
1. Find correspondences
|
||||
|
||||
x,y --> x',y'
|
||||
|
||||
0,0 --> 0,1
|
||||
1,0 --> 0,0
|
||||
0,1 --> 1,1
|
||||
1,1 --> 1,0
|
||||
0.5,0.5 --> 0.5,0.5
|
||||
|
||||
|
||||
2. Solve system:
|
||||
[a, b] * [x, y]^T + [e, f]^T = [x', y']^T
|
||||
[c, d]
|
||||
|
||||
ax + by + e = x'
|
||||
cx + dy + f = y'
|
||||
|
||||
|
||||
Translation (0,0 --> 0,1):
|
||||
0 + 0 + e = 0 --> e = 0
|
||||
0 + 0 + f = 1 --> f = 1
|
||||
|
||||
Rotation (1,0 --> 0,0):
|
||||
a + 0 + 0 = 0 --> a = 0
|
||||
c + 0 + 1 = 0 --> c = -1
|
||||
|
||||
Rotation (0,1 --> 1,1):
|
||||
0 + b + 0 = 1 --> b = 1
|
||||
0 + d + 1 = 1 --> d = 0
|
||||
|
||||
"""
|
||||
|
||||
|
||||
cv2.waitKey(0)
|
||||
|
||||
Reference in New Issue
Block a user