Про числа 3d6 предложил тестовую базу MNIST. Там есть таблица результатами разных методов.
http://yann.lecun.com/exdb/mnist/
и в jpg
http://www.cs.toronto.edu/~roweis/data.html
Распознавание рукописного текста
Сообщений 61 страница 90 из 165
Поделиться612009-08-13 16:53:28
Поделиться622009-08-13 18:32:10
то-то из участников форума сможет конструктивно решить описанную суть формально математическую задачу.
а где формально описанная математическая задача?
хотелось бы взглянуть...
Поделиться632009-08-13 23:26:40
Математическая запись постановки задачи для рукописного теста весьма громоздка. Поэтому полуформально рассмотрим лишь задачу о распознавании цифр, о которых писал 3d6.
1. Ищем функцию, которая отображает множество изображений на множество цифр. Т.е. аргумент функции - матрица яркости, а на выходе – число от 0 до 9.
2. Так как ищем функцию, нужно описать для нее область определения. Например, можно воспользоваться формой Бекуса-Науэра для описания допустимых функций. Можно разрешить использовать общепринятые арифметические операции, числа (константы), векторы, матрицы и возможность определения новых функций.
3. Определить матрицы длительностей операций и создать кодировку функций и констант
4. Далее нужно определить критерий, который определяет, чем одна функция лучше другой. Эта функция должна:
4.1 обеспечить максимальную точность соответствия обучающим данным
4.2 максимально надежна
4.3 при вычислении должна использовать минимум вычислительных ресурсов.
Например, формально задача может выглядеть так:
f* = arg min { f in F | norm1(f)*norm2(f)*norm3(f)},
где norm1, norm2, norm3 – соответствующие (положительные!) нормы точности, надежности и ресурсоемкости; F – (бесконечное) множество допустимых формул. Собственно критерием задачи является norm1(f)*norm2(f)*norm3(f), который нужно минимизировать на множестве функций f. Примеры норм:
norm1(f) = 0.2 + 1/m*sum(i in 1..m, (sgn(d(i)-f(img(i)))^2)
где m – количество обучающих изображений; img(i) – i-е изображение (матрица яркости); d(i) – цифра, изображенная на i-м изображении.
norm2(f) = exp(0.025*Len(f)),
где Len(f) – количество бит, необходимых для записи функции f.
norm3(f) = 0.1+1/m*Sum(i in 1..m, max(CPU(f,i)/100000, MEM(f,i)/1000)),
где CPU(f,i) – количество операций, необходимых операций на эталонном компьютере для вычисления функции f для i-го изображения; MEM(f,i) – объем использованной памяти, используемой при вычислении функции f для i-го изображения.
Примерно так, вроде ничего не забыл. Для практических случаев можно выбирать нормы так, чтобы задача нахождения f находилось за конечное (пусть и астрономическое) число шагов. Немного пошевелив мозгами можно понять, как с помощью оценок отсекаются зацикливающиеся вычисления функций. Несколько неочевидно, почему в качестве надежности выбрана суть длина функции f. На бытовом уровне - это суть математическая запись бритвы Оккамы.
Есть интересное свойство функции f*, зависящее от жесткости нормы norm2. Чем жестче норма, тем более вероятно правильное распознавание изображений цифр менее похожих на обучающие изображения. Но при этом увеличивается вероятность ошибки для изображений, похожих на некоторые изображения обучающих изображений. И наоборот. Т.е. эта норма отражает вашу веру в полноту исходного множества изображений, т.е. она является все равно субъективной и отражает уверенность в том, насколько изображения проверочных изображений будут похожи на изображения обучающих.
Постановка задачи распознавания рукописного текста может быть сделана в таком же духе. Однако там есть свои особенности, без учета которых будет полная херня...
Поделиться642009-08-13 23:57:41
Надежность точно не длина функции. Длина больше на сложность похожа. Если функция будет возвращать не одно значение, а распределение вероятностей, то точность можно понимать как максимум этого распределения. То есть высоту всплеска на некотором значении. Если выдает равномерное распределение значит точности никакой. А надежность это то, что сейчас как точность, т.е. попадает ли этот всплекс на правильное значение. Функция может распознавать с высокой точностью, но не правильно.
Поделиться652009-08-14 00:36:07
идея Классификации без учителя очень проста и приходит из типического кластерного анализа
Собственно, первый макет. Про распознавние речи пока нет, речь есть о подготовке изображения для построения пространства признаков для дальнейшей удобной кластеризации.
В основу моего подхода и данного макета положена идея движения.
Человеческое зрение не различает статических предметов. Этот факт проще всего проверить лёжа на диване и глядя на полутоновые тени от люстры на потолке. Если уставиться на любую точку потолка и не двигать глазами в течении секунд десяти - все тени (даже очень контрастные) исчезают - остаётся белый однородный потолок. Стоит чуть двинуть глазом как все тени сразу проявляются.
Поскольку любая перцепция служит только одной цели - координации тела, такое "решение" эволюции видится вполне логичным. Движущемуся телу нет надобности в тех предметах, которые статичны относительно него. Статика и координация - не совместимы.
Поскольку человеческому телу двигаться постоянно нет никакой нужды, у зрительной системы есть механизм для создания псевдо-движения - тремор. Он заключается в том, что глаз постоянно совершает микро-движения, для того чтобы образы предметов "скользили" по сетчатке.
Из всего сказанного я предположил, что распознавать динамические буквы, в частности, выделять в них полезные признаки, может быть легче и эффективнее, чем статические. Ведь в конце концов, движущаяся буква должна координировать движения того, кто на неё смотрит.
Как именно мозг в деталях "двигает буквы" я не знаю, поэтому выдвигаю гипотезы и ставлю эксперименты.
1. Первым предположением было сделать макет, в котором точкам буквы задаются связи между собой, которые скрепляют букву в целостность. После чего букву "ударяем об стену". По разлетевшимся частям буквы пробуем судить что это было.
2. Второй вариант. Выявляем минимально необходимый набор связей, который позволяет сохранить целостность буквы при соударении и делаем его эталоном. После чего пытаемся "натянуть" этот эталон связей на произвольную букву и "стукнуть об стену", если буква разлетелась - значит эта не та буква, по которой "шился" эталон. Так, перебирая все эталоны - находим нужный.
3. Задать для точек разные силы притяжения или отталкивания, чтобы она сама разлеталась без ударов об стену (навеяно книгой Хокинга про чёрные дыры). По полученным более-менее однородным группам выясняем, что это было.
Для проверки третьей гипотезы и был построен данный макет. (Если после данного сообщения меня не забанят, буду проверять и выкладывать остальные )
Кнопкой "Open picture" вызываем диалог открытия изображения (программа "понимает" форматы BMP и JPEG). В архив положено несколько тестовых букв.
Изображение открывается в "пространстве" окна с отрисованной тенью. Открытое изображение можно перемещать мышкой - интерфейс настраивает пользователя на раздумия о пространстве и движении
Кнопкой "Do it" запускается вычислительный процесс, состоящий из таких шагов:
1. Вычисляется средний цвет изображения.
2. Ищется количество точек, которые расположены "выше" и "ниже" среднего цвета.
3. Те точки, которых больше - полагаем точками фона и окрашиваем их в белый цвет, остальные - в чёрный.
4. Каждая чёрная точка - это элементарная целостная однородность изображения буквы. У каждой точки есть свойство - она притягивается к другим точкам с силой в зависимости от расстояния в Эвклидовом пространстве (принцип как у гравитации, но с другим коэффициентом). От стенок - упругое соударение.
Выводы. В данной модели буквы трансформируются в области повышенной плотности. Например, для буквы А (вне зависимости от ориентации, размера, шумов, написания), замечено формирование (в максимальном "разлёте") трёх областей повышенной плотности. Для букв Б и В - четырёх, которые легко обнаруживаются алгоритмически.
Быстро обрабатывать большие изображения на медленных компьютерах программа пока не может. Избавиться от этого планирую в ближайшее время.
Основной целью макета является иллюстрация возможности применения физических моделей для перевода неудобных признаков букв в более удобные.
Данная модель предназначена для раздумий, коментариев, критики по поводу метода, а не для формирования каких-либо окончательных оценок.
Поделиться662009-08-14 01:34:56
функция будет возвращать не одно значение, а распределение вероятностей, то точность можно понимать как максимум этого распределения. То есть высоту всплеска на некотором значении. Если выдает равномерное распределение значит точности никакой. А надежность это то, что сейчас как точность, т.е. попадает ли этот всплекс на правильное значение. Функция может распознавать с высокой точностью, но не правильно.
NO, честно говоря я не понял что Вы написали. Можно подробнее?
Длина – это, конечно, не надежность. Но она может быть мерой надежности. Представим себе, что длина подбираемой функции не ограничена. Тогда можно подобрать такую функцию, которая даст суть абсолютную точность. Т.е. функция в своем теле «запомнит» все обучающие примеры, а «распознавание» сведется суть просто к поиску нужного изображения. Все будет хорошо для обучающих изображений – точность абсолютная. Но стоит только выйти на изображение, которого нет во множестве обучающих изображений – и будет полная хрень. Т.е. надежность распознавания будет никакая.
Теперь ограничим длину функции f. Теперь она не может запомнить все изображения внутри своего определения. В моем представлении, функция должна для наиболее «типовых» изображений найти что-то вроде типовых признаков и уже по ним выдавать код цифры. Прочие изображения, дающие неправильный результат по признакам, «сохранятся» в исходном виде. Если еще более ограничить длину функции f, то абсолютной точности уже достичь нельзя, и поэтому функция будет опираться на наиболее общие признаки, а для некоторой части изображений будет неправильная классификация. Т.е. ограничение длины суть ограничивает прямое запоминание и ведет большей независимости от конкретных изображений, т.е. к большей абстрактности. Т.е. под «надежностью» я имел в виду что-то вроде устойчивости распознавания к изменяемости изображений.
Что касается точности и надежности, то здесь, возможно, есть связь. Точностей у нас две: первая, достигаемая при поиске f* на множестве обучающих изображений. И вторая точность – на множестве тестовых изображений (считается, что тестовые примеры недоступны при поиске f*). Если вы верите в то, что тестовые изображения близки обучающим изображениям, то можно допустить более длинные формулы. Если нет и тестовые изображения существенно отличаются от обучающих, то по вероятности лучший результат дадут более короткие формулы, т.к. они более общи. Но все равно, т.к. на этапе обучения «похожесть» тестовых изображений на обучающие неизвестна, то приходится «гадать» с помощью «меры надежности».
Поделиться672009-08-14 02:12:21
много букв
Поделиться682009-08-14 11:07:41
точность абсолютная
Вы понимаете, что это никому (кроме, возможно, Вас) не нужно? Именно это я имел в виду выше, говоря про 0 и 1. Я Вас давно изучаю и знаю, что от Вас ожидать. Предложите вариант не абсолютной точности, если это не претит Вашей математической дисциплине, а приблизительной точности.
Поделиться692009-08-14 13:05:26
to NO.
Ожидаемый результат.
Как бы то ни было, формальная математическая постановка задачи есть. Egg ее хотел – он ее получил. Насколько хороший результат даст такая постановка – вопрос, конечно, интересный.
to Prosolver.
Объясните, что за 0 и 1 вы имеете в виду. Я не понимаю. Критерий подбора функции – минимум ошибок. Как (и зачем) из него сделать приблизительную точность – для меня загадка. Т.к. вы меня давно изучаете, вам не составит труда объяснить на «понятном мне языке». Будут весьма признателен. Спасибо.
P.S. Но заниматься сканированием рукописных тестов я все равно не буду.
Поделиться702009-08-14 13:28:44
Критерий подбора функции – минимум ошибок
Вот "минимум ошибок" это ведь совсем не "абсолютная точность". А достаточный минимум можно задать очень даже большим, например 40% ошибок может, для начала, считаться хорошим результатом. Ключевой вопрос в том, как конкретно считать ошибку.
0 и 1 - просто удобные примеры абсолютной точности.
Поделиться712009-08-14 13:30:26
mserg:
Точность это кучность.
Надежность - можно ли доверять результатам.
Не-точность это отсутствие внятного результата.
Не-надежность это когда результаты случайные, система работает, но распознавнием не занимается.
Поделиться722009-08-14 16:00:10
to Prosolver
Если посмотреть внимательно, то выше я давал такую меру точности:
1/m*sum(i in 1..m, (sgn(d(i)-f(img(i)))^2)
В обучающем множестве примеров нас 60000 изображений img(i) и соответствующих им цифр d(i). Если некоторая функция f правильно выдает цифру для i-го примера, то выражение d(i)-f(img(i)) принимает значение 0; в противном случае – не 0, а выражение (sgn(d(i)-f(img(i)))^2 принимает значение 1. Т.е. критерий точности, зависящий от вида f, - это ДОЛЯ правильно распознанных цифр. Если все изображение классифицируются правильно, то критерий примет значение 0; если все неправильно – то значение 1; если часть правильно, а часть нет – то значение будет внутри диапазона 0.0...1.0.
Что у Вас вызвало протест в этой мере точности?
to NO.
Вот пример меры точности:
1/m*sum(i in 1..m, (sgn(d(i)-f*(img(i)))^2)
Есть 10000 тестовых примеров (не обучающих, которых 60000). Точность здесь число в интервале 0.0...1.0. И кто тут собственно «кучность», которая, по вашему определению, и есть точность? Без бутылки не разобраться.
Не могу согласиться и с определением, что «надежность – это можно ли доверять результатам». У нас есть множество обучающих примеров (60тыс) и множество тестовых (10тыс). Если цифры обучающих примеров и тестовых примеров были начертаны одним человеком, то, пожалуй, да, можно согласиться с вашим определением. Но если нет – то ваше определение неправильное, т.к. надежность по обучающей выборке оценить невозможно. Например, на момент обучения вы не знаете, будет ли в будущем (в тестовых примерах) писать цифры тот же самый человек или нет. Поэтому Колмогоровская/Арнольдовская мутатень здесь не годится, так как будущее неизвестно и о нем нет информации в обучающих примерах. По сему нужно в некотором смысле указать свою уверенность, насколько тестовые примеры будут похожи на обучающие. Ладно, опять «много букв». Но это нюансы постановки задачи, без учета которых результатом будет полная хрень.
Поделиться732009-08-14 16:27:07
Если мы в программу вкомпилируем видоролик на 700Mb, рассказывающий что она делает, надежность понизится?
Если вместо 60 000 обучающих примеров будет 600 000?
Поделиться742009-08-14 17:01:29
В основу моего подхода и данного макета положена идея движения.
краем глаза посмотрел... подход - адекватный и перспективный,
постараюсь найти время и подробно посмотреть макет...
я "смотрел" это "направление" довольно давно, но там есть интересные решения...
у меня была такая модель: фокус движется по линии слова (для русского слева-направо)...
фокус обладает массой, скорость движения зависит от того, насколько прямой участок,
при этом симулируются инерционные процессы, связанные с "разгоном"/"торможением" фокуса...
все это любопытно и очень любопытно...
Поделиться752009-08-14 22:37:24
Если мы в программу вкомпилируем видоролик на 700Mb, рассказывающий что она делает, надежность понизится?
Если вместо 60 000 обучающих примеров будет 600 000?
Я смогу ответить, если Вы сделаете пояснение. Если на обучающих примерах процент правильного распознавания 99.5%, а на тестовых 12%, то кто здесь «результат», «надежность» и «доверие к результатам»?
И еще, про «кучность» не ответили, а так хочется узнать!
Поделиться762009-08-14 23:13:48
Кучность это при стрельбе. Не важно куда оно бьет, но если кучно можно подрегулировать прицел и будет стрелять хорошо. А если разброс большой то регулируй не регулируй разброс останется. Ствол может быть кривой, но хороший. А может быть идеально прямой, но не по калибру, у такого кучности нет, большой разброс.
Распределение это когда выдается не одно значение без никакой оценки, а все возможные значения и рядом с каждым указан вес или вероятность:: A:5%, Б:3%, В:50%,...Я:15%
Если после распознавания стоит сверка со словарем, то лучше так, чтобы выбрать какие варианты проверить. Значение просто "Б" означало бы Б:100%. Не хорошо если внутри было Б:10%, а на выходе "Б".
Если ты продаешь босоножки то там гланое этикетка: "Задание было поставлено суть математически и суть решено алгоритмически!", а если пишешь такого рода софт, то нужны все детали.
Поделиться772009-08-15 00:27:29
все это любопытно и очень любопытно...
Согласен.
Предыдущий макет практически может быть применим для работы как с единичными буквами, так и с текстом в целом (например для выделения отдельных слов - как целостностей). Но с учётом того, что он работает с отдельными точками изображения, скорость вычислений на обычных десктопах недопустимо мала. Следующий макет показывает, как можно уменьшить общее число отдельных однородностей изображения.
Элементарной однородностью растрового изображения является точка - квадратик. Было бы очень удобно, если бы изображение представляло собой что-то вроде плотно упакованных кружков в сотовые структуры. Таких графических форматов и мониторов, к сожалению не производят, но ничто не мешает работать с более крупными однородными прямоугольными областями, вместо отдельных точек.
После открытия изображения и нажатия на кнопку "Test" макет выполняет следующий рекурсивный алгоритм для разбиения изображения на прямоугольники:
1. На вход рекурсивной процедуры подаются координаты прямоугольника (при инициализации подаются координаты прямоугольника всего изображения с уже разделёнными цветами на строго чёрный и белый (см. предыдущий макет)).
2. Вычисляется средний цвет для этого прямоугольника.
3. Если средний цвет белый - выходим из процедуры.
4. Если средний цвет черный - прямоугольник закрашивается случайным цветом (для наглядного теста) и выходим из процедуры.
5. Если средний цвет не чёрный и не белый, то делим прямоугольник пополам и каждую половину отправляем на рекурсию т.е. на шаг №1 (нечётные шаги рекурсии разбивают входной прямоугольник пополам по вертикали, чётные - по горизонтали).
В результате крупные однородные участки изображения (в частности буквы) выделяются в отдельные большие прямоугольники, изгибы и точки - апроксимируются более мелкими прямоугольниками. Особенно хорошо это видно на огромных изображениях. После выполнения алгоритма в заголовке окна высвечивается 3 числа: количество точек - количество прямоугольников - количество прямоугольников с площадью 1 пиксел. Выигрыш в количестве отдельных однородностей, в сравнении с точечным представлением, приблизительно 1 порядок.
В качестве дальнейшего экперимента планирую совместить макет 1 и макет 2, чтобы взаимодействовали не отдельные точки, а отдельные прямоугольники.
Предыдущий макет показал занятный способ избавления от шума. Мелкие точки - "лёгкие", поэтому "прилипают" к массивной букве. Второй макет даёт возможность другим способом избавиться от шума. На каждом изображении после применения приведённого алгоритма получается разброс между размерами самого крупного и самого мелкого прямоугольника. Если пронормировать размер прямоугольников по самому крупному, то можно просто игнорировать прямоугольники, размер которых меньше некоторого порогового значения.
P.S. В первом макете случайно забыл вытереть остатки некоторых экспериментов, поэтому каждая точка при запуске модели инициализировалась небольшим случайным ускорением, поэтому абсолютно симметричные изображения разлетались чуть не симметрично (уже всё поправил). В целом на результаты работы модели эта помарка существенно не влияет.
Отредактировано Prosolver (2009-08-15 01:31:50)
Поделиться782009-08-15 13:11:48
to NO. Чтобы не потерять нить обсуждения, кратко опишу его ход. Я предложил математическое описание задачи распознавания цифр. При этом было предложено использование меры точности и меры надежности. Видимо у Вас свое представление о точности и надежности (теоретико-вероятностное), которое не совпадает с моими «мерами». Чтобы разрешить этот вопрос от Вас всего-то нужно:
1. Конкретную формулу или словесное описание вычисления НАДЕЖНОСТИ для задачи распознавания цифр. Для вычисления есть d(i) – изображенные цифры (это числа от 0 до 9) и e(i) – то, что распознавалось (тоже число от 0 до 9).
2. Конкретную формулу или словесное описание вычисления ТОЧНОСТИ для задачи распознавания цифр. Только не нужно отвечать про стрельбу и другие задачи.
3. И ответ на вопрос, «можно ли применять ваши определения точности и надежности только на тестовых данных, но и для обучения?»
После того как Вы ответите, можно будет сделать следующее
* Ответить на вопрос, отвечает ли ваше определение точности/надежности условиям “TEST ERROR RATE” в MNIST.
* Ответить на вопросы про видеоролик и количество обучающих примеров
* Если ответ на вопрос 3 «да», то оценить, каков будет результат обучения с помощью вашей точности/надежности
Ответы будут совсем не такими, как Вам сейчас кажется. И прояснится вопрос, почему мои меры точности/надежности имеют тот вид, который я описал (как вам сейчас кажется, неработоспособный).
Поделиться792009-08-15 15:48:40
mserg:
Для начала достаточно одной оценки качества, процента верно распознанных символов. Ты зачем-то попробовал ее разделить на две, по-моему не удачно, я предложил другие варианты, ты их не понимаешь. Если уж приспичило сделать побольше множителей в формуле с agrmax, нужна брать побольше данных, из одной величины получить две независимые ты все равно не сможешь. Я предложил результатом распознавания считать "распределение", см. теорвер.
Словарь русского языка, учебники математического анализа и теории вероятностей ты можешь найти в библиотеке, я их здесь зачитывать не буду. Выходишь на улицу, спрашиваешь прохожих "Как пройти в библиотеку?".
Поделиться802009-08-15 18:41:35
Да все я понял. И хамить я тоже умею. Есть два множества в задаче:
* Обучающие примеры (60 тыс)
* Тестовые примеры (10 тыс)
На обучающем множестве нужно найти функцию, а на тестовом множестве нужно проверить результат. Используем критерий для поиска функции такой, какой ты и хочешь – только процент распознанных цифр. Оптимальных функций, которые дадут на обучающих примерах 100% будет бесконечно. Например, функция может запомнить все обучающие примеры. А каков же результат для таких 100%-ых функций на ТЕСТОВЫХ примерах? Он будет колебаться в районе 10%. Ну не работает твой гребанный критерий... Не уж то не ясно? Произвольная функция - это ж тебе не какая-нибудь нейросеть, которая ограничена в объеме запоминания. Можешь ли ты понять это своим обезьяним мозгом?
То же самое с распределением цифр. Оно равномерно. Зачем в задаче о цифрах трындеть об использовании русского словаря? Если бы я привел постановку задачи о распознавании рукописного текста, тогда бы другое дело. Приплел еще тут стрельбу...
Ладно, пиши еще свою чушь. Против тебя ничего не имею, просто общаюсь с тобой на привычном для тебя языке.
Поделиться812009-08-15 20:08:54
Я эти 10% могу вообще без распознавания сделать, просто выдавать всегда букву "Е".
Поделиться822009-08-15 22:09:51
Молодец. Хотя нет такой десятичной цифры. Не забудь принять лекарства.
Как я вижу, здесь такой же балаган, как и везде. В задницу ваш форум.
Поделиться832009-08-15 22:35:05
Вот думаю вместо словаря нужно просто базу текстов, пусть сделает себе словарь как хочет. Какую-нибудь библиотеку мировой литературы.
Пока не придумалось как искать попорченные слова, с ошибками или где не хватает букв. В рукописи букв скорее не будет чем будут лишние. Порядок букв соблюдается, но некоторые могут выпадать, как бы побыстрее найти весь список соответствующих слов. Примерно как Яндекс, только не по словам искать текст, а по буквам слово.
Поделиться842009-08-15 23:44:24
вместо словаря нужно просто базу текстов, пусть сделает себе словарь как хочет
Обязательно. Но не вместо, а в дополнение. Такая база должна дать частоту совместного использования слов в одном контексте. Типа, после слова "Ленин" слово "жив" встречается с вероятностью 12%, а слово "жир" с вероятностью 0,1% (к примеру).
Следующий макет является суперпозицией двух предыдущих макетов с такими отличиями.
1. Взаимодействие по типу "гравитации" осуществляется между крупными элементами буквы, а не между отдельными точками, как это было в первом макете. Крупные элементы буквы выделяются одним из двух рекурсивных алгоритмов, на выбор. Если галочка "Square" отмечена, то рекурсивный алгоритм разбивает букву строго на квадраты, если галочка снята - на прямоугольники.
Квадраты хороши тем, что они симметричны (но их всегда получается больше, чем прямоугольников). Прямоугольники хороши тем, что их всегда получается меньше, чем квадратов (но они не симметричны). Принципиальной разницы в динамике для обоих вариантов разбиения не обнаружено, кроме того, что модель работает, конечно, значительно быстрее, чем раньше и позволяет обрабатывать крупные буквы.
2. После запуска модели кнопкой "Do it" в заголовке окна отображается общее количество выделенных (и взаимодействующих) элементов буквы.
3. Каждый выделенный прямоугольный элемент буквы имеет свой случайный цвет - так легче наблюдать.
4. Взаимодействия со стенками выключено.
5. Кнопка "Reload" позволяет перезагрузить выбранный рисунок без вызова диалога открытия файла (просто для удобства).
Любопытно. Если нажать кнопку "Do it" и позволить модели развиться, потом нажать кнопку "Stop", а далее опять нажать кнопку "Do it", то алгоритм начнёт обрабатывать существующее на экране изображение, как исходное. Таким образом сама плоскость изображения задаёт (и отображает) входные данные для итерационного алгоритма и их результат. Т.е. иллюстрирует своего рода рекуррентный метаалгоритм.
Эти три макета призваны показать принцип. Свою задачу они, на мой взгляд, выполнили. Хотелось бы обсудить и перейти к чему-то более интересному и конкретному.
Отредактировано Prosolver (2009-08-15 23:56:57)
Поделиться852009-08-16 00:16:11
0%
Чего-то летает. Я фотографии попробовал. Хорошо бы рисовать прямо на картинке.
Отредактировано NO (2009-08-16 00:17:15)
Поделиться862009-08-16 01:19:20
Хорошо бы рисовать прямо на картинке
Эксклюзив для NO - теперь левой кнопкой мыши можно рисовать, а правой - таскать изображение.
Чего-то летает
Летает - это ерунда, взаимо-действует! Вот в чём сила.
Поделиться872009-08-16 01:54:43
Так удобнее. Еще бы чистый лист в начале, чтобы рисовать буквы и они бы распознавались.
Поделиться882009-08-16 02:06:38
Еще бы чистый лист в начале, чтобы рисовать буквы
Стараюсь избегать лишних кнопок. Просто сделай чистый белый битмап (например, empty.bmp) и открывай его для рисования. Если нужно почистить - жми "Reload".
и они бы распознавались
Зависит от качества координации.
Поделиться892009-08-16 02:15:24
Похоже еще конь не валялся.
А задача интересная, наверно даже можно сделать чтобы компьютер читал лучше человека.
Поделиться902009-08-16 12:03:27
Немного подправил предыдущий макет. Добавил галочки для включения/выключения цвета, стенок и притяжения. Если галочка "Gravity" отмечена - элементы изображения притягиваются, если снята - отталкиваются.