matlab中的梯度直方图

时间:2013-02-10 05:46:41

标签: matlab image-processing histogram

我试图弄清楚如何创建一个直方图数组来比较matlab中图像的梯度向量的大小和方向。我将使用sobel面具来找到渐变,到目前为止我已经:

sobel_x = [-1 -2 -1;0  0  0;1  2  1];
sobel_y = [-1  0  1;-2  0  2;-1  0  1];

gx = filter2(sobel_x,im,'same');
gy = filter2(sobel_y,im,'same');

现在我需要弄清楚如何创建直方图以将其与其他图像进行比较。

1 个答案:

答案 0 :(得分:6)

您可以将计算出的 gx gy 矩阵视为长矢量,然后将它们分组为大小为2 x的梯度向量(#number of gx gy )中的元素

% create the gradient vectors
    grad_vector(1,:) = gx(:);
    grad_vector(2,:) = gy(:);

然后您可以通过多种方式找到每个梯度向量的大小和方向,例如:

%find magnitude and direction of each gradient vector
    for i=1:size(grad_vector,2);
       magn(i) = norm(grad_vector(:,i));
       dir(i) = atand(grad_vector(2,i)/grad_vector(1,i));
    end

然后可以通过决定如何将结果分成多个箱来创建直方图。例如,您可以选择将方向划分为4个区间,将大小划分为3个,然后:

% find histograms, dividing into appropriate bins
    histdir = hist(dir,4);
    histmag = hist(magn,3);