Cette illusion découverte par Hermann (1870) fait apparaître les blancs de la grille un peu gris. L'effet est accentué aux coins, là où les noirs sont plus denses dans le voisinage. En fixant une zone particulière l'illusion disparaît, la partie centrale de la rétine (fovéa) qui est alors sollicitée est moins sensible à l'environnement.
Dans la deuxième figure, la grille est inversée et le phénomène demeure, c'est le noir qui devient un peu gris.
u = 25; path carre; carre = ((-1,-1) -- (-1,1) -- (1,1) -- (1,-1) -- cycle) scaled (u-5); beginfig(1); for j:=1 upto 9: for h:=1 upto 6: fill carre shifted (2*j*u,2*h*u) withcolor black; endfor; endfor; endfig; beginfig(2); for h:=0 upto 6: draw (u,(2*h+1)*u) -- (19u,(2*h+1)*u) withpen pensquare scaled 10 withcolor black; endfor; for j:=0 upto 9: draw ((2*j+1)*u,u) -- ((2*j+1)*u,13u) withpen pensquare scaled 10 withcolor black; endfor; endfig; end
La figure ci-dessous est une grille de Hermann inversée dont les bords ont été rendus flous (James Bergen). À l'intersection des lignes horizontales et verticales apparaissent des points qui scintillent...
La réalisation de cette image nécessite quelques ajustements, l'effet est sensible à la répartition des gris aux coins des carrés. Il faut ménager la plage sombre dans laquelle se forme l'illusion.
% Paramètres d'ajustement de l'image u = 25; % unité v = 0.3; % indice pour le décrochage du coin des carrés w = 0.015; % indice pour la profondeur du coin d = 0.1; % indice pour le premier niveau de gris e = 0.2; % indice pour la variation des gris n = 5; % nombre de niveau de gris def f(expr x) = x * ( 1 + 4 * e * ( 1 - x) ) enddef; def cadre (expr a,b) = (-1+a,-1){dir 180} ... (-1+b,-1+b) ... {dir 90}(-1,-1+a) -- (-1, 1-a){dir 90} ... (-1+b, 1-b) ... {dir 0}(-1+a, 1) -- (1-a, 1){dir 0} ... (1-b , 1-b) ... {dir -90}(1 , 1-a) -- (1, -1+a){dir -90} ... (1-b ,-1+b) ... {dir 180}(1-a, -1) -- cycle enddef; picture carre; carre := image( fill ((-1,-1)--(-1,1)--(1,1)--(1,-1)--cycle) scaled u withcolor f(d/(n+d))*white; for i:=1 upto n: fill cadre(v,w*(5-(i-1)*4/(n-1))) scaled (u-i) withpen pensquare scaled 1pt withcolor f((i+d)/(n+d))*white; endfor; ); beginfig(1); for j:=1 upto 9: for h:=1 upto 6: draw carre shifted (2*j*u,2*h*u); endfor; endfor; draw bbox(currentpicture) withcolor blue; endfig; end
Les disques aux intersections des allées grises sont-ils noirs ou blancs?
u = 25; path carre; carre = ((-1,-1) -- (-1,1) -- (1,1) -- (1,-1) -- cycle) scaled (u-5); picture grille; path cadre; beginfig(1); grille = image ( for j:=1 upto 9: for h:=1 upto 6: fill carre shifted (2*j*u,2*h*u) withcolor black; endfor; endfor; ); cadre = bbox(grille); fill cadre withcolor .5white; draw grille; for j:=1 upto 8: for h:=1 upto 5: fill fullcircle scaled 10 shifted ((2*j+1)*u,(2*h+1)*u) withcolor white; endfor; endfor; draw bbox(currentpicture) withcolor blue; endfig; end