Jancka
|
|
« : 28 Февраль 2009, 23:03:42 » |
|
задача такая. есть картинка - черно-белый объект. черный нужно заменить градиентом серого, причем чтобы градиент зависел от удаления точки от границы белой области. может кто-нибудь поможет. или хотя бы идею даст с помощью чего это можно сделать?
|
|
|
Записан
|
|
|
|
iddqd
|
какине нибудь ограничения по поводу изображения есть?
|
|
|
Записан
|
|
|
|
Jancka
|
да нет. скажем, это будет обчная картинка, которую я сама нарисую в фотошопе (или еще где - все равно). на ней будет фигура черного цвета с белыми включениями (одним или больше). реальный размер в жизни 15х15см, размер точки 1х1мм. так вот по мере удаления черных точек от границ этих белых включений (кратчайшее расстояние) интенсивность черного цвета должна изменяться. черный и белый тоже не обязательно, как и градиент. просто в начале это 2 цвета, а потом изменение одного из них.
|
|
|
Записан
|
|
|
|
_SworD_
|
В Photoshop должно быть.
|
|
|
Записан
|
|
|
|
Jancka
|
ну, там ведь нельзя задать это формулой?
|
|
|
Записан
|
|
|
|
iddqd
|
самая простая и тупая идея - считаеш расстояние от каждой точки к каждой, находиш минимальное. О(n*n) еще можно попробвать фильтром получить контур, и искать кротчайшее расстояние от точки к нему.
|
|
|
Записан
|
|
|
|
coolasm
|
Если картинка не сильно сложная, можно сделать в Illustrator-е при помощи mesh-градиента
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Jancka
|
а как мне это расстояние искать? там же 150х150 точек примерно. не руками же? что-то я себе этого не представляю. а как с контуром это сделать? очень нужно.. А в Иллюстраторе как (картинка несложная)? я с ним не работала никогда, но если там можно, то придется срочно освоить. можно там задать формулу, т.е. определить закон заливки в зависимости от точек контура??
|
|
|
Записан
|
|
|
|
coolasm
|
А можно хоть на картинку посмотреть?
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Jancka
|
вот что-то подобное. для начала хватит даже без боковых белых пятен (по идее еще эти 2 пятна - белые контуры) Добавлено: 01 Март 2009, 22:42:49
вот, каринку изменила. фишка именно в том, что белый контур неравномерный. а так как закон предусматривает именно кратчайшее расстояние точки черного контура до белого, то я ума не приложу как..
|
|
|
Записан
|
|
|
|
iddqd
|
а как мне это расстояние искать? там же 150х150 точек примерно. не руками же? что-то я себе этого не представляю. а как с контуром это сделать? очень нужно.. А в Иллюстраторе как (картинка несложная)? я с ним не работала никогда, но если там можно, то придется срочно освоить. можно там задать формулу, т.е. определить закон заливки в зависимости от точек контура?? ээ, так мы это не программируем?
|
|
|
Записан
|
|
|
|
coolasm
|
чет картинки не видно
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
spammer
|
походу должно решаться через матричное преобразование в фотошопе
|
|
|
Записан
|
|
|
|
RILLey_ELf
Гость
|
ммм я бы воспользовался matLab в целом можно взять волновой алгоритм (дейкстры) добавив в очередь преждевременно все белые точки, посчитать таким образом расстояние до ближайшего делого пикселя ну а дальше ясно
если не ясно то опишите задачу поточнее )
|
|
|
Записан
|
|
|
|
VooDoo
|
нафига тут волновой алгоритм? x*x+y*y = r*r спасёт мир
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
spammer
|
элегантное решение через фотошоп (как я понял постановку задачи)
1) выделяешь волшебной палочкой все черные области без установленного флашка "Contiguous" (веделяются все черные области на рисунке) 2) выполняешь команду Select->Modify->Feather, вводишь ширину для градиентной границы (получаешь градиентный селекшен) 3) выполняешь команду Select->Modify->Contract, вводишь это же значение (сжимаешь селекшен чтобы он не выходил за границы) 4) создаешь новый слой, заливаешь на нем этот селекшен черным цветом 5) создаешь еще один слой, заливаешь его полностью белым, подкладываешь под слой из п.4 6) скрываешь основной слой
вуаля
на риснке - до и после
|
|
|
Записан
|
|
|
|
Jancka
|
спасибо большое за ответы. фотошоп, похоже, отпадает. ибо мне не просто размытая картинка нужна, а по определенному закону. а здесь размытый контур будет всегда повторять белый. если рассматривать кратчайшее расстояние до белой зоны, то картинка будет совсем другой. а вот матлаб заинтересовал.. правда, я в нем слабо варю.. есть там возможность загрузить каринку? нужно ослабление цвета (сигнала) по закону 1/(1+d), где d-кратчайшее расстояние до белого внутреннего контура в см. можно не совсем градиент, можно шаги бОльшими сделать, скажем, в 3-5мм. Добавлено: [time]Mon Mar 2 16:01:00 2009[/time]
а как мне это расстояние искать? там же 150х150 точек примерно. не руками же? что-то я себе этого не представляю. а как с контуром это сделать? :- очень нужно..
А в Иллюстраторе как (картинка несложная)? я с ним не работала никогда, но если там можно, то придется срочно освоить. можно там задать формулу, т.е. определить закон заливки в зависимости от точек контура??
ээ, так мы это не программируем? программированием на мой взгляд было бы лучше. ибо картинка будет не одна.. Добавлено: [time]Mon Mar 2 16:21:17 2009[/time]
вот, вобщем, что меня уже "устроит". левая часть, пока как и была, правая изменилась по закону. шаг здесь довольно большой. но, в прниципе, мне хватит 10 цветов.
|
|
« Последнее редактирование: 02 Март 2009, 17:25:11 от Jancka »
|
Записан
|
|
|
|
RILLey_ELf
Гость
|
посмотрим по мат лабу тут http://amath.colorado.edu/courses/4720/2000Spr/Labs/Worksheets/Matlab_tutorial/matlabimpr.htmlx*x+y*y = r*r спасёт мир как я понял задачу: у тебя есть im = [n][m]точек, точка = int(0..255) (учитывая что у нас градации серого) белыми областями называется набор точек где их цвет 255 в результате: все чёрные точки (цвет = 0) должны сменить цвет в зависимости от расстояния до ближайщей белой точки по какой то определённой формуле (скажем d = pow( pow( x1-x2 , 2) + pow( y1-y2 , 2), 0.5 ) ) как ты формулой окружности собираешься искать ближайшую белую точку без перебора я пока не представляю, но думаю что волновой алгоритм отлично это сделает
|
|
|
Записан
|
|
|
|
spammer
|
как я понял из рисунка автора, то я вообще не понял, что нужно сделать
|
|
|
Записан
|
|
|
|
iddqd
|
да, второй рисунок ввел меня в заблуждение кста, про окружность я тоже не вдуплил.
|
|
|
Записан
|
|
|
|
Jancka
|
ну, а как мне без окружности искать кратчайшее расстояние от черных точек до белых? второй рисунок это "упрощение" градиента, мне такого хватит.. Добавлено: 03 Март 2009, 13:38:08
как я понял задачу: у тебя есть im = [n][m]точек, точка = int(0..255) (учитывая что у нас градации серого) белыми областями называется набор точек где их цвет 255 в результате: все чёрные точки (цвет = 0) должны сменить цвет в зависимости от расстояния до ближайщей белой точки по какой то определённой формуле (скажем d = pow( pow( x1-x2 , 2) + pow( y1-y2 , 2), 0.5 ) ) как ты формулой окружности собираешься искать ближайшую белую точку без перебора я пока не представляю, но думаю что волновой алгоритм отлично это сделает
все правильно, это мне и нужно. только я и не знаю, как мне это кратчайшее расстояние искать. на листе бумаге имеет смысл именно окружность. ну, чтоб белая была как бы касательной. тогда расстояние будет наименьшим.
|
|
|
Записан
|
|
|
|
spammer
|
это то понятно но при чем здесь рисунок с разбитым сердцем? он абсолютно не подходит как результат
|
|
|
Записан
|
|
|
|
Jancka
|
я написала, что "обработана" там только правая половина. все моя природная лень белые включения - это то, что по середине и возможно "въемки" по краям. фон мне не интересен. т.е. градиент или изменение цвета должны быть не со всем сторон, а только со сторон белых включений. именно такой результат мне и нужен. не знаю просто как объяснить лучше..
|
|
|
Записан
|
|
|
|
spammer
|
я предлагаю автору тогда немного подумать и сформулировать задачу более конкретно, а то телепатов тут нет, или они скрываются, и понять что конкретно нужно просто невозможно
|
|
|
Записан
|
|
|
|
|
iddqd
|
в лоб можна написать за пару минут. при больших разрешениях бут шляпа
|
|
|
Записан
|
|
|
|
Jancka
|
в лоб можна написать за пару минут. при больших разрешениях бут шляпа а можно подробнее? мне не надо работать с большими разрешениями. эта картинка нужна просто для визуальной оценки..
|
|
|
Записан
|
|
|
|
spammer
|
дело в том что если вам нужно, чтобы каждая черная точка стала серой, и ее засветка определялась удалением от границы области, то это именно то, что делает предложенный мной способ через селекшены фотошопа
но судя по вашему рисунку, вам нужно совсем не это. вот и хотелось бы узнать, что именно вы хотите получить
|
|
|
Записан
|
|
|
|
Jancka
|
вот здесь на картинке показан смысл этой задачи. она решена здесь не с помощью цветов. а с помощью объемов. но ведь с помощью цветов должно быть проще? объем пиксела (значение цвета) уменьшается с расстоянием по закону 1/(1+d), где d-кратчайшее расстояние от "белого поля". они эту картинку потом только в градиент переводят (с большим шагом). и этот "градиент" он не повторяет контура области, именно потому, что расстояния будут браться кратчайшие, и значения будут отличаться. а в ыотошопе я не заметила отличий - все размыто одинаково, повторяя контур области. в идеале картинку я должна загрузить туда любую. а эти объемы могут быть не только по середине, но и с боков. может быть 1, а может быть и 3..
|
|
|
Записан
|
|
|
|
iddqd
|
теперь я еще больше запутался. то что вокруг белое значед не в счет. считается только белое включение по середине. чем дальше от него, тем белее. или как? и этот "градиент" он не повторяет контура области, именно потому, что расстояния будут браться кратчайшие, и значения будут отличаться
я наверно туплю, но понятней не стало. хачу толковый пример с обозначениями какая область релевантна а какая нет. я понял задачу так же как и spammer, но эт оказывается не верно
|
|
|
Записан
|
|
|
|
Jancka
|
ну, на 3х-мерной картинке же видно. выпуклое - это релевантная зона, ее нужно обрабатывать. зона по середине "впуклая", от нее нужно отталкиваться. т.е. они делят весь имеющийся объем на маленькие участки (маленькие объемы или пикселы), находят кратчайшее расстояние от маленького участка до границы с этой серединой. и преобразуют его. получается такой "каньон". все что вокруг этой большой зоны нам неинтересно. это и есть реальный пример. неужели это только я вижу
|
|
|
Записан
|
|
|
|
iddqd
|
ну теперь то понятно. просто в первом посте речь шла про белый цвет вообще
|
|
|
Записан
|
|
|
|
|
Jancka
|
спасибо. правда, я все еще пока соображаю, как мне это поможет но попытаюсь попозже еще раз прочитать. а что делает этот алгоритм? он ищет расстояния? а как быть с преобразованием картинки? а имеет ли смысл упростить задачу так, чтобы она искала не для всех точек, а только для определнных расстояний (грубо говоря, для 1см, для 1.5 см и так далее)? станет от этого проще? ведь в итоге мне нужно получить эдакое цветовое преобразование..
|
|
|
Записан
|
|
|
|
RILLey_ELf
Гость
|
алгоритм достаточно простой на самом деле не займёт больше 60 минут творчества даже на матлабе для каждой точки данный алгоритм выдаст расстояние до ближайшей белой точки, а по нему применяй уже свою функцию. мягко говоря в результате работы алгоритма можно получить матрицу "D", размерами картинки где: в каждом элементе матрицы "D", будет рассчитано число шагов до ближайшей белой клетки, ( 0 - для белой клетки ). имею данную матрицу преобразовать изображение можно простым циклом for i in 0..m for u in 0..n a = любая_функция_от расстояния(D) end end
|
|
|
Записан
|
|
|
|
spammer
|
1) задача была поставлена неверно оказывается есть не только белые и черные точки, но еще и фон, которые не участвует в расчетах, откуда-то взялся
2) нах тут точные расчеты в матлабе? автор же сказала, что ей надо прикинуть "на глаз". берем фотошоп и валим все теми же селекшенами. не попиксельно верно, но общая картина вполне верна. к тому же работы на минуту в отличие от расчетов в матлабе:
|
|
|
Записан
|
|
|
|
RILLey_ELf
Гость
|
программированием на мой взгляд было бы лучше. ибо картинка будет не одна..
|
|
|
Записан
|
|
|
|
spammer
|
в фотошопе есть такое понятие как batch processing и макросы
а то что автор думает что ей будет лучше у меня не вызывает ничего кроме немого вопроса об ее знаниях об инструментах, подходящих для решения этой задачи
|
|
|
Записан
|
|
|
|
Jancka
|
в фотошопе есть такое понятие как batch processing и макросы
а то что автор думает что ей будет лучше у меня не вызывает ничего кроме немого вопроса об ее знаниях об инструментах, подходящих для решения этой задачи
об инструментах пожалуй, а вот о возможности задать этот градиент формулой ослабление цвета не будет равномерным/линейным. мне нужно видеть каким оно будет.
|
|
|
Записан
|
|
|
|
iddqd
|
я уже забил, ибо запутался. картинка, которую покзал spammer, верна?
|
|
|
Записан
|
|
|
|
spammer
|
насчет прямого задания формулы - врядли, градиенты фотошопа вроде бы ограничиваются линией или параболой
|
|
|
Записан
|
|
|
|
iddqd
|
мы тоже так думали..
|
|
|
Записан
|
|
|
|
Jancka
|
то это не соответсвует описанию задачи. Т.к. вы почему-то считаете, что граница белой области только одна - справа от разрыва. Хотя граница находится вокруг всей фигуры.
вроде я писала, что фигура с белыми включениями, и от белых включений надо отталкиваться. а, вообще, всем спасибо за помощь. задача решилась
|
|
|
Записан
|
|
|
|
Jancka
|
на перле, папа написал
|
|
|
Записан
|
|
|
|
|