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

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

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

Ответы на вопрос(3)

это Обсуждение в группе 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
 ChHaupt03 июн. 2012 г., 14:20
Можете ли вы сказать мне, что представляет собой 1 особенность вектора признаков? Например. У меня есть изображение (64x128) с 8x8 px на ячейку и блок (105 блоков на изображение) из 2x2 ячеек с 9 корзинами на HOG (Dalal-triggs). Это приводит к 3780 (= 105x2x2x9) функциям. Как я визуализирую особенности?
 ChHaupt02 июн. 2012 г., 15:46
Спасибо. Мне трудно читать синтаксис Matlap. Я могу частично следить за вычислениями, но не понимаю, как это помогает мне визуализировать особенности. Есть ли описание к коду?
 02 июн. 2012 г., 15:58
Я не использовал Matlab в течение многих лет, поэтому для меня это не сразу очевидно. Если у меня будет время, я добавлю свои заметки в код, который я могу понять. Предполагая, что у вас есть четкое описание того, что помещать в каждый пиксель изображения, сможете ли вы справиться с этим оттуда? Или вы спрашиваете о технике визуализации HOG и о том, как отобразить изображение с помощью графического интерфейса? Пожалуйста, уточните свой вопрос.
 03 июн. 2012 г., 13:15
Тогда все, что вам нужно, это перевести код Matlab на C ++.
 ChHaupt02 июн. 2012 г., 16:03
Я спрашиваю о технике визуализации HOG.
Решение Вопроса

У меня была точно такая же проблема сегодня. Вычисление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

 28 июн. 2012 г., 17:41
ааа ... 3780 длинных дескрипторных векторов я имел ввиду на самом деле ...
 23 мая 2016 г., 09:06
Насколько я вижу, вычисление градиентов для каждой ячейки и визуализация градиентов для каждой ячейки независимы. Сначала можно пройти по всем строкам, а затем по всем столбцам (внешний цикл: для y ...) или наоборот (внешний цикл: для x ...). Это имеет значение только в том, что я рисую первым, но результат должен быть таким же. Кроме того, порядок информации о градиенте в векторе дескриптора HOG фиксирован, когда функциональность OpenCV используется для вычисления вектора дескриптора HOG.
 19 мая 2016 г., 00:26
Я заметил, что ваш код поменял местами последовательность индекса "ось 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.
 08 мая 2017 г., 21:13
Обновил ссылку. Должен работать снова.
 ChHaupt12 июл. 2012 г., 15:27
Это то, что я искал. Спасибо.

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

What does HOG sees?

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

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

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

 16 мар. 2018 г., 13:12
Вам известна какая-либо реализация HOGgles на python?

Ваш ответ на вопрос