Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск монотонного прямоугольник на изображении 
:(
    Опции темы
blackbanny
Дата 15.7.2013, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Доброго времени суток!
Имеется отсканированные изображения(ч/б), на них нужно находить пустые(без надписей) прямоугольники 20x50мм, т.е. белого цвета(небольшой шум в виде точек допускается... Подскажите, алгоритм или где исходники посмотреть можно?
PM MAIL   Вверх
_Y_
Дата 15.7.2013, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Вам нужно искать белые прямоугольные объекты, расположенные на небелом фоне или выделять чистые прямоугольные области на изображении, где на белом фоне имеются небелые объекты?


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
blackbanny
Дата 15.7.2013, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Цитата(_Y_ @  15.7.2013,  12:35 Найти цитируемый пост)
выделять чистые прямоугольные области на изображении, где на белом фоне имеются небелые объекты


PM MAIL   Вверх
mrgloom
Дата 15.7.2013, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



искать 4 линии-отрезка через преобразование хафа, в opencv даже есть пример.
PM MAIL   Вверх
blackbanny
Дата 15.7.2013, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Цитата(mrgloom @ 15.7.2013,  14:00)
искать 4 линии-отрезка через преобразование хафа, в opencv даже есть пример.

мне без сторонних библиотек нужно реализовать...
PM MAIL   Вверх
mrgloom
Дата 15.7.2013, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
_Y_
Дата 15.7.2013, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 (на правах саморекламы:)
PM MAIL WWW   Вверх
blackbanny
Дата 15.7.2013, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Цитата(_Y_ @ 15.7.2013,  15:32)
Вариантов решения может быть множество. Хоть известные алгоритмы брать, хоть свои изобретать.

Например, можно соорудить что-то вроде такого.
1. Случайным образом выбираем точку на изображении.
2. Если точка не белая, повторяем п.1
3. Считаем, что найденная точка это прямоугольник размером 1х1 пиксель.
4. Случайным образом увеличиваем размер прямоугольника на один пиксель в одну из сторон.
5. Если прямоугольник белый (в рамказ заданных условий белости), повторяем п.4.
6. Если прямоугольник не белый возвращаемся к последнему найденному белому прямоугольнику. Записываем его в базу найденных прямоугольников.
7. Если количество найденных прямоугольников нам не нравится - возвращаемся к п.1.

довольно интересный вариант, но  трудоемкий)
PM MAIL   Вверх
_Y_
Дата 15.7.2013, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(blackbanny @  15.7.2013,  16:59 Найти цитируемый пост)
довольно интересный вариант, но  трудоемкий) 

Бесспорно. Это я привел просто как кондовый такой пример решения "в лоб".


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Earnest
Дата 16.7.2013, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Не такой уж трудоемкий. А в программировании - гораздо проще Хафа. 
Только я бы предложила убрать случайность, а просто последовательно сканировать строки, для каждого необработанного белого пиксела выполнить флуд-фил (рекурсивно собрать все смежные белые пикселы), посмотреть, что за область получилась (оконтурить область и посмотреть, насколько она на прямоугольник тянет). Ну там мелкие дырки внутри выкинуть, понятно. И т.д.


--------------------
...
PM   Вверх
_Y_
Дата 16.7.2013, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Earnest, если выкинуть случайность, получится полный перебор вариантов. Боюсь, будет работать только для очень маленьких изображений (ну и для изображений с очень мелкими белыми областями). Чуть больше - и программа будет рушиться из-за переполнения ИМХО.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
mrgloom
Дата 16.7.2013, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата

Только я бы предложила убрать случайность, а просто последовательно сканировать строки, для каждого необработанного белого пиксела выполнить флуд-фил (рекурсивно собрать все смежные белые пикселы), посмотреть, что за область получилась (оконтурить область и посмотреть, насколько она на прямоугольник тянет). Ну там мелкие дырки внутри выкинуть, понятно. И т.д. 



это типа выделение блобов- связных областей, можно потом посмотреть на моменты Ху(хотя они вроде чувствительны к шуму и к волнообразной границу контура например) насколько фигура похожа на прямоугольник.
http://en.wikipedia.org/wiki/Connected-component_labeling

минус в том, что области должны быть связанные, например прямоугольник нарисованный пунктирной линией такой алгоритм не сдетектирует.
PM MAIL   Вверх
blackbanny
Дата 16.7.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



я сделал тоже по простому smile ищу пустой прямоугольник только по левому краю страницы, т.к. во всех изображения такое возможно.
по высоте перебираю координаты с верху в низ, из каждой такой координаты строю линию толщиной в 1 пиксель и длинной 300 пикселей, если она белая, то накручиваю счетчик, если нет, то обнуляю счетчик, если найдено 120 подряд таких линий, то завершаю перебор - прямоугольник найден  smile 
в принципе, скорость меня устраивает smile
PM MAIL   Вверх
Earnest
Дата 17.7.2013, 06:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Не будет это долго, если доступ к растру нормально организовать (а не через GDI::GetPixe; smile
В принципе, связные области можно построить и по-другому, побыстрее. Через граф смежности строк, например. Да мало ли.

Моменты Ху не прокатят: действительно очень чувствительны к шуму, кроме того, для симметричных фигур там тоже все плохо.
Но есть более простые способы определения прямоугольности области, например, соотношение площади и периметра. Или построить прямоугольник наименьшей площади и сравнить с контуром ...


--------------------
...
PM   Вверх
Queuego
Дата 5.11.2022, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 4.11.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1568 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.