|
|
|
blackbanny |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 83 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Доброго времени суток!
Имеется отсканированные изображения(ч/б), на них нужно находить пустые(без надписей) прямоугольники 20x50мм, т.е. белого цвета(небольшой шум в виде точек допускается... Подскажите, алгоритм или где исходники посмотреть можно? |
|||
|
||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Вам нужно искать белые прямоугольные объекты, расположенные на небелом фоне или выделять чистые прямоугольные области на изображении, где на белом фоне имеются небелые объекты?
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
blackbanny |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 83 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
||||
|
||||
mrgloom |
|
|||
Опытный Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
искать 4 линии-отрезка через преобразование хафа, в opencv даже есть пример.
|
|||
|
||||
blackbanny |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 83 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
мне без сторонних библиотек нужно реализовать... |
|||
|
||||
mrgloom |
|
|||
Опытный Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну реализуйте хафа с нуля, потом найдите список линий, найдите пересекающиеся линии, угол между которыми близок к 90 и потом найдите прямоугольники.
http://stackoverflow.com/questions/1364976...hough-transform http://opencv-code.com/tutorials/automatic...ateral-objects/ Это сообщение отредактировал(а) mrgloom - 15.7.2013, 17:07 |
|||
|
||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Вариантов решения может быть множество. Хоть известные алгоритмы брать, хоть свои изобретать.
Например, можно соорудить что-то вроде такого. 1. Случайным образом выбираем точку на изображении. 2. Если точка не белая, повторяем п.1 3. Считаем, что найденная точка это прямоугольник размером 1х1 пиксель. 4. Случайным образом увеличиваем размер прямоугольника на один пиксель в одну из сторон. 5. Если прямоугольник белый (в рамказ заданных условий белости), повторяем п.4. 6. Если прямоугольник не белый возвращаемся к последнему найденному белому прямоугольнику. Записываем его в базу найденных прямоугольников. 7. Если количество найденных прямоугольников нам не нравится - возвращаемся к п.1. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
blackbanny |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 83 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
довольно интересный вариант, но трудоемкий) |
|||
|
||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Бесспорно. Это я привел просто как кондовый такой пример решения "в лоб". -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Earnest |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Не такой уж трудоемкий. А в программировании - гораздо проще Хафа.
Только я бы предложила убрать случайность, а просто последовательно сканировать строки, для каждого необработанного белого пиксела выполнить флуд-фил (рекурсивно собрать все смежные белые пикселы), посмотреть, что за область получилась (оконтурить область и посмотреть, насколько она на прямоугольник тянет). Ну там мелкие дырки внутри выкинуть, понятно. И т.д. -------------------- ... |
|||
|
||||
_Y_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Earnest, если выкинуть случайность, получится полный перебор вариантов. Боюсь, будет работать только для очень маленьких изображений (ну и для изображений с очень мелкими белыми областями). Чуть больше - и программа будет рушиться из-за переполнения ИМХО.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
mrgloom |
|
|||
Опытный Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
это типа выделение блобов- связных областей, можно потом посмотреть на моменты Ху(хотя они вроде чувствительны к шуму и к волнообразной границу контура например) насколько фигура похожа на прямоугольник. http://en.wikipedia.org/wiki/Connected-component_labeling минус в том, что области должны быть связанные, например прямоугольник нарисованный пунктирной линией такой алгоритм не сдетектирует. |
|||
|
||||
blackbanny |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 83 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
я сделал тоже по простому ищу пустой прямоугольник только по левому краю страницы, т.к. во всех изображения такое возможно.
по высоте перебираю координаты с верху в низ, из каждой такой координаты строю линию толщиной в 1 пиксель и длинной 300 пикселей, если она белая, то накручиваю счетчик, если нет, то обнуляю счетчик, если найдено 120 подряд таких линий, то завершаю перебор - прямоугольник найден в принципе, скорость меня устраивает |
|||
|
||||
Earnest |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Не будет это долго, если доступ к растру нормально организовать (а не через GDI::GetPixe;
В принципе, связные области можно построить и по-другому, побыстрее. Через граф смежности строк, например. Да мало ли. Моменты Ху не прокатят: действительно очень чувствительны к шуму, кроме того, для симметричных фигур там тоже все плохо. Но есть более простые способы определения прямоугольности области, например, соотношение площади и периметра. Или построить прямоугольник наименьшей площади и сравнить с контуром ... -------------------- ... |
|||
|
||||
Queuego |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 4.11.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |