Может быть, немного более обтекаемым:
imagePool = Map[With[{i = Import[#]}, {i, N@Mean[Flatten[ImageData[i], 1]]}] &,
FileNames["Pool/*.jpg"]];
closeMatch[c_] := RandomChoice[
Nearest[imagePool[[All, 2]] -> imagePool[[All, 1]], c, 20]]
ImageAssemble[Map[closeMatch, ImageData[Import["mendeleevIcon.tif"]], {2}]]

Редактировать
Причина, по которой исходный код перестал работать в версии 8, заключается в том, что вплоть до версии 6 Mathematica Import["file.jpg"]
возвращал объект Graphics[Raster[]]
. Чтобы извлечь сами данные изображения, вы можете просто сделать Import["file.jpg"][[1,1]]
. Однако в версии 8 (и я подозреваю, что версия 7) растровые изображения импортируются как Image
по умолчанию, что означает, что вам нужно ImageData
, чтобы извлечь данные изображения из импортированных файлов. Вы по-прежнему можете импортировать растровые изображения как Graphics[Raster[]]
, используя Import["file.jpg","Graphics"]
, поэтому оригинальный код все равно должен работать, если вы адаптируете операторы Import
, но преимущество использования Image
объектов в том, что вы можете использовать такие функции, как ImageAssemble
(плюс целый ряд других инструментов для обработки изображений, поставляемых с Mathematica 8).