Вопрос по c++ – HOG показывает визуализацию с помощью OpenCV, HOGDescriptor в C ++

13

Я использую HOGDescriptor в OpenCV C ++ Lib для вычисления векторов признаков изображений. Я хотел бы визуализировать функции в исходном изображении. Может кто-нибудь мне помочь?

Ты серьезно? Без этих определений нет контекста для значений в дескрипторах. Вы говорите, что уже все понимаете в HOG, но вы просто не знаете, как создать граф / графический интерфейс на C ++? KobeJohn
Отличное описание HOG, но это не поможет мне визуализировать функции в C ++ с OpenCV. ChHaupt
Для тех, кто хочет работать над этим, вот ссылка наHOG details который, кажется, включает в себя все определения, которые вам понадобятся, чтобы выяснить некоторые визуализации. KobeJohn

Ваш Ответ

3   ответа
2

это Обсуждение в группе opencv приводит кбиблиотека, написанная в Университете Брауна.

ВHOGpicture.m Вы должны быть в состоянии понять, как визуализировать дескрипторы. Вот соответствующий (Matlab) код. Вам достаточно сделать что-то для себя?

(ниже код выпущен подЛицензия MIT)

function im = HOGpicture(w, bs)

% HOGpicture(w, bs)
% Make picture of positive HOG weights.

% construct a "glyph" for each orientation
bim1 = zeros(bs, bs);
bim1(:,round(bs/2):round(bs/2)+1) = 1;
bim = zeros([size(bim1) 9]);
bim(:,:,1) = bim1;
for i = 2:9,
  bim(:,:,i) = imrotate(bim1, -(i-1)*20, 'crop');
end

% make pictures of positive weights bs adding up weighted glyphs
s = size(w);    
w(w < 0) = 0;    
im = zeros(bs*s(1), bs*s(2));
for i = 1:s(1),
  iis = (i-1)*bs+1:i*bs;
  for j = 1:s(2),
    jjs = (j-1)*bs+1:j*bs;          
    for k = 1:9,
      im(iis,jjs) = im(iis,jjs) + bim(:,:,k) * w(i,j,k);
    end
  end
end
Можете ли вы сказать мне, что представляет собой 1 особенность вектора признаков? Например. У меня есть изображение (64x128) с 8x8 px на ячейку и блок (105 блоков на изображение) из 2x2 ячеек с 9 корзинами на HOG (Dalal-triggs). Это приводит к 3780 (= 105x2x2x9) функциям. Как я визуализирую особенности? ChHaupt
Тогда все, что вам нужно, это перевести код Matlab на C ++.
Спасибо. Мне трудно читать синтаксис Matlap. Я могу частично следить за вычислениями, но не понимаю, как это помогает мне визуализировать особенности. Есть ли описание к коду? ChHaupt
Я не использовал Matlab в течение многих лет, поэтому для меня это не сразу очевидно. Если у меня будет время, я добавлю свои заметки в код, который я могу понять. Предполагая, что у вас есть четкое описание того, что помещать в каждый пиксель изображения, сможете ли вы справиться с этим оттуда? Или вы спрашиваете о технике визуализации HOG и о том, как отобразить изображение с помощью графического интерфейса? Пожалуйста, уточните свой вопрос.
Я спрашиваю о технике визуализации HOG. ChHaupt
27

У меня была точно такая же проблема сегодня. ВычислениеHOGDescriptor вектор для изображения 64x128 с использованием OpenCVHOGDescriptor::compute() Функция проста, но нет встроенной функциональности для ее визуализации.

Наконец мне удалось понять, как величины ориентации градиента хранятся в векторе дескриптора HOG длиной 3870.

Вы можете найти мой код C ++ для визуализацииHOGDescriptor Вот:

http://www.juergenbrauer.org/old_wiki/doku.php?id=public:hog_descriptor_computation_and_visualization

Надеюсь, поможет!

J & # XFC; RGEN

ааа ... 3780 длинных дескрипторных векторов я имел ввиду на самом деле ...
Я заметил, что ваш код поменял местами последовательность индекса "ось Y на ось X" с "от оси X до оси Y". & quot; для (int blockx = 0; blockx & lt; blocks_in_x_dir; blockx ++) & quot; этот раздел начинается с оси X, но когда вы его рисуете, & quot; for (celly = 0; celly & lt; cell_in_y_dir; celly ++) " Вы начали с оси Y. Это может привести к повороту объекта на 90 градусов в каждой ячейке, если кто-то использует ваш код и у него есть некоторая привычка кодирования, индексирующая от оси Y до X все время, когда он собирает объект HoG.
Насколько я вижу, вычисление градиентов для каждой ячейки и визуализация градиентов для каждой ячейки независимы. Сначала можно пройти по всем строкам, а затем по всем столбцам (внешний цикл: для y ...) или наоборот (внешний цикл: для x ...). Это имеет значение только в том, что я рисую первым, но результат должен быть таким же. Кроме того, порядок информации о градиенте в векторе дескриптора HOG фиксирован, когда функциональность OpenCV используется для вычисления вектора дескриптора HOG.
Обновил ссылку. Должен работать снова.
Это то, что я искал. Спасибо. ChHaupt
13

HOGgles & # xB9; это метод, разработанный для визуализации HOG, опубликованный на ICCV 2013. Вот пример:

What does HOG sees?

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

Более подробную информацию можно найти здесь:http://web.mit.edu/vondrick/ihog/


& # XB9; С. Вондрик, А. Хосла, Т. Малисевич, А. Торральба. & quot; HOGgles: Визуализация функций обнаружения объектов & quot; Международная конференция по компьютерному зрению (ICCV), Сидней, Австралия, декабрь 2013 г.

Вам известна какая-либо реализация HOGgles на python?

Похожие вопросы