18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
1 | |
Авто определение границ рисунков13.06.2019, 07:57. Показов 3756. Ответов 26
Метки нет (Все метки)
Большой рисунок состоит из нескольких (многих) прямоугольных рисунков, разделённых между собой промежутками-"рамками" какого-то одного цвета
Как можно организовать автоматическое определение программой координат этих отдельных рисунков, "скормив" проге цвет "рамок"? Какой должна быть "логика", алгоритм действий? Как решать проблему jpg? Ведь в bmp чётко один цвет, а в jpg цвет рамки размывается в разные оттенки
0
|
13.06.2019, 07:57 | |
Ответы с готовыми решениями:
26
Определение границ Определение границ капчи Определение границ цифр Определение границ нарисованного объекта |
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
15.06.2019, 22:49 [ТС] | 21 |
Не, естесственно не любые. Только те, которые имеют рамки и не пересекаются. Во-всяком случае я прогнал все эти рисунки через прогу, которую выложил выше - результаты такие, что можно продолжать долбить эту тему с надеждой на положительный исход. В принципе определение контуров даже с 50% надёжностью я считаю удовлетворительным результатом, поскольку это не основная функция проги, а так, примочка вспомогательная/понт.
ОЧЕНЬ интересен ваш подход. Не поделитесь или словесным описанием принципа или даже кодом?
0
|
16.06.2019, 06:22 | 22 |
На счет кода, я быстренько набросал в PureBasic, он как то побогаче встроенными библиотеками для работы с изображениями. Если есть интерес, то могу с вами поделиться (но там совсем не похоже на VB6).
А принцип прост - перевёл изображение в черно-белый вид с выделением краёв, что-то типа эффекта Emboss. Обвел весь рисунок черной рамкой по краю. Далее попиксельно искал непрерывные горизонтальные линии. Двигаюсь сверху по ширине и складываю цвет пикселей, если в итоге сумма 0, то это сплошная горизонтальная черная линия, если нет, то спускаюсь на один пиксель вниз и повторяю. Потом двигаюсь по этой найденной линии, проверяя ответвления, опять же двигаюсь, но уже складывая вертикальные пиксели. Если сумма их 0, то в точке пересечения с горизонтальной линией рисую зелёную точку. Попутно отмечая, линия вниз или вверх. Так можно быстро найти все углы. Скомпилированная прога на этом изображении находит углы быстрее чем за секунду.
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
16.06.2019, 07:35 [ТС] | 23 |
Ваш метод- первое, что пришло мне в голову, когда я начал думать об этой моей проблеме. Но я сразу же обломался - при переводе в чёрно белое у меня из этого рисунка получается почти сплошное чёрное поле! Или имеется ввиду Grayscale? Оттенки серого? Но тогда сумма 0 не может получаться и опять вопрос - как определять принадлежат ли пиксели рисунку или рамке?
Не, конечно есть и такое соображение - рамка всегда одного цвета и даже учитывая что jpg "портит" одноцветность пикселей, если идти по горизонтальному ряду (или во вертикальному) разница между пикселями линии рамки будет наименьшей по сравнению с любой другой линией. Но здесь есть затык, который я пока не соображу как преодолеть. Если в случае реальной одноцветности пикселей (чёрный в вашем варианте) появление пикселя <>0 указывает на конечную точку непрерывной линии, то в случае нечёткого цвета как понять что непрерывный ряд закончился. Опять надо вводить усложнения типа задавать пределы отклонения среднего значения и тому подобное, чего как раз ОЧЕНЬ хочется избежать. Короче, я продолжу реализовывать такой подход - тем более что ваша реализация показала, что результаты очень даже ничего. Прошу вас прояснить тему перевода в чёрно-белое
0
|
18 / 13 / 0
Регистрация: 16.09.2014
Сообщений: 302
|
|
16.06.2019, 11:36 [ТС] | 24 |
Пытаюсь сделать после 5 проходов по Helland Cubic и перевода в монохром определение линий. Вроде получается,но рисуются лишние линии. 3 часа сижу - не могу найти ошибку. Помогите правильно организовать цикл прохода по пикселям горизонтальных рядов и определения стартовых координат и длины непрерывной линии
На рисунке слева - то, как получается, справа - какие линии должны быть на самом деле
0
|
16.06.2019, 17:31 | 26 |
Вот что вышло
Без оптимизации работает очень медленно, там эти PSet и Point в цикле полный тормоз. Но принцип есть, а оптимизация дело наживное. Обратите внимание, есть второй режим, в комментах описан, чуть быстрее и тоньше работает.
0
|
103 / 63 / 10
Регистрация: 13.02.2017
Сообщений: 178
|
|
17.06.2019, 22:07 | 27 |
Не мог не запостить свой поток сознания.
Думаю, если границы прямоугольников явно не выделены, то и заниматься этим не смысла.
0
|
17.06.2019, 22:07 | |
17.06.2019, 22:07 | |
Помогаю со студенческими работами здесь
27
Определение границ типов данных Определение границ заливки изображения Авто определение региона Описать базовый класс автомобиль и от него наследуются классы: грузовые авто, уборочные авто, спортивные авто Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |