Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'replicating_domijan_stimuli' into 'master'
added tests to compare with hardcoded domijan stimuli See merge request computational-psychology/stimuli!8
- Loading branch information
Showing
2 changed files
with
307 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,243 @@ | ||
import numpy as np | ||
|
||
lum_white = 9.0 | ||
lum_black = 1.0 | ||
lum_gray = 5.0 | ||
|
||
def get_dungeon(): | ||
# Dungeon illusion (Bressan, 2001) | ||
img = lum_black * np.ones([110, 220]) | ||
img[:, 110:220] = lum_white | ||
|
||
for i in range(9, 90, 20): | ||
for j in range(9, 90, 20): | ||
img[i : i + 10, j : j + 10] = lum_white | ||
for j in range(119, 210, 20): | ||
img[i : i + 10, j : j + 10] = lum_black | ||
|
||
img[49:59, 29:39] = lum_gray | ||
img[49:59, 49:59] = lum_gray | ||
img[49:59, 69:79] = lum_gray | ||
img[49:59, 139:149] = lum_gray | ||
img[49:59, 159:169] = lum_gray | ||
img[49:59, 179:189] = lum_gray | ||
|
||
img[29:39, 49:59] = lum_gray | ||
img[69:79, 49:59] = lum_gray | ||
img[29:39, 159:169] = lum_gray | ||
img[69:79, 159:169] = lum_gray | ||
|
||
return img | ||
|
||
def get_cube(): | ||
# Cube illusion (Agostini & Galmonte, 2002) | ||
img = lum_black * np.ones([100, 200]) | ||
|
||
img[:, 100:200] = lum_white | ||
img[9:20, 9:90] = lum_white | ||
img[9:90, 9:20] = lum_white | ||
img[79:90, 9:90] = lum_white | ||
img[9:90, 79:90] = lum_white | ||
|
||
img[9:20, 109:190] = lum_black | ||
img[9:90, 109:120] = lum_black | ||
img[79:90, 109:190] = lum_black | ||
img[9:90, 179:190] = lum_black | ||
|
||
img[27:32, 9:90] = lum_black | ||
img[47:52, 9:90] = lum_black | ||
img[67:72, 9:90] = lum_black | ||
|
||
img[9:90, 27:32] = lum_black | ||
img[9:90, 47:52] = lum_black | ||
img[9:90, 67:72] = lum_black | ||
|
||
img[32:47, 9:20] = lum_gray | ||
img[52:67, 79:90] = lum_gray | ||
img[79:90, 32:47] = lum_gray | ||
img[9:20, 52:67] = lum_gray | ||
|
||
img[27:32, 109:190] = lum_white | ||
img[47:52, 109:190] = lum_white | ||
img[67:72, 109:190] = lum_white | ||
|
||
img[9:90, 127:132] = lum_white | ||
img[9:90, 147:152] = lum_white | ||
img[9:90, 167:172] = lum_white | ||
|
||
img[32:47, 109:120] = lum_gray | ||
img[52:67, 179:190] = lum_gray | ||
img[79:90, 132:147] = lum_gray | ||
img[9:20, 152:167] = lum_gray | ||
|
||
return img | ||
|
||
def get_grating(): | ||
# Grating illusion | ||
img = lum_black * np.ones([100, 220]) | ||
img[:, 110:220] = lum_white | ||
|
||
for j in range(9, 100, 20): | ||
img[9:90, j : j + 10] = lum_white | ||
|
||
for j in range(119, 210, 20): | ||
img[9:90, j : j + 10] = lum_black | ||
|
||
img[9:90, 49:59] = lum_gray | ||
img[9:90, 159:169] = lum_gray | ||
|
||
return img | ||
|
||
def get_ring(): | ||
# Ring pattern | ||
img = lum_black * np.ones([100, 200]) | ||
img[9:90, 9:90] = lum_white | ||
img[14:85, 14:85] = lum_black | ||
img[19:80, 19:80] = lum_white | ||
img[24:75, 24:75] = lum_gray | ||
img[29:70, 29:70] = lum_white | ||
img[34:65, 34:65] = lum_black | ||
img[39:60, 39:60] = lum_white | ||
img[44:55, 44:55] = lum_black | ||
|
||
img[9:90, 109:190] = lum_white | ||
img[14:85, 114:185] = lum_black | ||
img[19:80, 119:180] = lum_white | ||
img[24:75, 124:175] = lum_black | ||
img[29:70, 129:170] = lum_gray | ||
img[34:65, 134:165] = lum_black | ||
img[39:60, 139:160] = lum_white | ||
img[44:55, 144:155] = lum_black | ||
|
||
return img | ||
|
||
def get_bullseye(): | ||
# Bullseye illusion | ||
img = lum_black * np.ones([100, 200]) | ||
img[9:90, 9:90] = lum_white | ||
img[14:85, 14:85] = lum_black | ||
img[19:80, 19:80] = lum_white | ||
img[24:75, 24:75] = lum_black | ||
img[29:70, 29:70] = lum_white | ||
img[34:65, 34:65] = lum_black | ||
img[39:60, 39:60] = lum_white | ||
img[44:55, 44:55] = lum_gray | ||
|
||
img[14:85, 114:185] = lum_white | ||
img[19:80, 119:180] = lum_black | ||
img[24:75, 124:175] = lum_white | ||
img[29:70, 129:170] = lum_black | ||
img[34:65, 134:165] = lum_white | ||
img[39:60, 139:160] = lum_black | ||
img[44:55, 144:155] = lum_gray | ||
|
||
return img | ||
|
||
def get_sbc(): | ||
# Simultaneous brightness contrast | ||
img = lum_black * np.ones([100, 200]) | ||
img[:, 0:100] = lum_white | ||
img[39:60, 39:60] = lum_gray | ||
img[39:60, 139:160] = lum_gray | ||
|
||
return img | ||
|
||
def get_white(): | ||
# White illusion | ||
img = lum_gray * np.ones([100, 100]) | ||
img[9:90, 9:19] = lum_black | ||
img[9:90, 19:29] = lum_white | ||
img[9:90, 29:39] = lum_black | ||
img[9:90, 39:49] = lum_white | ||
img[9:90, 49:59] = lum_black | ||
img[9:90, 59:69] = lum_white | ||
img[9:90, 69:79] = lum_black | ||
img[9:90, 79:89] = lum_white | ||
img[39:60, 29:39] = lum_gray | ||
img[39:60, 59:69] = lum_gray | ||
|
||
return img | ||
|
||
def get_benary(): | ||
# Benary's cross | ||
img = lum_white * np.ones([100, 100]) | ||
img[39:60, 9:90] = lum_black | ||
img[9:90, 39:60] = lum_black | ||
img[39:50, 79:90] = lum_gray | ||
img[28:39, 28:39] = lum_gray | ||
|
||
return img | ||
|
||
def get_todorovic(): | ||
# Todorovic's illusion | ||
img = lum_white * np.ones([100, 200]) | ||
img[:, 0:100] = lum_black | ||
img[29:70, 29:70] = lum_gray | ||
img[29:70, 129:170] = lum_gray | ||
|
||
img[14:45, 14:45] = lum_white | ||
img[14:45, 54:85] = lum_white | ||
img[54:85, 14:45] = lum_white | ||
img[54:85, 54:85] = lum_white | ||
|
||
img[14:45, 114:145] = lum_black | ||
img[14:45, 154:185] = lum_black | ||
img[54:85, 114:145] = lum_black | ||
img[54:85, 154:185] = lum_black | ||
|
||
return img | ||
|
||
def get_contrast_contrast(): | ||
# Contrast-contrast effect | ||
img = lum_gray * np.ones([100, 200]) | ||
img[9:89, 9:89] = lum_black | ||
|
||
for i in range(9, 80, 20): | ||
for j in range(19, 80, 20): | ||
img[i : i + 10, j : j + 10] = lum_white | ||
img[j : j + 10, i : i + 10] = lum_white | ||
|
||
img[29:69, 29:69] = (lum_white + lum_gray) / 2.0 | ||
for i in range(29, 60, 20): | ||
for j in range(29, 60, 20): | ||
img[i : i + 10, j : j + 10] = (lum_black + lum_gray) / 2.0 | ||
k, l = i + 10, j + 10 | ||
img[k : k + 10, l : l + 10] = (lum_black + lum_gray) / 2.0 | ||
|
||
img[29:69, 129:169] = img[29:69, 29:69] | ||
|
||
return img | ||
|
||
def get_checkerboard(): | ||
# Checkerboard contrast | ||
img = lum_gray * np.ones([100, 100]) | ||
img[9:89, 9:89] = lum_white | ||
|
||
for i in range(9, 80, 20): | ||
for j in range(9, 80, 20): | ||
img[i : i + 10, j : j + 10] = lum_black | ||
k, l = i + 10, j + 10 | ||
img[k : k + 10, l : l + 10] = lum_black | ||
|
||
img[39:49, 29:39] = lum_gray | ||
img[59:69, 59:69] = lum_gray | ||
|
||
return img | ||
|
||
def get_checkerboard_extended(): | ||
# Extended version of checkerboard contrast | ||
img = lum_gray * np.ones([100, 100]) | ||
img[9:89, 9:89] = lum_white | ||
|
||
for i in range(9, 80, 20): | ||
for j in range(9, 80, 20): | ||
img[i : i + 10, j : j + 10] = lum_black | ||
k, l = i + 10, j + 10 | ||
img[k : k + 10, l : l + 10] = lum_black | ||
|
||
img[39:49, 19:49] = lum_gray | ||
img[59:69, 49:79] = lum_gray | ||
img[29:59, 29:39] = lum_gray | ||
img[49:79, 59:69] = lum_gray | ||
|
||
return img |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import pytest | ||
import numpy as np | ||
import matplotlib.pyplot as plt | ||
|
||
import ground_truth | ||
import stimuli.papers.domijan2015 | ||
from stimuli.utils import compare_plots | ||
|
||
|
||
def test_dungeon(): | ||
original = ground_truth.get_dungeon() | ||
test = stimuli.papers.domijan2015.dungeon().img | ||
assert np.array_equal(original, test) | ||
|
||
|
||
def test_cube(): | ||
original = ground_truth.get_cube() | ||
test = stimuli.papers.domijan2015.cube().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_grating(): | ||
original = ground_truth.get_grating() | ||
test = stimuli.papers.domijan2015.grating().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_ring(): | ||
original = ground_truth.get_ring() | ||
test = stimuli.papers.domijan2015.rings().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_bullseye(): | ||
original = ground_truth.get_bullseye() | ||
test = stimuli.papers.domijan2015.bullseye().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_sbc(): | ||
original = ground_truth.get_sbc() | ||
test = stimuli.papers.domijan2015.simultaneous_brightness_contrast().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_white(): | ||
original = ground_truth.get_white() | ||
test = stimuli.papers.domijan2015.white().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_benary(): | ||
original = ground_truth.get_benary() | ||
test = stimuli.papers.domijan2015.benary().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_todorovic(): | ||
original = ground_truth.get_todorovic() | ||
test = stimuli.papers.domijan2015.todorovic().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_checkerboard(): | ||
original = ground_truth.get_checkerboard() | ||
test = stimuli.papers.domijan2015.checkerboard().img | ||
assert np.array_equal(original, test) | ||
|
||
def test_checkerboard_extended(): | ||
original = ground_truth.get_checkerboard_extended() | ||
test = stimuli.papers.domijan2015.checkerboard_extended().img | ||
assert np.array_equal(original, test) |