我使用 OpenCV C++ Lib 的 HOGDescriptor 来计算图像的特征向量。我想可视化源图像中的特征。谁能帮我?
4 回答
我今天遇到了完全相同的问题。使用 OpenCV 的函数计算HOGDescriptor
64x128 图像的矢量HOGDescriptor::compute()
很容易,但没有内置功能可以将其可视化。
最后,我设法理解了梯度方向幅度是如何存储在 3870 长的 HOG 描述符向量中的。
您可以在HOGDescriptor
此处找到用于可视化的 C++ 代码:
希望能帮助到你!
于尔根
HOGgles¹ 是一种为 HOG 可视化而开发的方法,发表在 ICCV 2013 上。下面是一个示例:
这种可视化工具可能比绘制 HOG 的梯度向量更有用,因为人们可以更好地了解 HOG 对给定样本失败的原因。
更多信息可以在这里找到:http ://web.mit.edu/vondrick/ihog/
¹C。Vondrick、A. Khosla、T. Malisiewicz、A. Torralba。“HOGGles: Visualizing Object Detection Features”国际计算机视觉会议 (ICCV),澳大利亚悉尼,2013 年 12 月。
这个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
blockSize
我为任何and重新实现 HOGImage cellSize
,它基于 Jürgen Brauer 的。见https://github.com/zhouzq-thu/HOGImage。