| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import numpy as np
- def wavelet(image, width=None):
- shape = image.shape
- if len(shape) != 2 or shape[0] != shape[1]:
- raise(f"Expected quadratic image but got data with shape: {shape}")
- if width is None:
- width = shape[0]
- if shape[0] < width:
- raise(f"Image with shape {shape} is smaller then the requested size {width}.")
- result = image.copy()
- half = width // 2
- for y in range(half):
- for x in range(half):
- px = 2 * x
- py = 2 * y
- result[y, x] = image[py, px]
- result[y, x + half] = image[py, px + 1] - image[py, px]
- result[y + half, x] = image[py + 1, px] - image[py, px]
- result[y + half, x + half] = image[py + 1, px + 1] - image[py, px]
- return result
- def refine(image):
- shape = image.shape
- if len(shape) != 2 or shape[0] != shape[1]:
- raise(f"Expected quadratic image but got data with shape: {shape}")
- width = shape[0]
- while width > 1:
- image = wavelet(image, width)
- width = width // 2
- return image
- def rotate(image, n=1):
- shape = image.shape
- if len(shape) != 2 or shape[0] != shape[1]:
- raise(f"Expected quadratic image but got data with shape: {shape}")
- result = image.copy()
- w = shape[0] - 1
- if n == 0: # id
- p = lambda y, x: (y, x)
- elif n == 1:
- p = lambda y, x: (y, w - x)
- elif n == 2:
- p = lambda y, x: (w - y, x)
- elif n == 3:
- p = lambda y, x: (w - y, w - x)
- elif n == 4:
- p = lambda y, x: (x, y)
- elif n == 5:
- p = lambda y, x: (x, w - y)
- elif n == 6:
- p = lambda y, x: (w - x, y)
- elif n == 7:
- p = lambda y, x: (w - x, w - y)
- else:
- raise f"Unexpected n={n} for n in {0,1,2,3,4,5,6}"
-
- for y in range(w):
- for x in range(w):
- result[x,y] = image[y,x]
- return result
|