From 72a998322aa07968046bb4fe8db5a12c29f21b60 Mon Sep 17 00:00:00 2001 From: matko031 Date: Sat, 3 Jul 2021 17:27:49 +0200 Subject: [PATCH] added Stimulus class and made all functions return a stimulus object --- stimuli/Stimulus.py | 5 + stimuli/illusions/benary_cross.py | 11 +- stimuli/illusions/bullseye.py | 18 ++- .../checkerboard_contrast_contrast.py | 9 +- stimuli/illusions/checkerboard_sbc.py | 7 +- stimuli/illusions/cornsweet.py | 8 +- stimuli/illusions/cube.py | 14 ++- stimuli/illusions/disc_and_ring.py | 7 +- stimuli/illusions/dungeon.py | 14 ++- stimuli/illusions/grating.py | 14 ++- stimuli/illusions/grating_induction.py | 7 +- stimuli/illusions/rings.py | 14 ++- stimuli/illusions/sbc.py | 7 +- stimuli/illusions/todorovic.py | 12 +- stimuli/illusions/whites.py | 117 +++++++++++------- stimuli/papers/RHS2007.py | 11 +- stimuli/papers/domijan2015.py | 11 +- 17 files changed, 193 insertions(+), 93 deletions(-) create mode 100644 stimuli/Stimulus.py diff --git a/stimuli/Stimulus.py b/stimuli/Stimulus.py new file mode 100644 index 00000000..08b78e28 --- /dev/null +++ b/stimuli/Stimulus.py @@ -0,0 +1,5 @@ +class Stimulus(): + def __init__(self): + target_mask = None + img = None + diff --git a/stimuli/illusions/benary_cross.py b/stimuli/illusions/benary_cross.py index c967c053..9cbd7614 100644 --- a/stimuli/illusions/benary_cross.py +++ b/stimuli/illusions/benary_cross.py @@ -1,6 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img - +from stimuli.Stimulus import Stimulus def benarys_cross(ppd=10, cross_size=(8,8,8,8), cross_thickness=5, padding=(1,1,1,1), target_size=2, back=1., cross=0., target=.5): """ @@ -51,13 +51,16 @@ def benarys_cross(ppd=10, cross_size=(8,8,8,8), cross_thickness=5, padding=(1,1, img = pad_img(img, padding, ppd, back) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.target_mask = mask + stim.img = img + return stim def domijan2015(): return benarys_cross(ppd=10, cross_size=(3,3,3,3), cross_thickness=2.1, padding=(.9,1.0,.9,1.0),target_size=1.1, back=9., cross=1., target=5.) if __name__ == '__main__': import matplotlib.pyplot as plt - img, mask = benarys_cross() - plt.imshow(img, cmap='gray') + stim = benarys_cross() + plt.imshow(stim.img, cmap='gray') plt.show() \ No newline at end of file diff --git a/stimuli/illusions/bullseye.py b/stimuli/illusions/bullseye.py index 8b87901a..1dcc7b2a 100644 --- a/stimuli/illusions/bullseye.py +++ b/stimuli/illusions/bullseye.py @@ -1,6 +1,7 @@ import numpy as np from stimuli.illusions.rings import ring_pattern from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def bullseye_illusion(ppd=10, n_rings=8, ring_width=.5, target_pos_l=0, target_pos_r=0, padding=(1.0,1.0,1.0,1.0), back=0., rings=1., target=.5): """ @@ -20,12 +21,19 @@ def bullseye_illusion(ppd=10, n_rings=8, ring_width=.5, target_pos_l=0, target_p ------- 2D numpy array """ - img1, mask1 = ring_pattern(n_rings=n_rings, target_pos_l=target_pos_l, ring_width=ring_width, padding=padding, + stim1 = ring_pattern(n_rings=n_rings, target_pos_l=target_pos_l, ring_width=ring_width, padding=padding, back=back, rings=rings, target=target, invert_rings=False, double=False) - img2, mask2 = ring_pattern(n_rings=n_rings, target_pos_l=target_pos_r, ring_width=ring_width, padding=padding, + stim2 = ring_pattern(n_rings=n_rings, target_pos_l=target_pos_r, ring_width=ring_width, padding=padding, back=back, rings=rings, target=target, invert_rings=True, double=False) - return (np.hstack((img1, img2)), np.hstack((mask1, mask2))) + img = np.hstack((stim1.img, stim2.img)) + mask = np.hstack((stim1.target_mask, stim2.target_mask)) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): img = bullseye_illusion(n_rings=8, ring_width=.5, target_pos_l=0, target_pos_r=0, padding=(.9,1.0,.9,1.0), back=1., rings=9., target=5.) @@ -39,6 +47,6 @@ def RHS2007_bullseye_thick(): if __name__ == '__main__': import matplotlib.pyplot as plt - img, mask = bullseye_illusion() - plt.imshow(img, cmap='gray') + stim = bullseye_illusion() + plt.imshow(stim.img, cmap='gray') plt.show() \ No newline at end of file diff --git a/stimuli/illusions/checkerboard_contrast_contrast.py b/stimuli/illusions/checkerboard_contrast_contrast.py index e69bfb34..2644d7be 100644 --- a/stimuli/illusions/checkerboard_contrast_contrast.py +++ b/stimuli/illusions/checkerboard_contrast_contrast.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def checkerboard_contrast_contrast_effect(ppd=10, n_checks=8, check_size=1.0, target_length=4, padding=(1.0,1.0,1.0,1.0), check1=0., check2=2., @@ -53,7 +54,13 @@ def checkerboard_contrast_contrast_effect(ppd=10, n_checks=8, check_size=1.0, ta mask2 = np.repeat(np.repeat(mask_arr2, check_size_px, axis=0), check_size_px, axis=1) mask2 = pad_img(mask2, padding, ppd, 0) - return (np.hstack([img1, img2]), np.hstack([mask1, mask2])) + img = np.hstack([img1, img2]) + mask = np.hstack([mask1, mask2]) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim diff --git a/stimuli/illusions/checkerboard_sbc.py b/stimuli/illusions/checkerboard_sbc.py index 8fd825c7..96853fd0 100644 --- a/stimuli/illusions/checkerboard_sbc.py +++ b/stimuli/illusions/checkerboard_sbc.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def checkerboard_contrast(ppd=10, n_checks=8, check_size=1.0, target1_coords=(3, 2), target2_coords=(5, 5), extend_targets=False, padding=(1.0,1.0,1.0,1.0), check1=0., check2=1., target=.5): @@ -51,7 +52,11 @@ def checkerboard_contrast(ppd=10, n_checks=8, check_size=1.0, target1_coords=(3, img = pad_img(img, padding, ppd, (check1+check2)/2) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): diff --git a/stimuli/illusions/cornsweet.py b/stimuli/illusions/cornsweet.py index 76554fc1..c3a2ac43 100644 --- a/stimuli/illusions/cornsweet.py +++ b/stimuli/illusions/cornsweet.py @@ -1,4 +1,5 @@ import numpy as np +from stimuli.Stimulus import Stimulus def cornsweet(size=(10,10), ppd=10, contrast=0.5, ramp_width=2, exponent=2.75, mean_lum=.5): @@ -55,7 +56,12 @@ def cornsweet(size=(10,10), ppd=10, contrast=0.5, ramp_width=2, exponent=2.75, stim[:, :size[1] // 2] += profile[::-1] stim[:, size[1] // 2:] -= profile mask = None - return (stim, mask) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim if __name__ == '__main__': diff --git a/stimuli/illusions/cube.py b/stimuli/illusions/cube.py index 7f8a6970..13562c24 100644 --- a/stimuli/illusions/cube.py +++ b/stimuli/illusions/cube.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def cube_illusion(ppd=10, n_cells=4, target_length=1, cell_long=1.5, cell_short=1.0, corner_cell_width=1.8, corner_cell_height=1.8, @@ -109,11 +110,16 @@ def cube_illusion(ppd=10, n_cells=4, target_length=1, cell_long=1.5, cell_short= mask = pad_img(mask, padding, ppd, 0) if double: - img2, mask2 = cube_illusion(ppd=ppd, n_cells=n_cells, target_length=target_length, cell_long=cell_long, cell_short=cell_short, corner_cell_width=corner_cell_width, corner_cell_height=corner_cell_height, + stim2 = cube_illusion(ppd=ppd, n_cells=n_cells, target_length=target_length, cell_long=cell_long, cell_short=cell_short, corner_cell_width=corner_cell_width, corner_cell_height=corner_cell_height, cell_spacing=cell_spacing, padding=padding, occlusion_overlap=occlusion_overlap, back=grid, grid=back, target=target, double=False) - return (np.hstack([img, img2]), np.hstack([mask, mask2])) - else: - return (img, mask) + img = np.hstack([img, stim2.img]) + mask = np.hstack([mask, stim2.target_mask]) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): diff --git a/stimuli/illusions/disc_and_ring.py b/stimuli/illusions/disc_and_ring.py index aac2783f..a6ec950f 100644 --- a/stimuli/illusions/disc_and_ring.py +++ b/stimuli/illusions/disc_and_ring.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils.utils import degrees_to_pixels, resize_array +from stimuli.Stimulus import Stimulus def disc_and_ring(shape=(10,10), radii=(9,5), values=(200, 100), bg=0, ppd=30, ssf=5): @@ -48,7 +49,11 @@ def disc_and_ring(shape=(10,10), radii=(9,5), values=(200, 100), bg=0, ppd=30, s mask = None - return (np.dot(sampler, np.dot(stim, sampler.T)) / ssf ** 2, mask) + stim = Stimulus() + stim.img = np.dot(sampler, np.dot(stim, sampler.T)) / ssf ** 2 + stim.target_mask = mask + + return stim if __name__ == '__main__': diff --git a/stimuli/illusions/dungeon.py b/stimuli/illusions/dungeon.py index 597eed4a..43823d41 100644 --- a/stimuli/illusions/dungeon.py +++ b/stimuli/illusions/dungeon.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def dungeon_illusion(ppd=10, n_cells=5, target_radius=1, cell_size=1.0, padding=(1.0,1.0,1.0,1.0), back=0., grid=1., target=0.5, double=True): @@ -51,10 +52,15 @@ def dungeon_illusion(ppd=10, n_cells=5, target_radius=1, cell_size=1.0, padding= mask = pad_img(mask, padding, ppd, False) if double: - img2, mask2 = dungeon_illusion(ppd=ppd, n_cells=n_cells, target_radius=target_radius, cell_size=cell_size, padding=padding, back=grid, grid=back, target=target, double=False) - return (np.hstack([img, img2]), np.hstack([mask, mask2])) - else: - return (img, mask) + stim2 = dungeon_illusion(ppd=ppd, n_cells=n_cells, target_radius=target_radius, cell_size=cell_size, padding=padding, back=grid, grid=back, target=target, double=False) + img = np.hstack([img, stim2.img]) + mask = np.hstack([mask, stim2.target_mask]) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): return dungeon_illusion(ppd=10, n_cells=5, target_radius=1,cell_size=1.0, padding=(.9,1.1,.9,1.1), back=1.0, grid=9.0, target=5.0, double=True) diff --git a/stimuli/illusions/grating.py b/stimuli/illusions/grating.py index f6aa6d12..fae2bc6d 100644 --- a/stimuli/illusions/grating.py +++ b/stimuli/illusions/grating.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def grating_illusion(ppd=10, n_bars=5, target_length=1, bar_width=1.0, bar_height=8.0, padding=(1.0,1.0,1.0,1.0), back=0., grid=1., target=0.5, double=True): @@ -50,11 +51,16 @@ def grating_illusion(ppd=10, n_bars=5, target_length=1, bar_width=1.0, bar_heigh if double: - img2, mask2 = grating_illusion(ppd=ppd, n_bars=n_bars, target_length=target_length, bar_width=bar_width, bar_height=bar_height, + stim2 = grating_illusion(ppd=ppd, n_bars=n_bars, target_length=target_length, bar_width=bar_width, bar_height=bar_height, padding=padding, back=grid, grid=back, target=target, double=False) - return (np.hstack([img, img2]), np.hstack([mask, mask2])) - else: - return (img, mask) + img = np.hstack([img, stim2.img]) + mask = np.hstack([mask, stim2.target_mask]) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): return grating_illusion(ppd=10, n_bars=5, target_length=1, bar_width=1.0, bar_height=8.1, padding=(.9,1.0,.9,1.1), back=1, grid=9, target=5, double=True) diff --git a/stimuli/illusions/grating_induction.py b/stimuli/illusions/grating_induction.py index b819fc45..05b97d78 100644 --- a/stimuli/illusions/grating_induction.py +++ b/stimuli/illusions/grating_induction.py @@ -1,6 +1,7 @@ import numpy as np from scipy.ndimage.filters import gaussian_filter from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus import stimuli @@ -26,7 +27,11 @@ def grating_illusion(shape=(10,10), ppd=40, frequency=0.5, target_height=0.5, bl img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def RHS2007_grating_induction(): total_height, total_width, ppd = (32,)*3 diff --git a/stimuli/illusions/rings.py b/stimuli/illusions/rings.py index 9d67ceae..8fd80ca4 100644 --- a/stimuli/illusions/rings.py +++ b/stimuli/illusions/rings.py @@ -1,5 +1,6 @@ import numpy as np from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def ring_pattern(ppd=10, n_rings=8, target_pos_l=4, target_pos_r=3, ring_width=.5, padding=(1.0,1.0,1.0,1.0,), back=0., rings=1., target=.5, invert_rings=False, double=True, ): """ @@ -63,11 +64,16 @@ def ring_pattern(ppd=10, n_rings=8, target_pos_l=4, target_pos_r=3, ring_width=. # create right half of stimulus if double: - img2, mask2 = ring_pattern(ppd=ppd, n_rings=n_rings, target_pos_l=target_pos_r, target_pos_r=0, ring_width=ring_width, + stim2 = ring_pattern(ppd=ppd, n_rings=n_rings, target_pos_l=target_pos_r, target_pos_r=0, ring_width=ring_width, padding=padding, back=back, rings=rings, target=target, invert_rings=invert_rings, double=False) - return (np.hstack([img, img2]), np.hstack([mask, mask2])) - else: - return (img, mask) + img = np.hstack([img, stim2.img]) + mask = np.hstack([mask, stim2.target_mask]) + + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): img = ring_pattern(ppd=10, n_rings=8, target_pos_l=4, target_pos_r=3, ring_width=.5, padding=(.9,1.0,.9,1.0), back=1., rings=9., target=5., invert_rings=False, double=True) diff --git a/stimuli/illusions/sbc.py b/stimuli/illusions/sbc.py index 40f41d6e..7e345302 100644 --- a/stimuli/illusions/sbc.py +++ b/stimuli/illusions/sbc.py @@ -1,6 +1,7 @@ import numpy as np import stimuli from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def simultaneous_brightness_contrast(ppd=10, target_shape=(5,5), padding=(2,2,2,2), inner_padding=(3,3,3,3), left=1., right=0., target=.5): @@ -39,7 +40,11 @@ def simultaneous_brightness_contrast(ppd=10, target_shape=(5,5), padding=(2,2,2, img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def domijan2015(): diff --git a/stimuli/illusions/todorovic.py b/stimuli/illusions/todorovic.py index 05e65449..5e17dde4 100644 --- a/stimuli/illusions/todorovic.py +++ b/stimuli/illusions/todorovic.py @@ -3,6 +3,7 @@ import math from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def todorovic_illusion(target_shape=(4,4), ppd=10, covers_shape=(2.5, 2.5), spacing=(1.5,1.5,1.5,1.5), inner_padding=(3,3,3,3), padding=(2,2,2,2), back=0., grid=1., target=.5, double=True): @@ -72,16 +73,19 @@ def todorovic_illusion(target_shape=(4,4), ppd=10, covers_shape=(2.5, 2.5), spac # create right half of stimulus if double: - img2, mask2 = todorovic_illusion(target_shape=target_shape, ppd=ppd, covers_shape=covers_shape, spacing=spacing, + stim2 = todorovic_illusion(target_shape=target_shape, ppd=ppd, covers_shape=covers_shape, spacing=spacing, padding=(0,0,0,0), inner_padding=inner_padding, back=grid, grid=back, target=target, double=False) - img = np.hstack([img, img2]) - mask = np.hstack([mask, mask2]) + img = np.hstack([img, stim2.img]) + mask = np.hstack([mask, stim2.target_mask]) img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, target) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + return stim def domijan2015(): return todorovic_illusion(target_shape=(4.1, 4.1), ppd=10, covers_shape=(3.1, 3.1), spacing=(1.5, 1.5, 1.5, 1.5), inner_padding=(2.9,3.0, 2.9,3.0 ), diff --git a/stimuli/illusions/whites.py b/stimuli/illusions/whites.py index 286d32a7..3beedf17 100644 --- a/stimuli/illusions/whites.py +++ b/stimuli/illusions/whites.py @@ -2,6 +2,7 @@ import stimuli import matplotlib.pyplot as plt from stimuli.utils import degrees_to_pixels, pad_img +from stimuli.Stimulus import Stimulus def white(shape=(10,10), ppd=50, frequency=0.5, high=1.0, low=0.0, target=0.5, period='ignore', start='high', target_indices=(2,5), target_height=None, targets_offset=0, orientation = 'horizontal', padding=(2,2,2,2)): @@ -34,8 +35,11 @@ def white(shape=(10,10), ppd=50, frequency=0.5, high=1.0, low=0.0, target=0.5, p img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + return stim def circular_white(radius=5, ppd=50, frequency=1, high=1., low=0., target=.5, target_indices=(2,5), start='low', padding=(2,2,2,2)): @@ -66,8 +70,11 @@ def circular_white(radius=5, ppd=50, frequency=1, high=1., low=0., target=.5, ta img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + return stim def wheel_of_fortune_white(radius=10, ppd=50, n_cycles=5, target_width=0.7, target_indices=None, angle_shift=0, high=1.0, low=0., target=.5, start='high', padding=(1,1,1,1)): #TODO: make this faster @@ -142,8 +149,11 @@ def wheel_of_fortune_white(radius=10, ppd=50, n_cycles=5, target_width=0.7, targ img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + return stim def white_anderson(shape=(5,5), ppd=40, frequency=2, height_bars=1, height_horizontal_top=1, target_height=1, target_indices_top=(5,), target_offsets_top=(0.5,), target_indices_bottom=(12,), target_offsets_bottom=(-0.5,), high=1., low=0., target=.5, top='low', padding=(1,1,1,1)): @@ -194,8 +204,12 @@ def white_anderson(shape=(5,5), ppd=40, frequency=2, height_bars=1, height_horiz img = pad_img(img, padding, ppd, target) mask = pad_img(mask, padding, ppd, 0) - return (img, mask) + stim = Stimulus() + stim.img = img + stim.target_mask = mask + + return stim def RHS2007_WE_thick(): total_height, total_width, ppd = (32,)*3 height, width = 12, 16 @@ -205,8 +219,7 @@ def RHS2007_WE_thick(): padding_vertical = (total_height - height) / 2 padding = (padding_vertical, padding_vertical, padding_horizontal, padding_horizontal) target_height = stimuli.utils.degrees_to_pixels(4, ppd) - img = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding, target_height=target_height) - return img + return stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding, target_height=target_height) def RHS2007_WE_thin_wide(): total_height, total_width, ppd = (32,)*3 @@ -217,8 +230,7 @@ def RHS2007_WE_thin_wide(): padding_vertical = (total_height - height) / 2 padding = (padding_vertical, padding_vertical, padding_horizontal, padding_horizontal) target_height = stimuli.utils.degrees_to_pixels(4, ppd) - img = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(3, 12), padding=padding, target_height=target_height) - return img + return stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(3, 12), padding=padding, target_height=target_height) def RHS2007_WE_dual(): total_height, total_width, ppd = (32,)*3 @@ -232,10 +244,13 @@ def RHS2007_WE_dual(): padding2 = (padding_vertical2, padding_vertical2, padding_horizontal2, padding_horizontal2) target_height = stimuli.utils.degrees_to_pixels(2, ppd) - img1 = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding1, target_height=target_height) - img2 = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding2, target_height=target_height, orientation='vertical') - img = np.hstack((img1, img2)) - return img + stim1 = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding1, target_height=target_height) + stim2 = stimuli.illusions.whites.white(shape=(height, width), ppd=ppd, frequency=frequency, start='low', target_indices=(2, 5), padding=padding2, target_height=target_height, orientation='vertical') + + stim = Stimulus() + stim.img = np.hstack((stim1.img, stim2.img)) + stim.target_mask = np.hstack((stim1.target_mask, stim2.target_mask)) + return stim def RHS2007_WE_anderson(): total_height, total_width, ppd = (32,)*3 @@ -248,10 +263,9 @@ def RHS2007_WE_anderson(): padding_horizontal = (total_width - width) / 2 padding_vertical = (total_height - height) / 2 padding = (padding_vertical, padding_vertical, padding_horizontal, padding_horizontal) - img = stimuli.illusions.whites.white_anderson(shape=(height, width), ppd=ppd, frequency=frequency, target_height=target_height, + return stimuli.illusions.whites.white_anderson(shape=(height, width), ppd=ppd, frequency=frequency, target_height=target_height, target_indices_top=(5,), target_offsets_top=(target_height / 2,), target_indices_bottom=(10,), target_offsets_bottom=(-target_height / 2,), height_bars=height_bars, height_horizontal_top=height_horizontal, padding=padding) - return img def RHS2007_WE_howe(): total_height, total_width, ppd = (32,)*3 @@ -264,42 +278,37 @@ def RHS2007_WE_howe(): padding_horizontal = (total_width - width) / 2 padding_vertical = (total_height - height) / 2 padding = (padding_vertical, padding_vertical, padding_horizontal, padding_horizontal) - img = stimuli.illusions.whites.white_anderson(shape=(height, width), ppd=ppd, frequency=frequency, target_height=target_height, + return stimuli.illusions.whites.white_anderson(shape=(height, width), ppd=ppd, frequency=frequency, target_height=target_height, target_indices_top=(5,), target_offsets_top=(0,), target_indices_bottom=(10,), target_offsets_bottom=(0,), height_bars=height_bars, height_horizontal_top=height_horizontal, padding=padding) - return img def RHS2007_WE_radial_thick_small(): total_height, total_width, ppd = (32,)*3 radius = 8 padding = ((total_width - 2 * radius) / 2,) * 4 n_cycles = 7 - img = stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) - return img + return stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) def RHS2007_WE_radial_thick(): total_height, total_width, ppd = (32,)*3 radius = 12 padding = ((total_width - 2 * radius) / 2,) * 4 n_cycles = 9 - img = stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) - return img + return stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) def RHS2007_WE_radial_thin_small(): total_height, total_width, ppd = (32,)*3 radius = 8 padding = ((total_width - 2 * radius) / 2,) * 4 n_cycles = 13 - img = stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) - return img + return stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) def RHS2007_WE_radial_thin(): total_height, total_width, ppd = (32,)*3 radius = 12 padding = ((total_width - 2 * radius) / 2,) * 4 n_cycles = 21 - img = stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) - return img + return stimuli.illusions.whites.wheel_of_fortune_white(radius=radius, ppd=ppd, n_cycles=n_cycles, angle_shift=np.pi / n_cycles / 2, target_indices=(n_cycles - 1, 2 * n_cycles - 1), target_width=0.5, padding=padding) def RHS2007_WE_circular1(): total_height, total_width, ppd = (32,)*3 @@ -308,10 +317,14 @@ def RHS2007_WE_circular1(): frequency = n_cycles / radius padding_vertical = (total_height - 2 * radius) / 2 padding = (padding_vertical, padding_vertical, 0, 0) - img1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) - img2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) - img = np.hstack((img1, img2)) - return img + stim1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) + stim2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) + + stim = Stimulus() + stim.img = np.hstack((stim1.img, stim2.img)) + stim.target_mask = np.hstack((stim1.target_mask, stim2.target_mask)) + + return stim def RHS2007_WE_circular05(): total_height, total_width, ppd = (32,)*3 @@ -320,10 +333,14 @@ def RHS2007_WE_circular05(): frequency = n_cycles / radius padding_vertical = (total_height - 2 * radius) / 2 padding = (padding_vertical, padding_vertical, 0, 0) - img1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) - img2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) - img = np.hstack((img1, img2)) - return img + stim1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) + stim2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) + + stim = Stimulus() + stim.img = np.hstack((stim1.img, stim2.img)) + stim.target_mask = np.hstack((stim1.target_mask, stim2.target_mask)) + + return stim def RHS2007_WE_circular025(): total_height, total_width, ppd = (32,)*3 @@ -332,10 +349,14 @@ def RHS2007_WE_circular025(): frequency = n_cycles / radius padding_vertical = (total_height - 2 * radius) / 2 padding = (padding_vertical, padding_vertical, 0, 0) - img1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) - img2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) - img = np.hstack((img1, img2)) - return img + stim1 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='high', padding=padding) + stim2 = stimuli.illusions.whites.circular_white(radius=radius, ppd=ppd, frequency=frequency, target_indices=(4,), start='low', padding=padding) + + stim = Stimulus() + stim.img = np.hstack((stim1.img, stim2.img)) + stim.target_mask = np.hstack((stim1.target_mask, stim2.target_mask)) + + return stim def domijan2015_white(): height, width, ppd = 8.1, 8., 10 @@ -349,29 +370,29 @@ def domijan2015_white(): if __name__ == '__main__': import matplotlib.pyplot as plt - img, mask = white() + stim = white() plt.subplot(4,2,1) - plt.imshow(img, cmap='gray') + plt.imshow(stim.img, cmap='gray') plt.subplot(4,2,2) - plt.imshow(mask, cmap='gray') + plt.imshow(stim.target_mask, cmap='gray') - img, mask = circular_white() + stim = circular_white() plt.subplot(4, 2, 3) - plt.imshow(img, cmap='gray') + plt.imshow(stim.img, cmap='gray') plt.subplot(4, 2, 4) - plt.imshow(mask, cmap='gray') + plt.imshow(stim.target_mask, cmap='gray') - img, mask = wheel_of_fortune_white() + stim = wheel_of_fortune_white() plt.subplot(4, 2, 5) - plt.imshow(img, cmap='gray') + plt.imshow(stim.img, cmap='gray') plt.subplot(4, 2, 6) - plt.imshow(mask, cmap='gray') + plt.imshow(stim.target_mask, cmap='gray') - img, mask = white_anderson() + stim = white_anderson() plt.subplot(4, 2, 7) - plt.imshow(img, cmap='gray') + plt.imshow(stim.img, cmap='gray') plt.subplot(4, 2, 8) - plt.imshow(mask, cmap='gray') + plt.imshow(stim.target_mask, cmap='gray') plt.tight_layout() plt.show() diff --git a/stimuli/papers/RHS2007.py b/stimuli/papers/RHS2007.py index 76c00173..1a503b63 100644 --- a/stimuli/papers/RHS2007.py +++ b/stimuli/papers/RHS2007.py @@ -141,18 +141,19 @@ def bullseye_thick(): "todorovic_in_small": todorovic_in_small } - plt.figure(figsize=(8, 20)) M = len(stims) + plt.figure(figsize=(8, M*3)) for i, (stim_name, stim) in enumerate(stims.items()): - img, mask = stim() + print("Generating", stim_name+"") + st = stim() plt.subplot(M, 2, 2 * i + 1) plt.title(stim_name + " - img") - plt.imshow(img, cmap='gray') + plt.imshow(st.img, cmap='gray') - if mask is not None: + if st.target_mask is not None: plt.subplot(M, 2, 2 * i + 2) plt.title(stim_name + " - mask") - plt.imshow(mask, cmap='gray') + plt.imshow(st.target_mask, cmap='gray') plt.tight_layout() diff --git a/stimuli/papers/domijan2015.py b/stimuli/papers/domijan2015.py index 468cbef0..b56cc2ca 100644 --- a/stimuli/papers/domijan2015.py +++ b/stimuli/papers/domijan2015.py @@ -69,18 +69,19 @@ def checkerboard_extended(): "checkerboard_extended": checkerboard_extended, } - plt.figure(figsize=(8,20)) M = len(stims) + plt.figure(figsize=(8, M * 3)) for i, (stim_name, stim) in enumerate(stims.items()): - img, mask = stim() + print("Generating", stim_name+"") + st = stim() plt.subplot(M, 2, 2*i+1) plt.title(stim_name+" - img") - plt.imshow(img, cmap='gray') + plt.imshow(st.img, cmap='gray') - if mask is not None: + if st.target_mask is not None: plt.subplot(M, 2, 2*i+2) plt.title(stim_name + " - mask") - plt.imshow(mask, cmap='gray') + plt.imshow(st.target_mask, cmap='gray') plt.tight_layout()