def error(coords_list):
    seeds = fixed_seeds.copy()
    print(f'coordinate list : {coords_list}')
    print(f'seeds : {seeds}')
    for index in range(len(coords_list) // 2):
        coordinate = (int(coords_list[2 * index]),
                      int(coords_list[2 * index + 1]))
        seeds.update({coordinate: colour})
    segmentation = Segmentation(image_array,
                                beta,
                                seeds,
                                image_name,
                                reference_path=target_segmentation_path)
    segmentation.solve()
    segmentation.build_segmentation_image()
    return segmentation.compute_error()
    def on_solve():
        beta_parameter = float(beta_entry.get())
        segmentation = Segmentation(image_array, beta_parameter, seeds,
                                    image_name)

        segmentation.solve()

        if save_segmentation.get():
            segmentation.build_segmentation_image()
            segmentation.save_segmentation_image()

        if draw_contours.get():
            segmentation.plot_contours()

        segmentation.build_segmentation_image()
        segmentation.plot_colours()
    for key, value in initial_seeds.items() if value == 'red'
}
initial_coords = list(initial_variable_seeds.keys())
print(f'initial coords = {initial_coords}')

optimal_coords = optimize.minimize(error,
                                   initial_coords,
                                   method='nelder-mead',
                                   constraints=cons,
                                   options={
                                       'xtol': 1e-3,
                                       'disp': True
                                   })

optimal_seeds = fixed_seeds
for index in range(len(optimal_coords) // 2):
    coordinate = (int(optimal_coords[2 * index]),
                  int(optimal_coords[2 * index + 1]))
    optimal_seeds.update({coordinate: colour})

# optimal segmentation
segmentation = Segmentation(image_array,
                            beta,
                            optimal_seeds,
                            image_name,
                            reference_path=target_segmentation_path)
segmentation.solve()
segmentation.build_segmentation_image()
segmentation.compute_error()
segmentation.contours_to_png()