def canny_without_blur(): tag = "canny without blur" data_points[tag] = [] for _ in range(MEASUREMENTS): img = pgu.img_to_surface(IMG_PATH) data_points[tag].append( measure_execution_time(lambda: canny(img))[0])
def canny_with_blur(): # with 3x3 gaussian kernel tag = "canny with 3x3 gaussian blur" data_points[tag] = [] for _ in range(MEASUREMENTS): img = pgu.img_to_surface(IMG_PATH) data_points[tag].append( measure_execution_time(lambda: canny(img, GAUSSIAN[3]))[0])
def benchmark_lab3(): """ img to greyscale canny without blur canny with blur """ source_img = pgu.img_to_surface(IMG_PATH) data_points = { "greyscale": measure_execution_time(lambda: eu.surf_to_greyscale(source_img), MEASUREMENTS) } def canny(image, kernel=None): image = eu.surf_to_greyscale(image) if kernel is not None: image = transform_by_kernel(image, kernel) canny_edge_detection(image, SOBEL_SUM) def canny_without_blur(): tag = "canny without blur" data_points[tag] = [] for _ in range(MEASUREMENTS): img = pgu.img_to_surface(IMG_PATH) data_points[tag].append( measure_execution_time(lambda: canny(img))[0]) def canny_with_blur(): # with 3x3 gaussian kernel tag = "canny with 3x3 gaussian blur" data_points[tag] = [] for _ in range(MEASUREMENTS): img = pgu.img_to_surface(IMG_PATH) data_points[tag].append( measure_execution_time(lambda: canny(img, GAUSSIAN[3]))[0]) canny_without_blur() canny_with_blur() print_measurements("Pygame", data_points)
def benchmark_lab2(): """ transform by kernel: - avg 1x1 3x3 5x5 - gaussian 1x1 3x3 5x5 """ data_points = {} source_img = pgu.img_to_surface(IMG_PATH) for kernel_size in AVERAGES: data_points["average " + str(kernel_size)] = measure_execution_time( lambda: transform_by_kernel(source_img, AVERAGES[kernel_size]), MEASUREMENTS) for kernel_size in GAUSSIAN: data_points["gaussian " + str(kernel_size)] = measure_execution_time( lambda: transform_by_kernel(source_img, GAUSSIAN[kernel_size]), MEASUREMENTS) print_measurements("Pygame", data_points)
def transform_by_kernel(surf, kernel): """ :param surf: surface to be transformed :param kernel: kernel to be used for convolution :return: new surface """ old_array = pygame.surfarray.pixels3d(surf) new_array = pygame.surfarray.array3d(surf) kernel_array, kernel_sum = kernel radius = len(kernel_array) // 2 width, height, _ = old_array.shape for x in range(0, width): for y in range(0, height): new_array[x, y] = bu.transform_pixel(old_array, x, y, radius, width, height, kernel_array, kernel_sum) del old_array return pygame.surfarray.make_surface(new_array) if __name__ == "__main__": surface = pgu.img_to_surface(path=IMG_PATH) kernel = bu.avg_kernel(size=3) pgu.display_surface(transform_by_kernel(surface, kernel))