Sorry, your browser doesn't support canvas element !
Sorry, your browser doesn't support canvas element !
Kitaoka's "Primrose’s Field"
Let your gaze wander around this primrose’s field and enjoy its wavy nature !
1
deg
25
% of square size
100.
%
100.
%
v1.0
© 2020 KyberVision - Innovation in Vision Sciences
Send Feedback
The Primrose’s Field is another geometrical illusion created by Akiyoshi Kitaoka, professor of psychology at Ritsumeikan University (Kyoto, Japan). This illusion consists of a checkered background with alternating light and dark squares, and smaller star-like shapes (referred as “primroses”) with different color or luminance placed at the intersections of the background squares. The particular disposition of the primroses in term of local contrast creates a wavy moving impression, particularly after blinking or moving your eyes around.

Kitaoka calls it an illusion of Y-junctions (Kitaoka et al. 2001, 2004; Kitaoka 2007). The horizontal border between the background rows appears locally tilted clockwise or counter-clockwise depending on the relative luminance between the star shapes and the surrounding squares.

Prof. Akiyoshi Kitaoka specializes in visual perception and visual illusions of geometrical shape, brightness, color, in motion illusions and other visual phenomena like Gestalt completion and perceptual transparency, based on a modern conception of Gestalt Psychology. He became renowned through his Rotating snakes illusion. Visit his website to discover more illusions of Y-junctions:

Illusion of Y-junctions

References:

  Kitaoka et al. (2001) Last but Not Least: New variations of spiral illusions. Perception 30(5):637–646

  Kitaoka et al. (2004) Contrast Polarities Determine the Direction of Café Wall Tilts. Perception 33(1):11–20

  Kitaoka (2007) Tilt illusions after Oyama (1960): A review. Japanese Psychological Research 49(1):7–19

  Abdellah (2016) Primrose’s field optical illusion. Brown University’s Neuroscience in Action Blog
Here is the math behind this stimulus:

  wl = sq*2; psize = pr/100
  back = plaid(x,y,wl,wl)
  xsamples = rectanglewave(x,sq,-psize/2,psize)
  ysamples = rectanglewave(y,sq,-psize/2,psize)
  shape = exp(-pow(tan(2*pi*x/wl+pi/2)*tan(2*pi*y/wl+pi/2)/(1250/pr),20))
  primrose = 1-cminmax(shape,0,1)
  field = xsamples*ysamples*primrose
  xshift = 0.125*floor(y/sq+0.5)
  pair1 = rectanglewave(x,wl*4,1.5*0.125+xshift,0.25)
  pair2 = rectanglewave(x,wl*2,3*0.125+2*xshift,0.5)
  pairs = (pair1-0.5)*pair2
  pair1 = pairs>0
  pair2 = pairs<0
  singlewhite1 = rectanglewave(x,wl*4,-0.0625/2+xshift,0.0625)
  singlewhite2 = rectanglewave(x,wl*4,19*0.0625/2+xshift,0.0625)
  singleblack1 = rectanglewave(x,wl*4,3*0.0625/2+xshift,0.0625)
  singleblack2 = rectanglewave(x,wl*4,15*0.0625/2+xshift,0.0625)
  singlewhite = singlewhite1+singlewhite2
  singleblack = singleblack1+singleblack2
  colorprimrose = singlewhite+pair1
  grayprimrose = singleblack+pair2
  r1, g1, b1 = HSBtoRGB(147, 0.58*sat/100, 0.75)
  r2, g2, b2 = HSBtoRGB(80, 0.76*sat/100, 0.85)
  r3, g3, b3 = HSBtoRGB(315, 0, 0.8+0.2*cnt/100)
  r4, g4, b4 = HSBtoRGB(315, sat/100, 0.8-0.2*cnt/100+0.2*sat/100)
  rback = (1-field)*(r1*back+(1-back)*r2)
  gback = (1-field)*(g1*back+(1-back)*g2)
  bback = (1-field)*(b1*back+(1-back)*b2)
  zr = rback + field*(r3*colorprimrose + r4*grayprimrose)
  zg = gback + field*(g3*colorprimrose + g4*grayprimrose)
  zb = bback + field*(b3*colorprimrose + b4*grayprimrose)

Where:

  'sq' is the squares size (in deg)
  'pr' is the primrose size (in % of square size)
  'sat' is the overall saturation (in %)
  'cnt' is the primrose contrast (in %)
The whole stimulus is generated in real-time using a GLSL shader that runs right inside your WebGL-compatible browser. The plain Math behind the stimulus was converted to this optimized GLSL shader using the new Psykinematix Pro Edition. Translation to Matlab and Python code is also possible !

This whole widget was also fully generated using Psykinematix Pro Edition. The parameters that control the stimulus properties through the sliders are the same as the ones you would define as dependent or independent variables when using the stimulus in an actual psychophysical experiment run in Psykinematix. The widget creation is otherwise fully customizable with your own logo, copyright, links, etc.

To learn more about the widget creation, click on the above "Made With" button !
v1.0
© 2020 KyberVision - Innovation in Vision Sciences