不知道这个'直方图代码'正在做MATLAB

时间:2014-10-13 21:08:07

标签: matlab computer-vision histogram matlab-cvst quantization

我有以下代码给了我,但我完全不确定这里的逻辑是什么。我相信这个想法是这将直方图/量化我的数据。这是代码:

输入:

x = 180.*rand(1,1000); %1000 points from 0 to 180 degrees.
binWidth = 20;         %I want the binWidth to be 20 degrees.

主要功能:

% -------------------------------------------------------------------------
% Compute the closest bin center x1 that is less than or equal to x
% -------------------------------------------------------------------------

function [x1, b1] = computeLowerHistBin(x, binWidth)

% Bin index
bin = floor(x./binWidth - 0.5);

% Bin center x1
x1 = binWidth * (bin + 0.5);

% add 2 to get to 1-based indexing
b1 = bin + 2;
end

最后,最终的“量化”数据:

w = 1 - (x - x1)./binWidth

这是我没有得到的:我完全不明白 - 为什么x1的计算方式正是如此,以及为什么/如何w按照它的方式计算。事实上,在所有事情中,w最让我困惑。我实际上无法理解这里的逻辑,或者真正意图的是什么。希望详细说明这一逻辑。感谢。

1 个答案:

答案 0 :(得分:1)

他正在使用lb <= x < up进行分箱,并将[0,180]中的时间间隔[-10,10), [10, 30), [30,40) ..., [150,170), [170,190)分开。

假设x = 180,然后:

bin = floor(180/20-0.5) = floor(9-0.5) = floor(8.5) = 8; 

x = 0

bin = floor(`0/20-0.5) = floor(-0.5) = floor(-1) = -1; 

分别转换为x1 = 20 * (8+0.5) = 170x1 = -10,这似乎是函数建议的lowerHistBin()

最后,w只是测量点x距离相应的较低分档x1的距离。请注意,w位于(0,1),wx = x1时为1,在x -> x1+binWidth时接近0。因此,如果x表示接近170,则{{ 1}}将接近w