Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Я знаком с библиотекой OpenCv, но хотелось бы найти более простые алгоритмы. Приведу здесь свои идеи. Прошу извинить за ошибочное использование терминов.
Детектор точки. Начнем с простой задачи распознавания одной белой точки на черном фоне. Для распознавания потребуется детектор с 9-ю входами, организованными в матрицу 3*3. Будем двигать матрицу слева направо и сверху вниз.Центр матрицы (якорь) совмещается с тестируемым пикселем картинки. На выходе детектора должна появиться единица только в том случае, когда якорь попадает на белую точку, окруженную 8-ю черными точками. Таким образом, детектор реализует функцию 8+1НЕ-ИЛИ-НЕ для 9 входов по числу точек, вход якоря инвертируется. Здесь 8+1НЕ означает 8 прямых входов и 1 с инверсией, ИЛИ-НЕ -функцию ИЛИ с инверсией выхода. Аналогичную функцию выполняет элемент 8НЕ+1-И. В результате можно определить факт наличия белой точки на картинке, факт наличия нескольких точек и определить их количество, а также определить их координаты, с помощью дешифрации порядкового номера детектора в координаты на плоскости. Данную функцию можно реализовать аппаратно, одновременно для всех точек изображения. Для этого потребуется матрица из N*M детекторов с 9-ю входами, где N*M- размеры картинки в пикселях. Быстродействие матрицы детекторов точек определяется быстродействием одного детектора матрицы. Литература Как мы видим то, что мы видим В.Демидов. -- - можно взять за основу функции, реализованные в OpenCv Задачу обработки изображения и выделения контура в одну точку можно решить с помощью OpenCv. Остается нерешеным вопрос распознавания изображения при изменениии его размера и повороте его на произвольный угол. Распознавание изображений при изменении их размера или расстояния до них можно решить с помощью нормализации всех шаблонных изображений. Например, все изображения на экране монитора вписываются в его прямоугольную рамку. Берем окружность, приводим к единичному радиусу, вписываем ее в квадрат с размером ребра немного больше 1 и получаем шаблон окружности для распознавания этой фигуры любого размера. Могу предположить, что человеческий мозг решает вторую задачу достаточно просто. Согласно исследованиям в нейропсихологии зрительный отдел коры головного мога содержит столбики нейронов, дающих реакцию на линию наклоненную под опр. углом. Такие пакеты идут с шагом несколько градусов. Могу предположить, что данные пакеты подсчитывают суммарную энергию сигнала от линий всего изображения, а потом головной мозг поворачивает все изображение на нужный угол. Приведу такой пример, ромб автоматически повернется на угол 45градусов и станет квадратиком. |
Сообщ.
#2
,
|
|
|
Цитата webcoder88 @ Даже если вписать в квадратик, то сильно-сильно не всякий ромб при повороте станет квадратиком. Приведу такой пример, ромб автоматически повернется на угол 45градусов и станет квадратиком. |
Сообщ.
#3
,
|
|
|
Нейроны для нахождения белой точки на черном фоне? Зачем такие сложности?
Приведенная задача решается намного легче. Транскодируй картинку v BMP формат И проанqализируй все байты файла. Нужно найти три троики (FFFFFF, FFFFFF, FFFFFF) (FFFFFF, 000000, FFFFFF) (FFFFFF, FFFFFF, FFFFFF) nаходяшхиеся на расстояниi (ширина картинки минус 2). |
Сообщ.
#4
,
|
|
|
Я уверен, что детектор точки написать Вы сможете. Чего Вы не сможете - так это описать алгоритм является ли эта точка информативной, либо является СПАМом.
Этот алгоритм - фундамент решения задачи. Если Вы собираетесь изображение "молотить" без этой фильтрации, то это будет задача, аналогичная брутфорсу криптографически закрытой информации с неизвестным алгоритмом на неизвестном языке, то есть, нерешаемая в течении длительности жизни конкретного человеческого организма. Поэтому, после алгоритма фильтрации СПАМа, останется очень мало точек, которые нужно анализировать на предмет ромбиков и прочих паттернов, которые Вы набъете в свой словарик паттернов. Для того, чтобы их туда набить, нужно определиться какого типа информацию мы собираемся извлекать и как она может меняться. Когда обе задачи будут решены, можно будет вернуться к теме ИИ. Пока это бессмысленно. |
Сообщ.
#5
,
|
|
|
Цитата Таким образом, детектор реализует функцию 8+1НЕ-ИЛИ-НЕ для 9 входов по числу точек, вход якоря инвертируется. Я имел ввиду аппаратную реализацию матричного распознавателя. Суть заключается в разделении задачи на 2 этапа: -подготовка изображения двухцветной матрицы; -аппаратное (или программное) распознавание. Первый этап - создание ч/б контрастной картинки, выделение контура, восстановление частей контура реализуется библиотекой фун-й ОренЦв. Данный метод подойдет для зрения конвейерного робота с ограниченным набором объектов: гайки, ключи, винты и тд. Согласен про ромб. Те же проблемы с прямоугольником. Еще больше проблем с треугольником произвольной формы. Если предположить, что зрительные отделы мозга автоматически создают набор картинок объекта, повернутого под разными углами в гориз и вертикальной плоскости. Допустим возьмем прямоугольник с длинными горизонтальными ребрами и начнем медленно поворачивать влево-вправо вокруг вертикальной оси(крайнее левое ребро или центр). Рано или поздно прямоугольник станет квадратом, тк длина проекций гор-х ребер станет равна длине исходных вертикальным ребрам. Аналогично для вращения вверх-вниз вокруг горизонтальной оси. Расширим теперь до автовращения вокруг 8 осей. Каждый кадр сравнивается с шаблоном. Теперь возьмем произвольный треугольник, поставить на основание, и начнем вращать вокруг вертикальной оси. Теперь добавим деформер изображения. Для примера нанесем рисунок на воздушный шарик и начнем растягивать изображение в случ. направлениях. Что-то обязательно совпадет с шаблоном похожего объекта. Зрение конвейерного робота или зенитного оружия. Добавлено Принцип детектора точки можно расширить до детектора произвольного объекта. Детектор прямоугольника, окружности, буквы или любого контурного объекта аналогичен детектору точки. Т.е. достаточно создать детектор объекта для его распознавания целиком (как это делает детектор точки). Например, детектор окружности увидит окружность, детектор конкретного прямоугольника - прямоугольник и тд, тк на выходе всего детектора появися единичный сигнал. Требуется точное соответствие точек. |
Сообщ.
#6
,
|
|
|
Вы неверно мыслите, векторными моделями. В то время как робот имеет только пиксельную картинку.
Поэтому может оперировать только пиксельными картинками. Все понятия прямоугольников нужно переписывать в терминах пиксельных алгоритмов, то есть, некий контур, который замкнут, и который подразумевает определенные соседние состояния своих контуров (так как контуры линейны только в случае, если ребро совпало с линией пикселей. Плюс точность оптического сенсора. То есть, например, робот должен повернуть квадратный объект так, чтобы пиксели были выровнены по вертикали и горизонтали, создавая ровный пиксельный объект, при этом меняя фокусное расстояние и глубину. Осталось только подождать несколько тысяч лет, пока робот научится вертеть квадрат в нужном направлении, чтобы получить первое распознавание. Задача распознавания быстро летящих целей не является напрямую ИИ, только ИС. Задача ИИ - это запуск перехвата/уничтожения летящей цели при пересечении строго определенных границ. |
Сообщ.
#7
,
|
|
|
Ну, вообще-то можно обвести контуры и получить векторное изображение. Это как раз не сильно сложная задача.
|
Сообщ.
#8
,
|
|
|
Под детектором я имел в виду матрицу объекта для сравнения. Обычно все матрицы набора имеют одинаковый размер как в системах распознавания букв. Попрбуйте перенести этот принцип на объект с произвольным контуром. Буква O - это почти окружность. Пририсуйте к букве П горизонтальную черту и получите прямоугольник. А почему трудно представить распознавание шрифта, где буквы похожи на домики, машины, окружности, самолетики, танки, ключи или гайки?
Добавлено Не могу понять, зачем там векторное сравнение? Матрицы на втором этапе можно заменить нейронными сетями. Поворот объекта тоже не сложно. Цвет линий опр-ся по исходной картинке, совпадение при повороде дает параметр похоже с вероятностью N ил после поворота на 10гр и вся эта информация виде вектора параметров передается в сист. распознавания. У вас стоит блок Господа Бога? Добавлено Надо снимать такой блок и только потом замахиваться на замыслы творца. |
Сообщ.
#9
,
|
|
|
Цитата webcoder88 @ Обычно все матрицы набора имеют одинаковый размер как в системах распознавания букв. Это одна из причин почему, несмотря на давнее создание прог типа FineReader, каптча по-прежнему рулит и причин, по которым она перестанет рулить, пока не ожидается. Цитата webcoder88 @ Попрбуйте перенести этот принцип на объект с произвольным контуром. Буква O - это почти окружность. Пририсуйте к букве П горизонтальную черту и получите прямоугольник. Вы меня не услышали. Окружность - это векторный объект. Прямоугольник - это векторный объект. В пиксельной матрице их нет. За исключением вырожденных случаев, встречающихся с вероятностью, которую утомительно прописывать из-за большого количества нулей. Цитата webcoder88 @ Добавлено Не могу понять, зачем там векторное сравнение? Матрицы на втором этапе можно заменить нейронными сетями. Можно сделать все, что угодно, но если не будет пиксельных алгоритмов, этой нейронной сети нечего будет "кушать". Цитата webcoder88 @ Поворот объекта тоже не сложно. Цвет линий опр-ся по исходной картинке, совпадение при повороде дает параметр похоже с вероятностью N ил после поворота на 10гр и вся эта информация виде вектора параметров передается в сист. распознавания. То есть, моя идея о поворотах объекта, его повторного считывания, и повторного распознавания Вам понравилась? Какие прогнозы? Сколько миллионов раз нужно будет повертеть объект в пространстве, опикселевать, загрузить, прогнать через миллиарды паттернов, чтобы в конце (на основании статистики? да, что-то более серьезное ожидать пока не приходится) отсеять ложные распознавания, и вернуться к однозначной идентификации изучаемого объекта? Может, все-таки заняться пиксельными алгоритмами? Добавлено Цитата amk @ Ну, вообще-то можно обвести контуры и получить векторное изображение. Это как раз не сильно сложная задача. Важно не контуры получить, а перегнать эти контуры (однозначно идентифицировать) как векторный объект. Потому что и Вы тоже считаете, что БД паттернов должна быть в векторной форме. Да, можно усложнить систему, и ввести отдельный layer, middleware, который будет перегонять пиксели в векторы, потом уже передавая в БД паттернов векторных сравнений. Проблема, на самом деле, та же, что и в криптографии - любой файл просто криптуется любым алгоритмом, но сложно расшифровывается. Тут, у графических объектов, та же проблема - любой векторный объект легко превратить в пиксельный, но преобразование пиксельного объекта в векторный сложно. И пока эта задача не будет решена, никакой ИИ для данной задачи создать невозможно. Имеется ввиду ИИ, который будет работать быстрее, чем человек "с листа" сможет векторно нарисовать тот же объект, представленный в пикселях. Ну, или "на пальцах", допустим, что FineReader не ИИ, а ИС, и требует каждое распознавание подтверждать человеческим approve. Берем стандартный А4, среднестатистическое заполнение текстом 65 строк по 45 символов, итого 2925 символов. По полсекунде на approve - итого, рассматривая алгоритм "мгновенным" (0 секунд), потребуется 48,75 минут. За это время на клаве "с листа" этот текст будет набит человеком, умеющим долбать по клаве, и даже не один раз. То есть, такой ИИ даром не нужен. Без него проще. |
Сообщ.
#10
,
|
|
|
Цитата p1qb0d @ С чего бы это вдруг? Я вообще с паттернами не стал бы связываться, а использовал бы предвычисленные сигнатуры.Потому что и Вы тоже считаете, что БД паттернов должна быть в векторной форме. Цитата p1qb0d @ Любая задача сложна, пока не знаешь, как её решать. Эта вполне решаема. И алгоритм её решения работает достаточно быстролюбой векторный объект легко превратить в пиксельный, но преобразование пиксельного объекта в векторный сложно. Цитата p1qb0d @ Можно ограничиться подтверждением тех символов, которые распознаны недостаточно надёжно. Время распознавания сразу уменьшится на порядки.допустим, что FineReader не ИИ, а ИС, и требует каждое распознавание подтверждать человеческим approve. Цитата p1qb0d @ За это время на клаве "с листа" этот текст будет набит человеком, умеющим долбать по клаве, и даже не один раз. Человек, кстати, как раз похоже определяет контуры. |
Сообщ.
#11
,
|
|
|
Цитата amk @ Можно ограничиться подтверждением тех символов, которые распознаны недостаточно надёжно. Время распознавания сразу уменьшится на порядки. В начале двух-тысячных мой отец создавал цифровую программу передач. В то время ещё не было интернет-телевиденья. И тем более найти программу передач в цифровой форме было нельзя. Бралась газета с напечатанным на бумаге расписанием телепередачь и переводилось в цифровую форму, в то время называли электронной программой телепередач. Так вот набирать программу в ручную можно было это занимало 30-50 минут. FineReader - тогда был неидеальным. Не то что последнии версии. Сканирование и распознавание занимало 10-15 минут. Так вот FineReader предлагал проверить те буквы, над распознаванием которых он сомневался. А сомневался он в 25% случаев, каждая четвёртая буква. Что касается вектор-пиксель. То спор не принципиален. 1) Перевод в вектор это способ ускорить обработку. Путём уменьшения информации. А перевод в вектор достаточно быстрая задача. 2) Побочным эффектом вектоаризации является отброс лишней информации, создающей ошибки. Лишняя информация создаёт интертность не довая отличить один класс от другого. После для растровых картинок тоже нашли алгоритм. Назвали алгоритм опорных векторов. Суть в том что-бы из шаблонов букв выбрать те пиксели, которые максимально отличат одни буквы от других. А те пиксели которые есть у всех букв, те не использовать в распознавании. Правда такое возможно для небольших картинок. В виду больших вычислительных запросов. Добавлено Цитата p1qb0d @ Может, все-таки заняться пиксельными алгоритмами? То что вы описали это давно изучено и не интересно. А вот алгоритмы "следующего порядка": На картинках представлена визуализация работы алгоритма гугловского ИИ по распознаванию картинок. Так думает компьютер. http://scisne.net/a-1713 Особенно мне нравится собачий всадник. |
Сообщ.
#12
,
|
|
|
Цитата amk @ С чего бы это вдруг? Я вообще с паттернами не стал бы связываться, а использовал бы предвычисленные сигнатуры. Выбор алгоритма не принципиален. Избежать шага индуктивного вывода (из частного хлама пикселей, либо хлама векторов, выделить общий класс объектов) Вы не сможете. И это главный времяпожирающий алгоритм. И чем больше БД, тем медленнее он будет работать. А при маленькой БД он будет эффективен, но "узколобый". Но в частных решениях, типа определения быстролетящих целей, вполне себе работоспособен. Кстати, Вы не знаете зачем сейчас муссируется тема Big Data? Ответ очевиден. Ищется алгоритм фильтрации СПАМа. Причем, нахаляву, так сказать. В темную. Цитата amk @ Любая задача сложна, пока не знаешь, как её решать. Эта вполне решаема. И алгоритм её решения работает достаточно быстро Дело не в отсутствии решения, а в ненужности, так как оно (решение) создает тормоза. Не нужно перегонять все в векторы, так как все эти векторы могут быть неинтересны, и просто отфильтруются как СПАМ. Это все равно, как увеличение счетчика на 2000000 из команды ADD превратить в цикл из 2000000 единичных INC. Работать будет в 2000000 раз медленнее, а результат вообще не нужен. Цитата amk @ Можно ограничиться подтверждением тех символов, которые распознаны недостаточно надёжно. Время распознавания сразу уменьшится на порядки. Это давно никому не нужно, так как любой естественный язык обладает избыточностью, позволяющей в случае утраты нескольких символов вообще не терять информации, заложенной в тексте. FineReader до сих пор косячит в единичных случаях, это неприятно, но приемлемо, так как информация не теряется. Поэтому эти алгоритмы уже "экономически нецелесообразно" совершенствовать. Цитата amk @ Человек, кстати, как раз похоже определяет контуры. Человек, в первую очередь, очень эффективно отфильтровывает 99% СПАМа. ИИ до этого, как до Китая пешком. |
Сообщ.
#13
,
|
|
|
Цитата Pavia @ Что касается вектор-пиксель. То спор не принципиален. Это не так. Первичную инфу система получает в виде пиксельной матрицы. Это единственная "объективная реальность" для ИИ. И подмена другой реальностью уже потенциально ведет к "неадекватности". Цитата Pavia @ 1) Перевод в вектор это способ ускорить обработку. Путём уменьшения информации. А перевод в вектор достаточно быстрая задача. Верно, но этот алгоритм не является lossless. И в этом заключается его фундаментальная бажность. Фильтрация должна быть lossless. А это значит, что, несмотря на любую организацию знаний, на определенном этапе все будет выкинуто (отфильтровано), и все вернется к первоисточнику, то есть, пикселям. Которые должны остаться неизменны. Так зачем от них куда-то отходить? Цитата Pavia @ 2) Побочным эффектом вектоаризации является отброс лишней информации, создающей ошибки. Лишняя информация создаёт интертность не довая отличить один класс от другого. В этом утверждении смешаны одновременно и указание на потерю информации, и одновременно на недостаточную эффективность фильтрации. Верно подмечено, только для меня это означает оценку (-) для векторных алгоритмов, а для Вас она по-прежнему (+). Цитата Pavia @ После для растровых картинок тоже нашли алгоритм. Назвали алгоритм опорных векторов. Суть в том что-бы из шаблонов букв выбрать те пиксели, которые максимально отличат одни буквы от других. А те пиксели которые есть у всех букв, те не использовать в распознавании. Попытка уменьшить размер БД для приемлемого времени отклика системы. В частных случаях это работает. Но не интересно. Цитата Pavia @ Правда такое возможно для небольших картинок. В виду больших вычислительных запросов. Big Data найдет решение. Цитата Pavia @ Добавлено То что вы описали это давно изучено и не интересно. А вот алгоритмы "следующего порядка": На картинках представлена визуализация работы алгоритма гугловского ИИ по распознаванию картинок. Так думает компьютер. http://scisne.net/a-1713 Особенно мне нравится собачий всадник. Художественность - это когда неадекватности дается оценка (+). Может, для кого-то это интересно. Для меня искажение объективной реальности является очевидной патологией и оценивается только как (-). Но они уже подходят к проблеме фильтрации. Может, даже скоро начнут писать алгоритм. Имеется в виду "адекватный" алгоритм. |
Сообщ.
#14
,
|
|
|
Цитата Pavia @ Ещё до появления FineReader'а существовали распознавалки с заметно лучшими характеристиками, чем ты описал. Неужели fineReader был так плохТак вот набирать программу в ручную можно было это занимало 30-50 минут. FineReader - тогда был неидеальным. Не то что последнии версии. Сканирование и распознавание занимало 10-15 минут. Так вот FineReader предлагал проверить те буквы, над распознаванием которых он сомневался. А сомневался он в 25% случаев, каждая четвёртая буква. Цитата Pavia @ Этот метод был известен задолго до появления программ распознавания вообще.После для растровых картинок тоже нашли алгоритм. Назвали алгоритм опорных векторов. Суть в том что-бы из шаблонов букв выбрать те пиксели, которые максимально отличат одни буквы от других. Цитата p1qb0d @ А если мне удастся до этого шага исклюяить из рассмотрения заведомо неподходящие образцы БД?Выбор алгоритма не принципиален. Избежать шага индуктивного вывода (из частного хлама пикселей, либо хлама векторов, выделить общий класс объектов) Вы не сможете. И это главный времяпожирающий алгоритм. И чем больше БД, тем медленнее он будет работать. А при маленькой БД он будет эффективен, но "узколобый". Но в частных решениях, типа определения быстролетящих целей, вполне себе работоспособен. Цитата p1qb0d @ Зато переведя контур в векторную форму, я могу написать быстрый алгоритм, инвариантный к размеру и углу поворота знака.Дело не в отсутствии решения, а в ненужности, так как оно (решение) создает тормоза. Не нужно перегонять все в векторы, так как все эти векторы могут быть неинтересны, и просто отфильтруются как СПАМ. Это все равно, как увеличение счетчика на 2000000 из команды ADD превратить в цикл из 2000000 единичных INC. Работать будет в 2000000 раз медленнее, а результат вообще не нужен. Цитата p1qb0d @ Тогда ИИ действительно невозможен. Его экономически невыгодно создавать.Это давно никому не нужно, так как любой естественный язык обладает избыточностью, позволяющей в случае утраты нескольких символов вообще не терять информации, заложенной в тексте. FineReader до сих пор косячит в единичных случаях, это неприятно, но приемлемо, так как информация не теряется. Поэтому эти алгоритмы уже "экономически нецелесообразно" совершенствовать. Цитата p1qb0d @ Чтобы отфильтровать СПАМ, надо его сперва классифицировать как СПАМ. То есть для этого его научиться распознавать.Человек, в первую очередь, очень эффективно отфильтровывает 99% СПАМа. ИИ до этого, как до Китая пешком. Цитата p1qb0d @ Распознавание символов - это отход от пиксельной матрицы. Так и скажи: распознавание символов неадекватно.Это не так. Первичную инфу система получает в виде пиксельной матрицы. Это единственная "объективная реальность" для ИИ. И подмена другой реальностью уже потенциально ведет к "неадекватности". Цитата p1qb0d @ Фильтрация, к твоему сведению, это всегда потери. Ты можешь фильтрацией увеличить отношение сигнал/шум, но часть сигнала ты в любом случае потеряешь.Верно, но этот алгоритм не является lossless. И в этом заключается его фундаментальная бажность. Фильтрация должна быть lossless. А это значит, что, несмотря на любую организацию знаний, на определенном этапе все будет выкинуто (отфильтровано), и все вернется к первоисточнику, то есть, пикселям. Которые должны остаться неизменны. Так зачем от них куда-то отходить? Цитата p1qb0d @ Ты просто не понимаешь, что такое фильтрация.В этом утверждении смешаны одновременно и указание на потерю информации, и одновременно на недостаточную эффективность фильтрации. Верно подмечено, только для меня это означает оценку (-) для векторных алгоритмов, а для Вас она по-прежнему (+). Цитата p1qb0d @ Полный перебор - наш выбор. Быстрые алгоритмы нас не интересуют. Попытка уменьшить размер БД для приемлемого времени отклика системы. В частных случаях это работает. Но не интересно. |
Сообщ.
#15
,
|
|
|
Цитата p1qb0d @ Это не так. Первичную инфу система получает в виде пиксельной матрицы. Это единственная "объективная реальность" для ИИ. И подмена другой реальностью уже потенциально ведет к "неадекватности". Вспоминаю старый американский фильм. Судят человека, за убийства. В качестве доказательства невиновности приводиться снимок на котором он запечатлён в другом месте. Но рисунок тёмный. Тогда судья вызывает эксперта по компьютерной графике(в ту эпоху это было в диковинку) Так вот он говорит мы взяли компьютер обработали изображение, улучшили его. И встаёт вопрос является ли этот снимок доказательством является он реальным или это уже другая реальность? На что эксперт отвечает что это тот же самый рисунок, просто темные пиксели сделали более тёмными а светлые более светлыми. Узнали это алгоритм изменения контрастности. Так вот такое улучшение ни в коем случае не изменяет реальность. Так же и вектоаризация не изменяет реальности. Она отображает всё те-же самые объекты. Цитата Распознавание всегда потеря данных. Верно, но этот алгоритм не является lossless. Цитата p1qb0d @ В этом утверждении смешаны одновременно и указание на потерю информации, и одновременно на недостаточную эффективность фильтрации. Верно подмечено, только для меня это означает оценку (-) для векторных алгоритмов, а для Вас она по-прежнему (+). Только дети всё делят на чёрное и белое. А жизнь она в серых тонах. Цитата p1qb0d @ Цитата Pavia @ Вчера, 20:44 После для растровых картинок тоже нашли алгоритм. Назвали алгоритм опорных векторов. Суть в том что-бы из шаблонов букв выбрать те пиксели, которые максимально отличат одни буквы от других. А те пиксели которые есть у всех букв, те не использовать в распознавании. Попытка уменьшить размер БД для приемлемого времени отклика системы. В частных случаях это работает. Но не интересно. Уменьшение БД тут не причём. Цитата p1qb0d @ Big Data найдет решение. Не найдет. Так как это фундаментальная проблема Big Data. |
Сообщ.
#16
,
|
|
|
Поиск окружностей и их частей на изображении
На шаге 32 из цикла уроков "OpenCV шаг за шагом" на robocraft.ru приводится способ определения окружности на изображения. Площадь окружности делится на квадрат ее периметра. Данное отношение постоянно для контура окружности любого диаметра и всегда равно 1/(4*pi) или 1/4*CV_PI = 0,079577 как в уроке (исправлено 21.11.16). . Данный метод позволяет распознать только полностью видимые окружности с контурами, близкими к правильным окружностям. А как осуществить поиск окружности, частично видимой на изображении? Начнем с простого. Возьмем идеальный контур окружности. Для начала выделим ее с помощью прямоугольной области минимального размера. Размеры области можно получить, оперируя с моментами контура окружности. Для окружности область выделения совпадает с описанным квадратом, те получим окружность, вписанную в квадрат. Площадь этого квадрата равна квадрату диаметра или 4 квадратам радиуса, Sкв=4*r^2. Возьмем отношение площади рассматриваемого контура, т.е окружности к площади описанного квадрата. Его значение равно pi/4 и не зависит от размера окружности. Площадь контура можно поискать в моментах. Теперь рассмотрим случай, когда на изображении видно только половину окружности. Я сделал расчеты и получил то же самое отношение - pi/4. См. рисунок. Соотношение сохраняется для случая, когда окружность перекрывается другим изображением по диагонали описанного квадрата, но математические выкладки носят чисто теоретический характер, т.к. на практике достаточно трудно точно определить границы выделяющего треугольника. Возможно, что потребуется использование законов симметрии и отзеркалить видимую часть по диаметру для получения полного изображения окружности. Однако на изображении может остаться только часть дуги окружности и восстановление симметрии позволит получить фигуру, далекую от окружности. В итоге я сделал предположение, что отношение площади любой видимой области окружности к выделяющей области будет постоянным и равным pi/4. Стоит отметить, что данный метод достаточно трудно реализовать на практике и, видимо, есть более надежные методы поиска. Например, если сравнивать дугу окружности с прямой линией (касательной), станет видно, что точки окружности смещаются, уходят на некоторую, скорее всего, постоянную величину. Далее можно перейти к инвариантной величине, постоянной для всех окружностей. Стоит поискать в этом направлении. Прикреплённый файлcikle.jpg (59,75 Кбайт, скачиваний: 1251) Добавлено Если по кривой восстановить закон изменения координат ее точек ("момент искривления" ), то можно будет востановить недостающие части контура путем интерполяции. Пройдя из любой точки части дуги окружности можно будет прорисовать невидимую окружность и вернуться в исходную точку. |
Сообщ.
#17
,
|
|
|
Вариант, показанный на рисунке 3, сводится к варианту, показанному на 2-м. Поворот изображения.
Как известно, окружность обладает симметрией во всех направлениях, поэтому любая прямая, пересекающая окружность, отсекает правильную дугу. Для нее придумали название - хорда. Хо́рда (от греч. χορδή — струна) в планиметрии — отрезок, соединяющий две точки данной кривой (например, окружности, эллипса, параболы, гиперболы). Прямая, параллельная хорде, пересечет точку дуги по касательной. Перпендикуляры, построенные из центра хорд данной кривой сойдутся в одной точке - центре окружности. Радиус = длина любого перпендикуляра + высота дуги. Зная радиус, можно восстановить окружность по ее видимой части. Зная хорду, можно построить область выделения. Отношение площади дуги любого размера к площади выделения величина постоянная, раная pi/4. Это первый признак окружности или ее дуги, который можно проверять в 1-ю очередь. Второй признак - определение радиуса r окружности и проверка условия - любая точка исследуемой кривой (но в общем случае это часть контура) принадлежит окружности с радиусом r Третий признак - отношение площади контура к квадрату его периметра (все это вычисляется через отношение моментов) для окружности равно 1/4/pi. Позволяет распознавать окружности и отличить ее от дуги или любой часть окружности. Если взять любое произвольное бинарное изображение (или в градациях серого) и вычислить отношение площадей светлых участков к площади фонового прямоугольника, то отношение будет примерно постоянным на любом масштабе. Изображение объекта на фоне прямоугольной области можно разбить на несколько прямоугольных областей и вычислять отношение площадей для каждой из них. Это дополнительные признаки для быстрой классификации объектов. |
Сообщ.
#18
,
|
|
|
также можно вычислять количества светлых точек и количества темных точек и их отношения для ускорения расчетов.
Сообщения были разделены в тему "спам" |