如何用梯度加权直方图?

时间:2014-10-25 17:30:04

标签: matlab histogram gradient convolution

我试图建立一个颜色直方图描述符 this paper ...用地图加权图像的颜色..这个地图是用两个颜色通道计算图像的渐变得到的,第一个是红色,第二个是绿色和蓝色之间的平均值。首先,我试图获得图1所示的结果,但没有成功......也许我不理解这种方法,但听起来很简单....这是我的代码:

    %Lowpass
h = fspecial('gaussian');
I = imfilter(img,h);

I1 = img(:,:,1);
I2 = img(:,:,2);
I3 = img(:,:,3);

F = I1;
G = (I2 + I3)/2;

dx = [-1; 0; 1];
Fx = conv2(F,dx,'same');
Gx = conv2(G,dx,'same');

dy = [-1 0 1]; 
Fy = conv2(F,dy,'same');
Gy = conv2(G,dy,'same'); M = abs(Fx.*Gy - Fy.*Gx);

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我还没有阅读整篇论文,但据我所知,你计算的掩码M似乎是正确的。

再次没有太多的信心,我认为这个面具的每个元素都是一个重量'为了颜色'对应的像素。颜色被解释为RGB空间中的三维坐标,并且纸张表明它们仅用5个分区解析每个颜色通道,从而产生5x5x5矩阵或125色直方图。

您在代码中未写入的过程是权重的实际分级。对于此任务,您不能简单地使用histhistc,因为虽然分档是由其颜色指定的,但每个像素与该颜色的贡献是不同的。我认为在这种情况下,您需要函数accumarray才能将权重分组到各自的颜色区。假设颜色值在[0,1]中运行,这是你的直方图:

C = 1 + floor( (5-1e-15)*[I1(:),I2(:),I3(:)] ); % put colors in {1,2,3,4,5}
H = accumarray( C, M(:), [5,5,5] );