Photo Mosaic в Mathematica: пример из 2008 года не работает в Mathematica 9

Я пытаюсь заставить работать пример Mathematica. Он есть в блоге Тео Грея. В Mathematica 9.0 это не работает. У меня уже есть поиск ответа на переполнение стека в математике 8.0 . Я использую код, который дал heike.

imagePool =Map[With[{i = Import[#]}, {i, N@Mean[Flatten[ImageData[i], 1]]}] &,FileNames["/Users/xunyanan/Desktop/webwx_img/*.jpg"]];
closeMatch[c_] :=RandomChoice[Nearest[imagePool[[All, 2]] -> imagePool[[All, 1]], c, 20]]
ImageAssemble[Map[closeMatch, ImageData[Import["/Users/xunyanan/Desktop/me.tif"]], {2}]]

Я думаю, что он почти успешно прошел. Скриншот ответа: out content

когда я нажал «Показать полный вывод». Я бы получил результат, как показано ниже, или выход Mathematica 9.0 ненормальный. Скриншот:

введите здесь описание изображения

Я использую Mathematica 9.0 прямо сейчас, у меня нет опыта. Может ли кто-нибудь предложить версию этого кода, которая работает для Mathematica 9? Я ценю, что вы можете дать мне некоторые предложения.

Спасибо, ребята, что отредактировали этот вопрос. My PC ENV: mac OS X версии 10.9 и Mathematica 9.0


person xunyn    schedule 25.11.2013    source источник
comment
@Cole Спасибо, серьезная ошибка   -  person xunyn    schedule 25.11.2013
comment
@Cole Ты знаешь, как задать вопрос этим парням?   -  person xunyn    schedule 25.11.2013
comment
Я не уверен, можете ли вы сделать это при переполнении стека, кроме @упоминания их имен   -  person Cole    schedule 25.11.2013
comment
@ Хайке, я понял. большое спасибо   -  person xunyn    schedule 25.11.2013
comment
убедитесь, что все изображения имеют одинаковый тип цвета (убедитесь, что размеры@Imagedata одинаковы)   -  person agentp    schedule 25.11.2013
comment
на самом деле похоже, что ваш TIFF имеет альфа-канал. попробуйте близкое соответствие[#[[1;;3]]&, в Map[]   -  person agentp    schedule 25.11.2013
comment
@george тот же тип цвета означает черный и белый?   -  person xunyn    schedule 25.11.2013
comment
Я имею в виду, что им всем нужно одинаковое количество каналов. Смотрите мой другой комментарий, я думаю, что ваш tiff 4 канала (3 цвета + непрозрачность). jpg, скорее всего, всего 3. Если вы смешиваете ч / б (оттенки серого) и цвет, это также будет проблемой (хотя часто изображения в градациях серого на самом деле являются цветными со всеми 3 равными каналами). Кстати, исправление в моем комментарии выше требует еще одного ] перед & ..   -  person agentp    schedule 26.11.2013
comment
Возможно, вы захотите добавить часть кода ImageAssemble обратно в свой вопрос на случай, если будущие искатели зададутся вопросом, почему это не работает...   -  person cormullion    schedule 26.11.2013
comment
@george вы указываете на проблему, я сохраняю изображение в формате tiff без альфа-канала. Это может работать   -  person xunyn    schedule 27.11.2013
comment
@cormullion спасибо, изменились   -  person xunyn    schedule 27.11.2013


Ответы (1)


Как отмечают комментарии, ваша проблема заключается в том, что изображения, которые вы используете для imagePool, имеют разное количество каналов, и это нарушает функцию Nearest. Вероятно, самый простой способ исправить это:

imagePool = Map[With[{i = Import[#]}, {i, 
  N@Mean[Flatten[ImageData[RemoveAlphaChannel[i]], 1]]}] &, 
    FileNames["*.png", "/tmp"]]

то есть применять RemoveAlphaChannel при импорте изображений. Было бы разумно применить те же меры предосторожности и к исходному изображению.

Найди отличие:

До (без RemoveAlphaChannel):

before

После:

после

person cormullion    schedule 26.11.2013
comment
@george Хорошая идея. У меня хорошие воспоминания об исходных связанных вопросах и ответах - мой первый вопрос StackExchange... :) - person cormullion; 26.11.2013
comment
@cormullion В те дни ты был маленьким кузнечиком :) - person Dr. belisarius; 27.11.2013