from QMF import *

filename = "lena.png"

#Trasformazione in array
img_array = Converter.to_array(filename)

#Processo...

#Trasformazione in immagine
Converter.to_image(img_array, "nuova_immagine.png")

patcher = ImagePatcher()
patcher.load_image(img_array) # Caricamento/Processing
patches = patcher.get_patches() # Suddivisione

result_patches = patches.copy() # Dizionario per i risultati
for pos, patch in patches.items():

  # Simulazione...

  result_patches[pos] = Converter.decode_image(answer, patch.copy(), color_size=8)

# Risultati
img_result = patcher.convert_patches(result_patches)
Converter.to_image(img_result, "result.png")


max_bond_dimension = 32
simulator = Simulator(max_bond_dimension)

qmf = QuantumMedianFilter()
lambda_parameter = 100 # Parametro di esecuzione

# Generazione dei circuiti
qmf.generate(simulator, color_size=8, coordinate_size=2, optimization=3)

for pos, patch in patches.items():

  #Generazione NEQR
  neqr = Circuit.neqr(patch, color_num=color_size, verbose=False)
  neqr_transpiled = sim.transpile(neqr, optimization=0, verbose=False)

  #Generazione QMF
  qmf.prepare_old(np.array(patch), lambda_parameter, color_size, neqr_transpiled)
  circuit = qmf.get()

  #Simulazione
  answer = sim.simulate_old(circuit, shots=128, verbose=False)

  #Recupero dei risultati
  result_patches[pos] = Converter.decode_image(answer, patch.copy(), color_size=8)