2013-02-18 3 views
7

У меня есть изображение Tug's Pugmark (следа следа) в грязи. Я хочу определить границу жгута, но изображение однородно по интенсивности, что на переднем плане, и фон не может быть выделен на основе изменений интенсивности. Что я могу сделать, чтобы провести различие между жгутом и фоном!обнаружение объекта в однородной интенсивности изображения

tiger's pugmark http://imageshack.us/a/img407/4636/p1060993g.jpg

+1

Проблема, вероятно, сложнее, чем вы думаете. Это может помочь, если вы подробно остановитесь на дальнейшем использовании этой границы, т. Е. Какая точность вам нужна? Если вы хотите просто обнаружить журавль или знать его направление, то точная граница не нужна. –

+0

вы обречены. : - (..... Это чрезвычайно сложная задача обработки изображений. – Shai

+0

@RomanShapovalov Позвольте мне рассказать вам, почему именно мне нужно отметить границы и отказаться от нерелевантной области. Мне нужно проанализировать мопс и на основе некоторых выбранных функций как область Пэда, область пальца ноги, угол между пальцами ноги 2 и 3, длина штыря, ширина и т. д., а затем после сравнения проанализированного изображения с набором тренировок я должен быть в состоянии отличить, какой тигр-жучок он есть. – Suvidha

ответ

7

В задачах сегментации, если у вас есть оба

  1. Хорошие маркеры; и
  2. Сильные края вокруг объекта интереса

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

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

enter image description hereenter image description here

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

enter image description here

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

enter image description here

Пример код для выполнения каждого шага (соответствующие шаги также показаны в прокомментировал Matlab код):

f = Import["http://imageshack.us/a/img407/4636/p1060993g.jpg"] 
g = ColorConvert[f, "Grayscale"]       (* g = rgb2gray(f); *) 
(* First image shown: *) 
geo = GeodesicOpening[g, DiskMatrix[5]] (* geo = imreconstruct(imerode(g, ... *) 
             (*   strel('disk', 6)), g);  *) 
(* Second image shown: *) 
marker = MaxDetect[geo]      (* marker = imregionalmax(geo); *) 

(* Watershed on gradient with markers. *) 
mgrad = ImageSubtract[Dilation[geo, 1], Erosion[geo, 1]]; (* mgrad = ...  *) 
      (* imdilate(geo,strel('square',3)) - imerode(geo,strel('square',3)); *) 
ws = Image[   (* ws = watershed(imimposemin(mgrad, bwmorph(imfill(... *) 
WatershedComponents[mgrad,  (* imregionalmax(geo),'holes'),'dilate')))); *) 
    Dilation[FillingTransform[marker], DiskMatrix[1]]]] 

(* Third image shown: *) 
wsthick = Erosion[ws // ImageAdjust, DiskMatrix[5]] 

(* Connected component selection based on some supposed sizes. *) 
ccs = SelectComponents[wsthick, "Count", 1000 < # < 3000 || 6000 < # < 10000 &] 

(* Final image (thick border on binarized filled dilated ccs) *) 
res = ImageAdd[f, Dilation[MorphologicalPerimeter[FillingTransform[ 
    MorphologicalPerimeter[Dilation[ccs, DiskMatrix[9]]]]], 2]] 
+0

Благодарим вас за ответ Позвольте мне рассказать вам, почему конкретно мне нужно отметить границы и отказаться от нерелевантной области. Мне нужно проанализировать мопс и на основе некоторых выбранных функций, таких как область Пэда, область пальца ноги, угол между пальцами ноги 2 и 3, длина штыря, ширина, и т. д., а затем, сравнив анализируемое изображение с учебным набором, я должен уметь отличить, какой тигр-жучок он есть. – Suvidha

+0

@ user2067773 Хорошо, я просто не знаю, почему вы мне это рассказываете. Но похоже, что вы пропустили один шаг в этом методе, который вы описали: сначала вам нужно иметь метод определения того, что у вас есть, это жгутик или нет, иначе бессмысленно его анализировать. – mmgp

+0

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

3

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

Active Shape Models каркас итерационно аппроксимирует границу формы. Во-первых, вы инициализировать его с некоторой средней формы (изображения только иллюстрации, а не фактический выход алгоритма):

Initialization of the shape

контур определяется опорными точками (показаны синим клещами, только для ладонь, чтобы избежать беспорядка).В каждой итерации алгоритма рассматриваются ортогональные направления в каждой точке привязки и оценивает вероятность границы на каждой дистанции (обычно с использованием градиента изображения, но в вашем случае это должно быть более сложным, - может быть разница в структуре, например, расстояние между histograms of textons). Здесь красные точки выделить ARG-максимумы этого распределения:

Modes of the edge-ness distribution

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

The new contour

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

Возможно, вы захотите попробовать this MATLAB implementation.

Смежные вопросы