Дана фотография, внутри которой необходимо найти все окружности (координаты центра и радиус). Окружность может быть как замкнутой, так и не замкнутой (реальная фотка же). Какие могут быть алгоритмы определения окружности или круга? Возможно ли определить центр и радиус окружности по части кривой? Пишу на С++ Билдере 6.0, opencv запустить не смог. Потому хочу вручную попытаться определить окружности. Пример сложного случая Опишите словами как бы это вы сделали, может какие-нибудь идеи.
не, я хз, мне на ум только нейронные сети приходят. накрайняк можно добыть линуксовый OCR и ковырять исходники. но вот я видал прожку для печати фотокопии на документы. она моментально находила глаза и поворачивала фотку чтобы лицо вертикально было.
Окружность можно вписать в квадрат. Найти крайнюю точку слева, провести линию, найти точку справа, провести параллель. Выяснить "расстояние 1" между ними. Затем сверху и снизу. Выяснить "расстояние 2" между ними.Получиться в лучшем случаи квадрат, в худшем параллелепипед. Выбрать большее из расстояний... Завтра попробую додумать... Задачка интересная =)
Devzirom Ты - гений. А теперь давай подумаем, что если это фотография, то окружность может быть искажена по законам перспективы и в квадрат ты её не впишешь. Во-вторых, для того, чтобы вписать окружность в квадрат, её сначала нужно найти! А задача как раз изначально в том, чтобы найти. А теперь расскажи мне, откуда у квадрата стороны разных размеров? Параллелепипед? Каким образом получится объёмная фигура на плоском изображении? В-последних: На фотографии четких границ практически никогда не бывает и найти контуры возможно только с учетом транзитивных пикселов, отсюда получается ещё одна задача. Devzirom, умные слова - это классно, но учти, что есть люди, которые к тому же понимают их значения и пускай как-никак, но писали компрессоры, реализовывали алгоритмы сжатия и работали с изображениями чуть более, чем в РНР.
Apple =) Вот фиг знает, я с 6-ого класса геометрию прогуливал =) Пока это исключаем, ищем ведь признаки окружности, а не овала Допустим найдём Прямоугольник. Если "обкусать" окружности с любой стороны, то получиться прямоугольник. Несомненно. Только куда они делись? =)
вот, это мне и нужно. дело в том, что на фотографии я могу разделять различные области по процентной разнице в цветах, отличию от среднего цвета, могу выделять границы областей и т.д... на данный момент вся фотография у меня разделилась на области чёрного и белого цвета. как мне узнать, что данная область является частью окружности? найти крайние точки области - не проблема. вписать в квадрат/параллелепипед - тоже. но вопрос "как узнать, что это часть окружности" остаётся. идеальное решение - определять границу области, измерять коэфициет искривления и высчитывать примерный радиус и центр окружности. отталкиваясь от этих данных, проверять остальные возможные части окружности. и если таковые имеются - то считать, что окружность найдена. а вот как это реализовать - хз
Надо найти дугу, вычислить её кривизну, дорисовать окружность и проверить, совпадает ли она с тем, что на картинке.
Мне на ум такое решение приходит 1)Функция которая попиксельно строит указанную окружность.Точнее не строит,а строит массив соответственно с координатами точек,при заданном центре,причем считается что нет переполнения(не зашкаливает за край границы) 2)Хреначим массив окружностей радиуса от 3 пикселей до 1/2 фотки по минимальной длине или ширине(до переполнения то есть) 3)Танки грязи не боятся,береп первую точку,вторую третью.....И проверяем какой % каких окружностей она воплощает.Это долго но в общем решает задачу.Если >некоторого % пикселей в окружности-мать вашу,мы нашли то что искали ,хотя квадрат Малевича-это тож окружности,и тут нужно проверять,если они удут в массиве подряд по радиусам-значит окружность одна только толстая как член индуса Функция посторойки массива точек(коррдинат окружности).Берется и ставится вертикально от центра точка на расст.=радиусу.Далее смотрим-следующая точка в пикселах может быть вправо,вправо и вниз,просто вниз,и так далее идёт,пока не будет обойдена вся окружность Gromo,а нахрена тебе это?Я вот думаю какие фишки мне на сайт чтобы стадо тупых безмозглых баранв больше платили бабла по вебмани и не только.Хотя уже давно всё придумал,больше разговоры разговариваю
Ну, я думаю, понимаете, что без хорошего мат. аппарата ничего у вас не получится? Могу лишь подсказать, в какую сторону смотреть - преобразование Хафа. Сам в этом не помогу, для меня это пока такой же дремучий лес, и погружаться желания нет.
Незнаю, но всяко проще, чем окружность Хотя-бы потому, что она меньше. Для начала лучше всего тренироваться с черным кругом на белом фоне, ну типа по контрастной границе вычислять.
goshalve =) вообще думаю над компьютерным зрением. когда-то была похожая проблема, но только со строками. придумали регулярные выражения для строк. теперь нужно придумать регулярные выражения для изображений для поиска совпадений
какой отвратительный декаданс... (с) весь этот жуткий катаклизм, который я здесь наблюдаю... (с) вообще, конечно, забавно читать вашу дискуссию. напоминает попытки неандертальцев создать ядерную бомбу. без обид, но между истиной и вашими размышлениями просто пропасть. здесь нельзя использовать классические методы. послушайте Apple, он что-то дельное говорит. нейронные сети пока-что слабоваты для таких задач. распознавание рукопечатных текстов - более менее.
это не одно и то же. для создания ядерной бомбы нужны точные расчёты. а для анализа изображения нужны расчёты с учётом возможной погрешности. мозг человека не думает формулами, так что высшая математика не является обязательной. хотя конечно, без элементарной математики тоже не обойтись. основная задача - понять как мозг анализирует информацию, и сделать то же самое на компьютере. и нейронные сети тут не при чём. я просто спрашивал совета
человеческий мозг работает с вектором. Т.е. опознавалка форм уже работает с выделенными объектами. А в данном случае я предлагаю бить картинку на квадратики ченить типа 3*3 пикселя, и сравнивать квадратики с паттернами окружности. если попал - сравнивать соседей.
Но кусок большой окружности даже в квадрате 64x64 пикселей может быть почти прямой. А если уменьшить изображение, маленькие не увидим.
[vs] да. придется делать несколько заходов с уменьшением картинки. + сдвигать либо паттерны, либо квадратики... хз как это делается просто. вот надумал так.