2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Подсчет количества линий
Сообщение04.04.2006, 19:17 
Аватара пользователя


18/02/06
61
Moscow
Есть вот такая картинкаИзображение
Толщина всех черных линий - 1 пиксел. Надо подсчитать, сколько линий пересекает отрезок, проведенный из точки a в точку b.
У меня была мысль вычислить наклон отрезка к оси OX и идти вдоль прямой с таким углом, считая число черных пикселей, встретившихся на пути. Но вдруг я зацеплю при этом пиксели, отклонившиеся от направления прямой в результате изгиба? Может, есть способ получше?

 Профиль  
                  
 
 
Сообщение05.04.2006, 09:38 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Первый вариант. Двигаясь вдоль указанной линии, вычислять (в вещественных числах) расстояния между точками перехода между черными и белыми пикселями. Не учитывать белые отрезки, длина которых меньше некоторого порогового значения, а если больше - считать, что есть переход на следующую линию.

Второй способ. Задать на черных точках меру близости. Считать два черных пикселя близкими, если можно пройти от одного до другого по черным точкам за заданное количество шагов. Соответственно, подсчитывая число черных пикселей при движении вдоль заданной линии, считать близкие пиксели за один.

См. по этому поводу http://ocrai.narod.ru/vectory.html
Для данной задачи ИМХО полезная ссылка.

Если для одной картинки указанную задачу подсчета линий между двумя точками нужно решать мало раз, то близость лучше определять одновременно с проходом и только для пикселей, через которые мы прошли и близких к ним. Если же задача часта, то возможно быстрее будет заранее провести предобработку картинки, вычислить все, что нам потребуется, а затем этим пользоваться.

 Профиль  
                  
 
 
Сообщение05.04.2006, 18:00 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Еще один вариант -- идти вдоль указанной линии с маленьким шагом (например, 1/3). В каждой точке считать значение, используя сплайн 4 x 4 с ценром в данной точке (его коэффициенты можно подсчитать заранее, так что вычисление сводится к сумме 16 слагаемых). Если значение допороговое -- точка черная, послепороговое -- белая. Считаем количество перемен цвета.

Я, правда, начал сомневаться глядя на Вашу картинку. На картинке толщина папилярных линий заметно больше одного пиксела, и присутствует однопиксельный шум. Не то, чтобы с этим нельзя было бороться, но надо по другому. Можно, например, делать сглаживающий сплайн, а не интерполяционный. В этом случае, однако, лучше немного увеличить размеры квадрата.

 Профиль  
                  
 
 
Сообщение06.04.2006, 07:50 
Аватара пользователя


18/02/06
61
Moscow
незванный гость
Это просто картинка ДО утончения линии ))) Потом, она стала такая после взятия скриншота и сохранения в jpeg.
А что там про сплайны? Можно подробнее, плиз!

 Профиль  
                  
 
 
Сообщение06.04.2006, 08:49 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Что именно Вас интересует? Что такое сплайн? Или как его применить в данном случае?

Би-кубические сплайны -- довольно стандартный метод изменения разрешения изображения. Откеле и идея ими воспользоваться в данном случае.

 Профиль  
                  
 
 
Сообщение06.04.2006, 09:10 
Основатель
Аватара пользователя


11/05/05
4312
xatkaru писал(а):
незванный гость
Это просто картинка ДО утончения линии ))) Потом, она стала такая после взятия скриншота и сохранения в jpeg.
А что там про сплайны? Можно подробнее, плиз!

Скриншоты в png надо сохранять. :)

 Профиль  
                  
 
 
Сообщение06.04.2006, 09:37 


10/02/06
54
нужно увеличить разрешение и сгладить гауссом (что бы попробовать можно воспользоваться фотошопом).
затем вычислить производные вдоль линии, и посчитать количество изменений знака.
если нужны подробности - сообщите.

 Профиль  
                  
 
 
Сообщение06.04.2006, 11:00 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
MrD писал(а):
нужно увеличить разрешение и сгладить гауссом (что бы попробовать можно воспользоваться фотошопом).
затем вычислить производные вдоль линии, и посчитать количество изменений знака.


Я так понял, что большое разрешение есть изначально, а затем оно уменьшается специально, вероятно, чтобы работало быстрее. Скорость работы тут может быть критическим фактором.

 Профиль  
                  
 
 
