HOG 使用 OpenCV、HOGDescriptor 在 C++ 中进行可视化
Posted
技术标签:
【中文标题】HOG 使用 OpenCV、HOGDescriptor 在 C++ 中进行可视化【英文标题】:HOG features visualisation with OpenCV, HOGDescriptor in C++ 【发布时间】:2012-06-07 10:02:52 【问题描述】:我使用 OpenCV C++ Lib 的 HOGDescriptor 来计算图像的特征向量。我想可视化源图像中的特征。谁能帮我?
【问题讨论】:
对于任何想要从事此工作的人,这里有一个指向 HOG details 的链接,其中似乎包含了您需要弄清楚一些可视化的所有定义。 出色的 HOG 描述,但它并不能帮助我使用 OpenCV 可视化 C++ 中的功能。 你是认真的吗?没有这些定义,描述符中的值就没有上下文。你是说你已经了解了关于 HOG 的一切,但你只是不知道如何用 C++ 制作图形/GUI? 【参考方案1】:我今天遇到了完全相同的问题。使用 OpenCV 的 HOGDescriptor::compute()
函数为 64x128 图像计算 HOGDescriptor
向量很容易,但没有内置函数可以将其可视化。
最后我设法理解了梯度方向幅度是如何存储在 3870 长的 HOG 描述符向量中的。
您可以在此处找到用于可视化 HOGDescriptor
的 C++ 代码:
http://www.juergenbrauer.org/old_wiki/doku.php?id=public:hog_descriptor_computation_and_visualization
希望对你有帮助!
于尔根
【讨论】:
这就是我想要的。谢谢。 我注意到您的代码将索引序列“Y 轴到 X 轴”替换为“X 轴到 Y 轴”。 “for (int blockx=0; blockxHOGgles¹ 是一种为 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 月。
【讨论】:
你知道 HOGgles 的任何 python 实现吗?【参考方案3】:Thisopencv 群讨论引至a library written at Brown University。
在HOGpicture.m
中,您应该能够了解如何可视化描述符。这是相关的(matlab)代码。自己做点东西就够了吗?
(以下代码在MIT license下发布)
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
【讨论】:
谢谢。我很难阅读 Matlap 语法。我可以部分跟踪计算,但看不到它如何帮助我可视化特征。代码有说明吗? 我已经很多年没有使用Matlab了,所以对我来说也不是很明显。如果我有时间,我会在我能理解的代码中添加我自己的注释。假设你清楚地描述了在图像的每个像素中放置什么,你能从那里处理它吗?或者您是否需要 HOG 可视化技术以及如何使用 GUI 显示图像?请澄清您的问题。 我要HOG可视化技术。 你能告诉我特征向量的 1 个特征代表什么吗?例如。我有一个图像(64x128),每个单元格 8x8 像素和一个 2x2 单元格的块(每个图像 105 个块),每个 HOG 有 9 个箱(Dalal-triggs)。这会产生 3780 (= 105x2x2x9) 个特征。我如何可视化这些特征? 或者我如何表示图像源中的 3780 个特征中的 1 个?【参考方案4】:我为任何 blockSize
和 cellSize
重新实现 HOGImage,它基于 Jürgen Brauer 的。见https://github.com/zhouzq-thu/HOGImage。
【讨论】:
欢迎来到 Stack Overflow!虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。以上是关于HOG 使用 OpenCV、HOGDescriptor 在 C++ 中进行可视化的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV + HOG +SVM:SVM 单特征向量需要帮助