![]() |
|
![]() ![]() ![]() |
|
Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Добрый вечер, товарищи.
Занялся написанием программы, которая анализирует кол-во графической информации на чертеже. Для друга делаю. Суть: есть условный сканер, который "идет "по чертежу и ищет "пересечения". То есть если цвет пикселя черный, то это пересечение. Но на чертеж могут быть "шумы" - когда его сканировали на хреновом сканере. Их надо отфильтровывать. Я делаю так: циклами иду по битмапу и смотрю пиксели. Когда нашел точку пересечения, смотрю вокруг- если хоть в 1 из 8 пикселей есть тоже черный пиксель- то это мы попали на линии и ее нужно засчитать. (см. картинку) Если вокруг нет- то это считается одиночной точкой, то есть шумом. Схема: Схема Проблема: не все линии вылавливает. А это критично. По теории, если линия идет допустим под неким углом, то она будет красить пиксели, лежащие вкруг(хотя бы один) На схеме: мы нашли пересечение в центральном пикселе. затем смотрим вокруг- начиная слева сверху. на схеме мы найдем пересечение еще и вверху над найденным 1 пикселем. и должны засчитать это линией. Но на практике почему не всегда так. Пропускает линии. Помогите пожалуйста. Если можете, укажите на ошибки в моем алгоритме или предложите свой. Необходимо забирать все линии (макс недобор - 0,5%)и фильтровать шумы(макс взятых шумов от всех - 0,5%). Пример чертежа |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Гуглите алгоритмы векторизации.
Хотя, вообще-то, чертежного софта с такими возможностями должно быть много. В России начало бума перевода старых бумажных чертежей в цифру пришлось на середину 90х - т.е. и промышленного, и самописного софта должен быть вагон и маленькая тележка |
|||
|
||||
Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Ну вагон или нет, меня знаете ли не интересует.
Спасибо погуглю, а замечаний по моему алгоритму нет? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
99% ошибка реализации. Если, конечно, в линиях нет дырок. Если есть, сначала отфильтруй (залей дырки простейшим фильтром по соседям). Кстати, единичный шум можно убрать точно также (только наоборот - если у черного пиксела нет соседей, или мало - меньше заданного числа - убрать). А потом можно просто посчитать оставшиеся пикселы. И еще. У тебя, что линии толщиной в один пиксел? -------------------- ... |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
В природе существует такая книжка Визильтер, Желтов, Князь: Обработка и анализ цифровых изображений с примерами на LabVIEW и IMAQ Vision. Сам язык LabVIEW врядли заинтересует, но в книжке каждая тема состоит из двух частей: сначала хорошее описание принципов, а только потом реализация на LabVIEW. Вот эти-то пронципы и помогут решить проблему.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Линии не обязательно толщиной в 1 пиксель.
мой код:
Может где и ошибся, только не могу найти ![]() |
|||
|
||||
Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Никто мне не поможет?
Очень надо, плиз! |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
microCount:= 0;
for k := 0 to step-1 do begin xk:= xx + k; yk:= yy; - тоже менять надо надо . |
|||
|
||||
Racer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 28.6.2009 Репутация: нет Всего: нет |
Оно меняется. просто есть аналогичная вторая часть, в которой меняются таким образом y а х остается как здесь у.
Как бы сначала горизонтальный проход, а затем вертикальный. |
|||
|
||||
setnull |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
Сильно не вникал, но показалось, что анализируются соседи только для одного из 4ех секторов?
это если именно по Вашему алгоритму. А вообще, действительно лучше просто пропустить изображение через какой подходящий к требованиям задачи фильтр Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |