3

Я хочу определить содержание изображения, что мне нужно сделать, это найти, если изображение рубашки или брюки.Обнаружение объекта для идентификации объекта на изображении

Img 1 enter image description here

Img 2 enter image description here

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

То, что я пробовал, - это каскадирование Harr, но оно не давало правильного выхода. И этот избыточный размер образца слишком большой

ответ

1

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

Вы также можете использовать детектор свойств + дескриптор + классификатор (например, SURF + SVM). Хотя в настоящее время существуют более надежные и быстрые детекторы функций ...

Чтобы избежать тренировочного процесса, вы даже можете попытаться использовать сопоставление шаблонов (для каждого плана). Один такой алгоритм предусмотрен на: Fast template matching - Codeproject

Хаара каскад используется для обнаружения объекта в изображениях, которые содержат другие материалы, а также, как это emloys обнаружения скользящего окна + он содержит этапы, которые компромисс между производительностью и надежностью - они бывают быстрыми, но некоторые объекты могут быть пропущены, потому что каждый этап подвержен ошибкам пропущенной классификации, которые накапливаются.

+1

Привет Dajuric: соответствующий шаблон будет делать здесь? bez работает только для одного изображения нет? означает проверить здесь http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html – usernan

+1

Можете ли вы предоставить мне любые примеры для SURF + SVM – usernan

+1

Это это другой тип соответствия шаблонов, где вы можете создавать несколько шаблонов экземпляров. См. Статью (ссылка). – dajuric

1

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

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

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

EDIT: Некоторые примеры кода MATLAB:

function ratio=TwoRunFeature(I) 
    g=rgb2gray(I); 
    b=imdilate(g<255,ones(5)); 
    d=abs(imfilter(b,[-1 1])); 
    runs=sum(d,2); 
    ratio=sum(runs==2)/sum(runs==1); 
end 

function TestImage(name) 
    I=imread(name); 
    fprintf('%s: %f\n',name,TwoRunFeature(I)); 
end 

TestImage('pants.jpg'); 
TestImage('shirt.jpg'); 

Печать:

pants.jpg: 1.947977 
shirt.jpg: 0.068627 

штаны будут давать высокие цифры и рубашки низкие. Просто порог где угодно, и все готово.

+1

Hi Photon может предоставить любую ссылку для ссылки – usernan

+1

Это действительно довольно тривиально. Я добавлю некоторый код matlab для показа. – Photon

+1

Спасибо фотону, но проблема в том, что если я хочу обнаружить половину пенты против брюки, тогда это не сработает в это время – usernan

1

Предполагаю, что эти два изображения взяты из базы данных. Из моего опыта, применение функций (локальных дескрипторов) на таких изображениях создаст своего рода искусственные функции из-за сегментации или установки фона для uni color. Второй важный момент в вашем случае, что эти изображения могут иметь разные цвета или текстуры, а большинство обнаруженных объектов будут поступать из областей внутри объекта. Эти регионы не важны и не имеют никакого отношения к классификации. Но если сегментированное изображение должно сделать проблему намного проще. Лучшее и самое простое решение для вашего случая: 1. Преобразуйте изображение в серое, а затем в двоичное по пороговому значению. 2. Обратное изображение, поэтому фон черный, а объект белый. 3. Заполните отверстия: если какая-либо часть изображения внутри объекта белая, это приведет к отверстиям. 4. Теперь обнаружим только границу. По I = расширенный IBinary - IBinary 5. Пример границы: Выберите только один ненулевой пиксель в каждом окне размером 4x4 6. Следующим шагом будет использование дескриптора контекста Shape: для описания вашего изображения. 7. Используя сумку визуальных слов или разреженное кодирование, повторно представляйте изображение. 8. Максимальное объединение, чтобы получить богатое представление. 9- SVM

+0

Hi BH85 может предоставить мне любую ссылку для ссылки – usernan

+0

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.8567 – BH85