Сообщение06.04.2006, 23:57 


10/02/06
54
2 PAV
или точность, или скорость...
но при толщине линии в одну точку погрешность может составить процентов 50.

 Профиль  
                  
 
 
Сообщение07.04.2006, 07:43 
Аватара пользователя


18/02/06
61
Moscow
MrD писал(а):
затем вычислить производные вдоль линии, и посчитать количество изменений знака.
если нужны подробности - сообщите.


Да, если можно, поподробнее.
На самом деле, при утончении линий происходит вот что:
Каждой точке картинки (те, пикселю) сосоставляется структура на языке СИ, содержащая информацию о координатах точки, количестве соседних точек, указатели на соседние точки (возможность доступа к аналогичным структурам соседних точек) и принадлежность точки к определённому классу (вспомогательный параметр, который будет рассмотрен ниже). Так как каждая точка представляет собой квадрат на плоскости, число возможных соседей равно восьми. Полученные структуры образуют собой массив G.
Для удобства дальнейшей обработки полученный массив разбивается на новые массивы, представляющие собой компоненты связности, то есть наборы точек, внутри которых каждая точка связана с другими через соседние и не связана с точками из других наборов. Для этого берётся первая точка из массива G, в качестве принадлежности её к определённому классу ей в соответствие ставится номер текущей компоненты (1). Далее поочерёдно проверяется наличие у этой точки соседей, и, при наличии, соседней точке ставится в соответствие тот же номер компоненты, что и у исходной. С помощью рекурсивной (вызывающей саму себя) функции, происходит переход от точки к точке. Если точке уже присвоен номер компоненты, переход к ней не осуществляется. Если таким образом перебраны все возможные точки, из исходного массива G берётся следующая точка с неприсвоенным пока номером компоненты для проведения аналогичной процедуры. Номер текущей компоненты увеличивается на единицу.
Далее, на основе массива G создаются новые массивы P1, … , PN точек с одинаковыми номерами компонент связности (от 1 до N соответственно), где N – количество компонент связности.

Так вот, я думаю: может, вычислить уравнение прямой, проходящей счерез точки a и b, и подсчитать число точек, входящих в каждую структуру, лежащих на этой прямой?

 Профиль  
                  
 
 
Сообщение07.04.2006, 07:47 
Аватара пользователя


18/02/06
61
Moscow
незванный гость писал(а):

Что именно Вас интересует? Что такое сплайн? Или как его применить в данном случае?

Как применить, в основном интересует... Честно говоря, я тут прикинула, получится довольно большой объем вычислений. Не думаю, что это приемлимо для программы сравнения отпечатков пальцев (если вы еще не заметили, на картинке изображен именно он)

 Профиль  
                  
 
 
Сообщение07.04.2006, 09:30 


10/02/06
54
2 Продвинутая Блондинка!

Ваш алгоритм слишком сложен. Рассматривайте картинку как отображение RxR -> R (последнее R это яркость точки), заданное на сетке. Уравнение прямой действительно надо вычислить, но для того, что бы найти max и min этого отображения вдоль прямой. max будут соответствовать темным контурам на изображении, количество max - число пересечений прямой с контурами.
Сейчас нет возможности расписать все более подробно, но могу сделать это к понедельнику.

 Профиль  
                  
 
 
Сообщение08.04.2006, 18:34 
Аватара пользователя


18/02/06
61
Moscow
MrD,
Алгоритм утончения линий (с целью поиска особых точек на отпечатке - окончаний линий и разветвлений) создан не мной... Так что я бы не хотела его трогать (а то мой аспирант разозлится).
НО! Если вы подробнее напишете про R*R->R, буду благодарна!
Потому что мне очень любопытно. Если можно ускорить работу алгоритма, то это было бы замечательно!

 Профиль  
                  
 
 
Сообщение09.04.2006, 18:32 
Аватара пользователя


18/02/06
61
Moscow
Если кому интересно, вот черновик моей работы по идентификации отпечатков пальцев
http://xatkaonthenet.narod.ru/bio.rar

 Профиль  
                  
 
 
Сообщение09.04.2006, 20:45 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Интересно, если будет время, посмотрю повнимательнее. А если не секрет, где ставят такие задачи для курсовых? (если я правильно понял, и это курсовая).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group