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

local binary patterns

Recommended Posts

Добрый день, разбираюсь с оператором LBP ссылки ниже

wiki_Local_binary_patterns

habrahabr

сама процедура получения из изображения LBP изображения понятна..

ниже приведу ссылки с исходниками для построения LBP и гистограммы

LBP

histogram

так вот мне не очень понятно в процедуре построения гистограммы что такое numPatterns


template <typename _Tp>

void lbp::histogram_(const Mat& src, Mat& hist, int numPatterns) {

	hist = Mat::zeros(1, numPatterns, CV_32SC1);

	for(int i = 0; i < src.rows; i++) {

		for(int j = 0; j < src.cols; j++) {

			int bin = src.at<_Tp>(i,j);

			hist.at<int>(0,bin) += 1;

		}

	}

}

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


Ссылка на сообщение
Поделиться на других сайтах
Через некоторое время было выяснено, что больше всего информации несут так называемые uniform patterns (к сожалению я так и не смог это перевести на русский язык, чтобы не резало слух). Суть заключается в том, что эти паттерны содержат не более определенного числа переходов от 0 к 1 в записи и наоборот. То есть числа 00011000 или 00000000 будут являться uniform patterns, а 00100100 — нет, если заданное число переходов — два (000переход11переход000 — uniform (2 перехода), 00переход1переход00переход1переход00 — нет(4 перехода).

не?

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


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

да мне как-то казалось, что зачем их число задавать... странно же... тем более этих uniform patterns не так уж много

тем более они создают гистограмму

hist = Mat::zeros(1, numPatterns, CV_32SC1);
а потом записывают туда значения
 int bin = src.at<_Tp>(i,j);

 hist.at<int>(0,bin) += 1;

где bin может быть от 0.. 255 ну из LBP преобразования.. поэтому я думаю всё же вряд ли это uniform patterns

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


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

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

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

тут еще

http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_tutorial.html#local-binary-patterns-histograms

So what’s left to do is how to incorporate the spatial information in the face recognition model. The representation proposed by Ahonen et. al [AHP04] is to divide the LBP image into local regions and extract a histogram from each. The spatially enhanced feature vector is then obtained by concatenating the local histograms (not merging them). These histograms are called Local Binary Patterns Histograms.

но я не уверен то ли это.

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


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

numPatterns - это количество шаблонов(всех) оно зависит от соседей.. если их 8 то соответственно имеем 256 различных шаблонов


 // get spatial histogram from this lbp image

        Mat p = spatial_histogram(

                lbp_image, /* lbp_image */

                static_cast<int>(std::pow(2.0, static_cast<double>(_neighbors))), /* number of possible patterns */

                _grid_x, /* grid size x */

                _grid_y, /* grid size y */

                true);

нашёл в исходниках opencv поэтому вопрос снимается, всё разрешилось :)

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


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

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

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


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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×