import numpy as np
import cv2
import matplotlib.pyplot as plt
from skimage import io, util

base = np.ones((540,540,3),np.float32) * 255


img = cv2.imread('star8x8.png',0)
img = np.asarray(img,np.float32)
c = img/255.0

star = np.zeros((40*8,40*8,3),np.float32)
square = np.ones((40,40),np.float32)

for i in range(8):
    for j in range(8):
        star[40*i:40*i+40,40*j:40*j+40,0] = square * c[i,j]


cv2.imshow('star',star)
cv2.imwrite('star_blue.png',star*255)


fc = np.fft.fft2(c)



real = fc.real
imag = fc.imag

M = 40

res = np.zeros((M*8,M*8,3),np.float32)

template = np.ones((M,M),np.float32)

for i in range(8):
    for j in range(8):
        res[i*M:(i+1)*M,j*M:(j+1)*M,0] =  template * real[i,j]
        res[i*M:(i+1)*M,j*M:(j+1)*M,1] =  template * imag[i,j]

base[200:520,200:520] = res


N = 8 
n = np.arange(0,N)
w = np.e**(1j*2*np.pi*n/N)
a = np.reshape(w,(1,N))
b = np.reshape(w,(N,1))

##c = np.arange(0,N)

##
##g_values = [255,190,125,63,0,63,125,190]
##b_values = [125,190,255,190,125,63,0,63]

for k in range(N):
    tmp = np.zeros((20,N*20,3),np.float32)

    aa = a**k
    for i in range(N):
        kernel = np.ones((20,20),np.float32)
        
        tmp[:,i*20:(i+1)*20,0] = kernel * aa[0,i].real
        tmp[:,i*20:(i+1)*20,1] = kernel * aa[0,i].imag

    
    x = 200+k*40+10
    base[x:x+20,20:180] = tmp
    


for k in range(N):
    tmp = np.zeros((N*20,20,3),np.float32)

    bb = b**k
    for i in range(N):   
        kernel = np.ones((20,20),np.float32)
        
        tmp[i*20:(i+1)*20,:,0] = kernel * bb[i,0].real
        tmp[i*20:(i+1)*20,:,1] = kernel * bb[i,0].imag

    x = 200+k*40+10
    base[20:180,x:x+20] = tmp
base2 = np.ones((540,540,3),np.float32)
base2 = cv2.normalize(base, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
cv2.imwrite("test.png",base2)
cv2.imshow("result", base)
cv2.imshow("result2", base2*255)


