From d947c880e256d5a93236067343e84549e91dee77 Mon Sep 17 00:00:00 2001 From: Stephan Seitz <stephan.seitz@fau.de> Date: Wed, 8 Jan 2020 14:28:52 +0100 Subject: [PATCH] Create ill-formed lenna in test_superresolution --- tests/test_superresolution.py | 179 +++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 4 deletions(-) diff --git a/tests/test_superresolution.py b/tests/test_superresolution.py index 322c205..43cb7b1 100644 --- a/tests/test_superresolution.py +++ b/tests/test_superresolution.py @@ -8,13 +8,18 @@ """ from os.path import dirname, join +from time import sleep import numpy as np import skimage.io import sympy import pystencils -from pystencils_reco.resampling import downsample, resample, scale_transform, translate +import pystencils_reco.transforms +from pystencils_reco.filters import gauss_filter +from pystencils_reco.resampling import ( + downsample, resample, resample_to_shape, scale_transform, translate) +from pystencils_reco.stencils import BallStencil try: import pyconrad.autoinit @@ -70,13 +75,179 @@ def test_polar_transform(): x.set_coordinate_origin_to_field_center() y.set_coordinate_origin_to_field_center() - y.coordinate_transform = lambda x: sympy.Matrix((x.norm(), sympy.atan2(*x) / (2 * sympy.pi) * y.shape[1])) lenna_file = join(dirname(__file__), "test_data", "lenna.png") lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) - transformed = np.zeros((500, 500), np.float32) + transformed = np.zeros((400, 400), np.float32) resample(x, y).compile()(x=lenna, y=transformed) - pyconrad.imshow(transformed) + pyconrad.show_everything() + while True: + sleep(100) + + +def test_polar_transform2(): + x, y = pystencils.fields('x, y: float32[2d]') + + class PolarTransform(sympy.Function): + def eval(args): + return sympy.Matrix( + (args.norm(), sympy.atan2(args[1]-x.shape[1]/2, args[0]-x.shape[0]/2) / sympy.pi * x.shape[1]/2)) + + x.set_coordinate_origin_to_field_center() + y.coordinate_transform = PolarTransform + y.set_coordinate_origin_to_field_center() + + lenna_file = join(dirname(__file__), "test_data", "lenna.png") + lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) + + transformed = np.zeros((400, 400), np.float32) + + resample(x, y).compile()(x=lenna, y=transformed) + + pyconrad.show_everything() + while True: + sleep(100) + + +def test_polar_inverted_transform(): + x, y = pystencils.fields('x, y: float32[2d]') + + class PolarTransform(sympy.Function): + def eval(args): + return sympy.Matrix( + (args.norm(), sympy.atan2(args[1]-x.shape[1]/2, args[0]-x.shape[0]/2) / sympy.pi * x.shape[1]/2)) + + def inv(): + return lambda l: sympy.Matrix((sympy.cos(l[1] * sympy.pi / x.shape[1]*2) * l[0], + sympy.sin(l[1] * sympy.pi / x.shape[1]*2) * l[0])) + sympy.Matrix(x.shape) * 0.5 + + lenna_file = join(dirname(__file__), "test_data", "lenna.png") + lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) + + # transformed = np.zeros((400, 400), np.float32) + # back_transformed = np.zeros((400, 400), np.float32) + transformed = np.zeros_like(lenna) + back_transformed = np.zeros_like(lenna) + + x.set_coordinate_origin_to_field_center() + y.coordinate_transform = PolarTransform + y.set_coordinate_origin_to_field_center() + resample(x, y).compile()(x=lenna, y=transformed) + resample(y, x).compile()(x=back_transformed, y=transformed) + + pyconrad.show_everything() + while True: + sleep(100) + + +def test_shift(): + x, y = pystencils.fields('x, y: float32[2d]') + + class ShiftTransform(sympy.Function): + def eval(args): + return args + sympy.Matrix((5, 5)) + + def inv(): + return lambda l: l - sympy.Matrix((5, 5)) + + lenna_file = join(dirname(__file__), "test_data", "lenna.png") + lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) + + transformed = np.zeros_like(lenna) + back_transformed = np.zeros_like(lenna) + + x.set_coordinate_origin_to_field_center() + y.coordinate_transform = ShiftTransform + y.set_coordinate_origin_to_field_center() + resample(x, y).compile()(x=lenna, y=transformed) + resample(y, x).compile()(x=back_transformed, y=transformed) + + diff = lenna - back_transformed + assert diff is not None + + pyconrad.show_everything() + while True: + sleep(100) + + +def test_motion_model(): + x, y = pystencils.fields('x, y: float32[2d]') + transform_field = pystencils.fields('t_x, t_y: float32[2d]') + + lenna_file = join(dirname(__file__), "test_data", "lenna.png") + lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) + + # transformed = np.zeros((400, 400), np.float32) + # back_transformed = np.zeros((400, 400), np.float32) + transformed = np.zeros_like(lenna) + back_transformed = np.zeros_like(lenna) + translate_x = np.zeros((10, 10), np.float32) + translate_y = np.zeros((10, 10), np.float32) + + pystencils_reco.transforms.extend_to_size_of_other_field(transform_field[0], x) + pystencils_reco.transforms.extend_to_size_of_other_field(transform_field[1], x) + + shift = sympy.Matrix(sympy.symbols('s:2')) + shift_val = sympy.Matrix([transform_field[i].interpolated_access( + transform_field[i].physical_to_index(x.physical_coordinates)) + for i in range(x.ndim)]) + + class ShiftTransform(sympy.Function): + def eval(args): + return args + shift + + def inv(): + return lambda args: args - shift + + y.coordinate_transform = ShiftTransform + pystencils_reco.AssignmentCollection([*resample(x, y), + *[pystencils.Assignment(shift[i], shift_val[i]) for i in range(2)]] + ).compile()(x=lenna, y=transformed, t_x=translate_x, t_y=translate_y) + + pystencils_reco.AssignmentCollection([*resample(x, y), + *[pystencils.Assignment(shift[i], shift_val[i]) for i in range(2)]] + ).compile()(x=back_transformed, + y=transformed, + t_x=translate_x, + t_y=translate_y) + + pyconrad.show_everything() + while True: + sleep(100) + + +def test_motion_model2(): + x, y = pystencils.fields('x, y: float32[2d]') + transform_field = pystencils.fields('t_x, t_y: float32[2d]') + + lenna_file = join(dirname(__file__), "test_data", "lenna.png") + lenna = skimage.io.imread(lenna_file, as_gray=True).astype(np.float32) + + # transformed = np.zeros((400, 400), np.float32) + # back_transformed = np.zeros((400, 400), np.float32) + transformed = np.zeros_like(lenna) + blurred = np.zeros_like(lenna) + + translate_x = np.zeros_like(lenna) + translate_y = np.zeros_like(lenna) + amplitude = 20 + + resample_to_shape(amplitude * np.random.randn(10, 10).astype(np.float32), lenna.shape).compile()(output=translate_x) + resample_to_shape(amplitude * np.random.randn(10, 10).astype(np.float32), lenna.shape).compile()(output=translate_y) + + translate(x, y, sympy.Matrix((transform_field[0].center, transform_field[1].center)) + ).compile()(x=lenna, y=transformed, t_x=translate_x, t_y=translate_y) + + # resample(x, y).compile()(x=back_transformed, y=transformed, t_x=translate_x, t_y=translate_y) + + kernel = gauss_filter(transformed, blurred, BallStencil(5, ndim=2), 10).compile() + print(pystencils.show_code(kernel)) + kernel(input_field=transformed, output_field=blurred) + + pyconrad.show_everything() + + while True: + sleep(100) -- GitLab