Перейти к содержимому
Compvision.ru
rs8

Узнавание объекта на готовой картинке по комбинации цветов, которые не определены точно

Recommended Posts

здравствуйте!

начала недавно работать с opencv, visual studio 2008, c++.

я не очень разбираюсь в этом, поэтому была бы очень благодарна за советы!

дело в том, что надо опознать оъект на картинке, учитывая следующее:

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

-на картинке находятся ещё несколько таких похожих объектов (вообще ето целая серия подобных картинок и на каждой искомый объект выгядит по-разному).

-есть и другие объекты похожего цвета, но, к счастью, у их есть опр. размер и форма, по которым их можно определить и выкинуть из анализа.

-единственное отличие искомого объекта от ему подобных-это цвет.

и было бы здорово,если бы цвет был бы какой-то один, определённый... но, к сожалению, объект окрашен комбинацией из 2 цветов:

белого и красного, которые расположены поперёк объекта равными тонкими полосками, перемежаясь друг с другом типа зебры.

но и это ещё не главная проблема-а проблема том, что когда посмотришь при увеличении, то видно, что границы между цветами не определены чётко, т.е. размыты.

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

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

короче, я замучалась уже- не знаю, как это решить...

может быть есть такая функция в opencv которая позволяет найти объект по процентному содержанию 2 или больше цветов?

или 2 вариант, который мне пришёл в голову- прогнать картинку через фильтр (опять же, какой подойдёт тут лучше? гистограммский?) чтоб нейтрализовать

размытость краёв а потом применить сравнение гисторамм, чтоб по заданной насыщенности, характеризующей тот или другой цвет определить- ето мой объект или нет???

пожалуйста, буду рада вашим советам, мнениям и др.!

огромное спасибо заранее! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пример картинки в студию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну вот, например.. вообще в моей теме речь идёт о картах дорог. мне нужно определить есть ли полосатая дорога на картинке?

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

кстати, спасибо, что откликнулись! :)

post-4612-0-73731500-1317129277_thumb.jp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Могут спасти блобы. Например с помощью библиотеки cvblob Находите их на изображении, так как оно синтетическое, то я подозреваю что пунктир будет состоять из примерно одинаковых по площади элементов. После фильтрации по площади будете иметь набор точек, которые были центрами блобов. Дальше принимаете некоторую точку (желательно ближайшую к какому нибудь из углов) за начальную и каждый раз находите ближайшую к ней. Так получите трассу. Если я правильно понял условия задачи.

ЗЫ: Можно попробовать сначала сразу искать контуры и из тоже отсеять по площади и т.д. как и с блобами.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо вам большое! попробую сейчас посмотреть, что такое эти блобы и как можно их в этом случае использовать! ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

вы правы, на картинке это не видно, но если вы представите себе, что оранжевая трасса-бело-красная и при увеличении границы их размыты,

как я до этого описала, тогда вы заметите, что простое определение по цвету тут не подойдёт, т.к. программа будет находить и другие

бело-красные объекты (так как у меня сейчас она их находит), хотя по hsv значениям это другой красный цвет. :) надеюсь, сейчас я смогла вам лучше объяснить суть моей проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну сделать фильтрацию медианную или кувахара, возможно морфологические операции,потом сделать сегментацию по цвету и яркости, потом проанализировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо за совет! пока остановилась на версии :

вырезаю из искомой трассы кусочек-через фотошоп,

потом по методу поиска символов (через создание масок), применяя ротационную матрицу, проходим всю картинку с этой маской, пока не находим такой же кусочек.

честно говоря, я бы выбрала бы метод блобов, фильтров или гистограмм... так как это было бы намного точнее...

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

параллельно попробую по-своему... ;)

если вам, уважаемые, интересно, что из этого получится, могу потом рассказать! :)

ещё раз большое спасибо всем!

Поделиться сообщением


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

расскажите про этот метод или как он называется в англоязычной литературе.

чо то смахивает на корреляцию.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

простите, я не точно выразилась, этого метода в готовом виде,как ф-ция opencv, нет или он мне не известен.

метод написан/имплементирован нами самими.

выглядит примерно так:

bool getIcon(const char* imagePath, ImgProcessing::MaskObject* mask, const char* iconName, int& confidence)

где getIcon- это тот кусочек что нам надо найти,

1 параметр- адрес картинки,

2- область для поиска,

3- имя вырезанного из оригиналов кусочка, кот. примеряется на исследуемую картинку,

и послед.- интервал.

bool -потому что у нас задача определить- есть оно там или нет. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

проблема в том, что полосатость неравномерная, как можно ожидать от синт. картинки, а как будто её от руки ещё и левой накорябали! :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
bool getIcon(const char* imagePath, ImgProcessing::MaskObject* mask, const char* iconName, int& confidence)

где getIcon- это тот кусочек что нам надо найти,

1 параметр- адрес картинки,

2- область для поиска,

3- имя вырезанного из оригиналов кусочка, кот. примеряется на исследуемую картинку,

и послед.- интервал.

я в общем виде имел ввиду, а не как он у вас реализован.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в общем это просто-

особенно хорошо это можно использовать, когда знаете, что размер искомого символа остаётся стабильным.-

берёте этот символ/значок/объектик в оригинале как есть, и пишете метод, который примеряет его по всей заданной вами области.

делается это через функцию cvMatchTemplate.

вы это имели в виду?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

пожалуйста подскажите, как называется по-сивишному методы поиска текстур?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
в общем это просто-

особенно хорошо это можно использовать, когда знаете, что размер искомого символа остаётся стабильным.-

берёте этот символ/значок/объектик в оригинале как есть, и пишете метод, который примеряет его по всей заданной вами области.

делается это через функцию cvMatchTemplate.

вы это имели в виду?

ну и в чем отличие от cvMatchTemplate?

пожалуйста подскажите, как называется по-сивишному методы поиска текстур?

вроде в опенцв нету таких функций

погуглить можно texture segmentation

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

через маски не получилось. не различает цвета и вырезки из трассы, кот. использовались как шаблоны, сильно малы. (10*15 пикс. примерно)

отличие от cvMatchTemplate- подогнано на наши нужды по размеру и т.д.

у cvMatchTemplate есть несколько подфункций, с кот. можно больше поэксперементировать. погуглю, посмотрю... может чего вкусненькое найду... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

господа, cvMatchTemplate не идёт... поищю пойду фильтры посимпотичнее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот смотрите, это кусочек трассы,увеличенный на 800%. увеличьте его фотошопом и вы увидете, что это тяжёлый случай! думаю, что фильтры мало чего дадут, т.к.очень мелкий рисунок.

post-4612-0-86058600-1317215436_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну так интерполяция наверно + как я выше написал медианный\кувахара.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×