A method of indexing images according to visual characteristics of the images, the method comprising: receiving a first array of pixel representations that represent a first image; converting the received first array of pixel representations into a color space comprising three-color L, U, V components; processing the converted first array of pixel representations to determine a plurality of spots associated with the first image by: partitioning the converted first array of pixel representations to generate a two-dimensional array of cells, each cell comprising a connected region of the first image; determining a plurality of visual characteristics of each cell; generating a plurality of intervals and determining a plurality of visual characteristics for each interval, each interval generated by joining cells connected along a first axial direction that have determined visual characteristics that vary spatially within a first respective tolerance; and determining at least one spot associated with the first image, each spot determined by joining intervals connected along a second axial direction that have visual characteristics that vary within a second respective tolerance; generating a plurality of spot descriptors, each spot descriptor indicating visual characteristics of a respective spot; and using the plurality of spot descriptors as an index entry for the first image. receiving a first array of pixel representations that represent a first image; converting the received first array of pixel representations into a color space comprising three-color L, U, V components; processing the converted first array of pixel representations to determine a plurality of spots associated with the first image by: partitioning the converted first array of pixel representations to generate a two-dimensional array of cells, each cell comprising a connected region of the first image; determining a plurality of visual characteristics of each cell; generating a plurality of intervals and determining a plurality of visual characteristics for each interval, each interval generated by joining cells connected along a first axial direction that have determined visual characteristics that vary spatially within a first respective tolerance; and determining at least one spot associated with the first image, each spot determined by joining intervals connected along a second axial direction that have visual characteristics that vary within a second respective tolerance; partitioning the converted first array of pixel representations to generate a two-dimensional array of cells, each cell comprising a connected region of the first image; determining a plurality of visual characteristics of each cell; generating a plurality of intervals and determining a plurality of visual characteristics for each interval, each interval generated by joining cells connected along a first axial direction that have determined visual characteristics that vary spatially within a first respective tolerance; and determining at least one spot associated with the first image, each spot determined by joining intervals connected along a second axial direction that have visual characteristics that vary within a second respective tolerance; generating a plurality of spot descriptors, each spot descriptor indicating visual characteristics of a respective spot; and using the plurality of spot descriptors as an index entry for the first image.