![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: нет Всего: 50 |
Год назад написал программку для генерации из текста картинки, как будто тот текст написан моим почерком.
Например, вот результат работы: ![]() Принцип был такой: каждая буква представлена в БД набором контрольных точек, для конкретной строки символов строю список контрольных точек, затем точки случайно "колебаю", потом по точкам отрисовываю сплайны. Сейчас вернулся к мысли о той же задачке. Картинка выглядит вообще-то не очень по-человечески. Бродят в голове такие идеи, что надо бы физику моделировать -- моторику руки, чернила и нажим на лист... Но что-то мне кажется, что это будет слишком сложно. Может у кого-нибудь есть какие-либо идеи, или уже что-то подобное видели -- поделитесь пожалуста. -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: нет Всего: 122 |
А если сосканить текст написанный своей рукой и по нему создать матрицу каждой буквы...
там по идее и будут нажим (точки по краю буквы будут реже)... Или я не в ту сторону размышляю... |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 3 Всего: 538 |
По мне идея хорошая. Для каждой буквы создаем набор "маршрутов" (ты же можешь одну и ту же букву написать несколькими способами). Плюс таблицу какой маршрут после какого может идти. Ну и дальше вносим небольшой шум в маршрут. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: нет Всего: 50 |
Я думаю, в этом случае буквы будут статические, не получится сделать плавный переход от одной буквы к другой при непрерывном письме. Ну и морфинг ограничен. Хотя... Если поверх скана буквы еще контрольные точки задать, и привязать к ним растр... Надо будет подумать... Это сообщение отредактировал(а) Artemios - 21.12.2006, 12:12 -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: нет Всего: 50 |
Над этим я думал, потом пришел к выводу, что все равно, как бы я не написал букву, различные варианты будут между собой топологически подобны -- могу один из другого получить путем гладких искажений. (если, конечно, рука не срывалась и я одну и ту же букву писал одним и тем же набором движений). Поэтому остановился на задании одного маршрута. А шум и соответственно, различные варианты буквы получаю не напрямую случайным образом в заданных пределах меняя координаты контрольных точек, а более хитро: случайным образом подбирая коэффициенты для функции, искажающей 2-мерное пространство. Это не дает далеко "разлететься" близким контрольным точкам (т.к. преобразование пространства -- гладкое непрерывное), но в то же время позволяет сильно изменять взаимное расположение далеких точек. С формой букв вроде бы почти все нормально, я теперь хочу саму линию качественно смоделировать. Я представил здесь в первом посте картинку, но это конвертация в растровое изображение, низкого качества. В оригинале векторная графика. Пока что линия везде одинаковой толщины, везде однородная. Думаю над такой задачей: допустим, уже построен маршрут, который будет представлять текст. То есть предполагаем, что при написании этого текста рука провела бы ручкой по заданному маршруту. А вот как бы выглядела линия в каждой точке маршрута? Сопутствующий вопрос: от чего зависит форма линии в конкретной точке? Попробую перечислить: - скорость движения ручки в данной точке - кривизна маршрута - удаленность от центра/краев листа - направление движения ручки в данной точке - фактура красящего вещества и бумаги А вот как зависит -- для меня остается пока вопросом. Возможно, на начальном этапе подойдет упрощенная модель: представим, что по траектории движется физическая точка, оставляющая за собой след. Ширина следа зависит от скорости точки -- чем медленней движение, тем шире линия. Скорость точки зависит от кривизны траектории -- чем больше кривизна, тем медленней движение. Следовательно, чем больше кривизна -- тем шире линия. А тут пока прервусь: вопрос к физикам, я вообще правильно рассуждаю? (Ручка, например, перьевая) -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: нет Всего: 181 |
Толщина линии зависит еще от силы нажима, который зависит от человека и формы линии, кроме того линия не обязательно образуется движущейся точкой, в случае карандаша или перьевой ручки это может быть и линия.
Потом еще можно добавить разные варианты написания для отдельных букв и букв в начале, конце и середине слова (я например пишу а и о в начале слова против часовой стрелки, а в середине наоборот) Вообще идея интересная, но я думаю будет проще если вместо физически точного моделирования обойтись описанием всех параметров линии, т.е. кроме позиции для каждой контрольной точки еще добавить скажем толщину, нажим (интенсивность цвета), границы для случайного изменения параметров функции, какая функция используется итд. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: нет Всего: 50 |
Значит, все-таки стоит сделать поддержку многовариантности... угу, учту... Как раз мой вопрос и возник из мысли об автоматизации просчета всех этих параметров. С одной стороны, пока я экспериментирую с одним почерком, своим, и набором букв русского алфавита, возможно бы было и проще явно задавать все значения (хотя все равно трудоемко). В более широкой постановке: имитация человеческого письма. Необязательно только на русском, не обязательно только буквы алфавита (формулы, мелкие рисунки "от руки" и т.д.). В общем, в некоторой степени аналог LaTeX-а с "рукописным" выходом. Ну а набором параметров задавать именно общую характеристику письма некоторого человека (как жмет, как руку держит, как перо наклоняет... а может быть, производить обучение системы на отсканированных рукописях...) Глобально, конечно, один врятли осилю (все-таки я не Кнут)), но если бы хоть что-то начало получаться -- можно было б единомышленников искать... -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
KpoHyc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.12.2006 Где: Санкт-Петербург Репутация: нет Всего: 5 |
Крайне интересная задачка скажу я вам...Наверно займусь в отрыве от Вас...факультативно так сказать...
--------------------
AScript + Pascal + C -> C++ ->C#Adobe Photoshop 7.0/CS 2.0 + GIMP+ Visual Studio .NET(sp1)/2005 pro(sp1) |
|||
|
||||
Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: нет Всего: 50 |
![]() Теперь о том, что пока "надумал". Выше я упоминал, что начальный вариант программы строит векторную графику. Только здесь я понимал низкоуровневую графику (конкретно -- gnuplot), а о профессиональном ПО для работы с векторной графикой я как-то не задумывался, и зря. Как выяснилось, все мои вопросы о внешнем виде, форме линии в зависимости от множества параметров (нажим, наклон, фактура поверхностей etc) -- уже разрешены. Статические параметры можно программе указать явно; динамические -- считываются с устройства ввода (скорость, направление -- если рисуем мышью, еще плюс к этому наклон пера и нажим -- если на планшете). Траектория движения кончика пера рассчитывалась еще в первоначальном алгоритме. Осталось: - скорость - наклон пера - нажим на перо А имея расчет всех этих параметров в принципе можно будет организовать виртуальное устройство, эмулирующее ввод с планшета. Либо некий плагин к имеющемуся ПО... Хотя нет, к конкретному ПО лучше не привязываться... Будущая математическая модель (возможная). Имеется горизонтальная плоскость, либо плоскость под небольшим углом. Задана некоторая траектория движения точки в этой плоскости. Под меняющимся углом к этой плоскости -- "стило", конец которого и представляет точку, движущуюся по маршруту. Задана система рычагов (5-8 штук, на шарнирных соединениях), стило жестко связано с этой системой, также система имеет одну абсолютно неподвижную точку. Для каждого соединения заданы степени свободы и коэффициенты сопротивления движениям в различных направлениях. Задано время, за которое движущаяся в плоскости точка должна переместиться из начального положения в конечное. Как мне кажется, всего этого должно быть достаточно для просчета и скоростей, и нажимов, и наклонов. Только самих расчетов будет немеряно, а сначала еще коэффициенты рычажно-шарнирной системы подгонять под конкретную человеческую руку... Добавлено @ 05:30 Как упростить сие можно? -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
Elio |
|
|||
![]() Владелец Профиль Группа: Участник Сообщений: 19 Регистрация: 7.12.2006 Репутация: нет Всего: нет |
Я не програмист но вообщем мне кажеться все немного проще... Я читал статью реалезации такой программы на Делфи, суть была в том, что ты печатал на принтере в рядок 20 клеточек в каждой из них ты писал:" а а а а а а а а", естественно каждая буква немного отличалась от предыдущей, ну так же поступали с со всеми остальными буквами... Суть весьма проста, но как реализовались переходы от букве к букве я уже не помню... Тем не менее мне кажиться что если сделать по 100-200 вариантов написания буквы в полурендомном режиме последующего отбора, то получиться весьма не плохо... Если же и этого будет не достаточно то ручку в руки и сканировать уже не буквы а слоги. Вообщем удачи, если бы я умел я бы смог сделать
![]() ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила раздела "Философия программирования": | |
|
Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО: • вопросы перспективного развития методов написания ПО; • изменяющиеся языки и методологии программирования; Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Философия программирования | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |