Разпознавание линий.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Разпознавание линий.

Сообщение Faust » 28.10.2004 (Чт) 23:39

Всем доброго времени суток! Да не отошлют меня в FAQ с вопросом о распознавании изображений! На моей памяти подобным образом этот вопрос еще не ставился. Предположим, имеется некий черно-белый растр, на котором присутствует несколько линий (треков частиц). Проблема заключается в том, чтобы распознать эти самые линии, которые, вообще-то могут иметь толщину в несколько пикселей и не быть непрерывными. Вот, предположим, я задал точку на одной из таких кривых и хочу узнать уравнение касательной к ней. КАК???
Листинги не горят!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 29.10.2004 (Пт) 0:04

Уравнение касательной к кривой - фигня полная по сравнению с задачей получения этой самой кривой, как ты понимаешь. Ну, в общем случае, можно провести попиксельное сканирование имижда (у тебя там камера Вильсона или чего покруче? :) ). При встрече хотя бы одной точки с цветом, отличным от фонового, производишь поиск точек по тому же критерию в ее окрестностях (пиксель вправо-влево-вниз-вверх-по диагонали). В конечном итоге получаешь неск. массивов, каждый из которых являет собой либо трек целиком, либо его часть (насколько жирная частица попадется). А вот дальше... Надо как-то ухитриться составлять куски трека в одно целое, да чтобы не происходило ложное смешивание частей разных треков в один...

Блин, слишком нетривиальная задача. А алгоритмист из меня тот еще... :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:12

Если кривая не слишком кривая :) (т.е. не скручивается спиралью), то можно конечную стадию несколько упростить, преобразуя массив точек в кривую сплайнами (в данном случае сплайны будут идеальны).
Вернее, сплайны в любом случае будут подходить, но для слишком сложной кривой будет трудно определить последовательность точек.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:22

А алгоритм я бы прикинул примерно такой.
Делишь изображение на несколько фрагментов, размером, к примеру, не более 50x50 пикселов. В каждом фрагменте оцениваешь "плотность", т.е. суммируешь количество пикселов с цветом, отличных от фонового цвета. Выбираешь фрагмент с минимальной плотностью и находишь в нем точку.
От этой точки идешь по расширяющейся окружности, фиксируя все точки такого же (не фонового) цвета. Когда процент фоновых пикселов превысит 50%, то останавливаешь цикл и находишь геометрический центр полученной фигуры. Кроме того, определяешь среднее минимальное расстояние (т.е. берешь только те расстояния, которые меньше среднего расстояния, и вычисляешь из них среднее значение) от этого центра до границы фигуры. Это будет средняя толщина линии кривой.
Потом двигаешься от текущей (центральной) точки по расширяющейся окружности с шагом, равным толщине линии. Все встречающиеся точки запоминаешь в массив, после того, как окружность будет замкнута, анализируешь этот массив -- продолжением линии будет та точка, касательная к которой минимально отличается от касательной к текущей линии.
Lasciate ogni speranza, voi ch'entrate.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Дополнения к условию

Сообщение Faust » 30.10.2004 (Сб) 3:45

Трабл первый: треков на пленке как минимум два (лишние обрезать руцями не так уж и сложно, вот только какой же я тогда програмер!?): притом один из них - это спираль с ~10 различимыми витками.
Трабл второй: возможны такие деффекты пленки, как незначащие точки и "рарывы" тонких треков.
Ennor писал(а):у тебя там камера Вильсона или чего покруче? :)

Она, родимая. Пленки "Made in Dubna".
alibek писал(а):Если кривая не слишком кривая (т.е. не скручивается спиралью)

К сожалению, меня интересуют как раз "слишком кривые" кривые. А в камере Вильсона заряженные частицы обычно движутся по спиралям.
Спасибо за идею алгоритма. А что такое сплайны? :oops:
Листинги не горят!

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 30.10.2004 (Сб) 4:07

Alibek близко подошёл к решению проблемы.
Одно одополнение. Предварительно необходимо уравнения кривых (спиралей) параметризировать на энергию частиц (сиречь, величину капелек) и отношение заряда частиц к массе ("кривизна" спирали). В дальнейшем необходимо искать именно точки подходящие под те или иные вводные для этой модели. А вовсе не наоборот. :)
С уважением, Approximator.

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 30.10.2004 (Сб) 4:21

Approximator, суть работы как раз и заключается в поиске энергии частиц, исходя из трека. Можно судить лишь о промежутке значений, которые, вероятней всего, будут наблюдаться. У меня есть подозрение, что при двух степенях свободы пребирать значения типа Double - расточительно по отношению к ресурсам системы.
Листинги не горят!

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 30.10.2004 (Сб) 6:44

Faust писал(а):Approximator, суть работы как раз и заключается в поиске энергии частиц, исходя из трека.


Я догадался :) что именно тебе нужно. Но вся штука в том, что не будешь же ты искать энергию вне известной модели. Модель-то (параметризированная кривая) тебе-то должна быть известна заранее. А?

Faust писал(а):Можно судить лишь о промежутке значений, которые, вероятней всего, будут наблюдаться.


Какой ускоритель? Если можешь назови номер/серию экспериментов (проекта).
В кратце, для известных частиц (выход за пределы известного, тоже можно предусмотреть) и известного интервала энергий, для каждой частицы можно иметь вполне конкретную модель (длина трека, размер капелек, "кривизна" спирали и т.п.).

По крайней мере, насколько мне известны, последние тенденции в распознавании чего бы то ни было, то там производится поиск известного и конкретного, а не чего-то вообще.

Faust писал(а):У меня есть подозрение, что при двух степенях свободы пребирать значения типа Double - расточительно по отношению к ресурсам системы.


Для каких величин? Вообще у тебя все единицы измерения должны быть привязаны к "степеням свободы" в пределах изображения, то есть к длине и ширине изображения в пикселях.
С уважением, Approximator.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4160
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.10.2004 (Сб) 10:16

Вот когда-то решалась очень близкая задача:
http://bbs.vbstreets.ru/viewtopic.php?t=7600&highlight=

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 30.10.2004 (Сб) 17:01

Не очень-то близкая, но все равно спасибо, что напомнил месторасположение топика.
Листинги не горят!

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 02.11.2004 (Вт) 3:23

Если всё ещё актуально, могу связать с человеком, имеющем отношение к работающей программе на АЛИСЕ (по ходу, star'овскую программу собираются делать по её образу и подобию). А можно и с тем, что раньше занимался этой проблемой в ОИЯИ (сейчас он в Германии). Будет желание сообщи в личку.
С уважением, Approximator.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList