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

Опитвам се да накарам пример на Mathematica да работи. Това е в блога на Тео Грей. В Mathematica 9.0 не работи. Вече потърсих отговора на stackoverflow в mathematica 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? Оценявам, че можете да ми дадете някои предложения.

Благодаря ви, момчета, че редактирате този въпрос. Моят компютър 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
@Heike Разбрах го. Благодаря много   -  person xunyn    schedule 25.11.2013
comment
уверете се, че всички изображения са от един и същи цветен тип (уверете се, че всички Dimensions@Imagedata са еднакви)   -  person agentp    schedule 25.11.2013
comment
всъщност изглежда, че вашият tiff има алфа канал. опитайте closematch[#[[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):

преди

След:

след

person cormullion    schedule 26.11.2013
comment
@george Добра идея. Имам добри спомени от оригиналните свързани въпроси и отговори - първият ми въпрос в StackExchange... :) - person cormullion; 26.11.2013
comment
@cormullion Ти беше малък скакалец в онези дни :) - person Dr. belisarius; 27.11.2013