2014-10-06 2 views
-1

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

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

Matching object outer shape using normalized cross correlation

Спасибо за любую помощь

ответ

1

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

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

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

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

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

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


Редактировать

Теперь, когда я понимаю, что вы действительно после того, как вы хотите, чтобы определить маску программно. В частности, вы хотите определить круговую маску, которая была замечена в сообщении, на которое вы ссылаетесь. Это очень просто для кода в MATLAB. Это круглое кольцо, которое вы видите, имеет два радиусы: внутреннее кольцо и наружное кольцо. То, что вы сделали бы, это вычислить евклидово расстояние от центра этого изображения до каждой точки маски. Точки, которые являются >= радиусу внутреннего кольца и <= радиусу наружного кольца, будут установлены в true, тогда как все остальное установлено на false. Таким образом, общие этапы:

  1. Укажите размеры маски, которые вы хотите, так как это неизбежно будет зависеть от размера вашего шаблона, и вы хотите, чтобы это соответствовало этому размеру. Кроме того, вам необходимо указать внутренний и внешний радиус круговой маски.
  2. Создайте 2D-сетку координат, где (0,0) является центральным изображением. Используйте meshgrid, чтобы сделать это за вас.
  3. Вычислить евклидово расстояние от этого центра до каждой точки вашего изображения.
  4. Для каждого расчетного расстояния проверьте, соответствует ли эта точка >= радиус внутреннего кольца и <= радиус наружного кольца. Если это так, установите для этого значение true и false.

Как таковой:

%// Dimensions of image 
%// Change here accordingly 
rows = 101; 
cols = 101; 

%// Radii - Change accordingly 
%// Inner ring radius 
inner_radius = 20; 

%// Outer ring radius 
outer_radius = 40; 

%// Define grid of points 
[X,Y] = meshgrid(-floor(cols/2):floor(cols/2), -floor(rows/2):floor(rows/2)); 

%// Find Euclidean distance with respect to the centre of the image 
dists = sqrt(X.^2 + Y.^2); 

%// Find those points that are within the inner and outer radii 
out = dists >= inner_radius & dists <= outer_radius; 

%// Cap to ensure same mask size 
out = out(1:rows,1:cols); 

Обратите особое внимание последнего утверждения. Если вам нужно указать нечетные размеры, то по отношению к центру маски правильны координаты относительно центра. Например, если мы выбрали строки равными 101, тогда это должно составлять от -50 до 50, включая центр, так что это точно соответствует 101 балл. Если мы укажем ... скажем ... 100, при использовании meshgrid вы будете еще получить координаты от -50 до 50, и поэтому это все равно даст нам маску из 101 точки в вертикальном направлении (строки) , Чтобы убедиться, что у вас есть шаблон, который соответствует указанным параметрам, мы хотим убедиться, что вы выберете то же количество строк и столбцов, которые вы указали в начале после вычисления маски. Разница заключается только в одной границе пикселя, поэтому это не имеет большого значения ... но если вы приверженцы и хотите иметь одинаковые размеры, то это то, что вам нужно будет сделать.


Если мы указываем rows = 101, cols = 101, inner_radius = 20, outer_radius = 40, это маска я получаю:

enter image description here

+0

Я понимаю, что это конкретная и причина того, что я спрашиваю, что у меня есть точно такой же конкретное применение. Возвращаясь к моему первоначальному сообщению здесь http://stackoverflow.com/questions/26066297/masks-in-template-matching Я пробовал только использовать белый цвет, но в итоге я ничего не менял и даже если бы удалось, я не смог изменить часть стандартных отклонений, которая является знаменателем в корреляционной функции.Я попытался создать маску 1s и 0s, которая была похожа на шаблон и попыталась реализовать его в сообщении, но нигде не попала. – ajacobs

+0

@ajacobs Это сообщение вы сделали недостающие информации. Я не знаю, какую маску вы хотите создать, или какой предмет вы хотите обнаружить. Как только вы это знаете, вы можете выяснить, какую маску вы хотите использовать. Некоторые простые формы, такие как круглые или даже прямоугольные, очень просты в изготовлении. Пожалуйста, отредактируйте свое оригинальное сообщение, чтобы включить дополнительную информацию о том, что именно вы пытаетесь найти. – rayryeng

+0

Я хочу сделать именно то, что человек задал в оригинальной записи, которую я сначала связал с – ajacobs

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