ImageImpaint_Python_II/ex4.py

52 lines
1.7 KiB
Python
Raw Normal View History

2022-05-18 08:49:41 +00:00
"""
Author: Lukas Heiligenbrunner
Matr.Nr.: K12104785
Exercise 4
"""
2022-05-18 05:57:00 +00:00
import numpy as np
2022-05-18 08:49:41 +00:00
def ex4(image_array: np.array, offset: (int, int), spacing: (int, int)) -> (np.array, np.array, np.array):
if not isinstance(image_array, np.ndarray):
raise TypeError
if len(image_array.shape) != 3 or image_array.shape[2] != 3:
raise NotImplementedError
if not all([str(x).isnumeric() for x in offset + spacing]):
raise ValueError
if not all([0 <= x <= 32 for x in offset]) or not all([2 <= x <= 8 for x in spacing]):
raise ValueError
src = np.transpose(image_array, (2, 0, 1))
mask = np.zeros_like(src)
for x in range(offset[0], mask.shape[2], spacing[0]):
for y in range(offset[1], mask.shape[1], spacing[1]):
mask[:, y, x] = 1
# masking the input
masked = src * mask
# calculate the remaining pixels
rest = src * (1 - mask)
rest = rest[1 - mask > 0]
# raise error if known pixels are less than 144
if (src.shape[1] * src.shape[2] - rest.size / 3) < 144:
raise ValueError
return masked, mask, rest
2022-05-18 05:57:00 +00:00
if __name__ == '__main__':
2022-05-18 08:49:41 +00:00
f, d, g = ex4(np.array([[(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)],
[(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)],
[(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)],
[(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)],
[(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)]
]), offset=(1, 1), spacing=(2, 2))
print(g)