It is a bit difficult to comment on the VL code as it isnt mine, but I think the difference comes from how the normalization of the cells on the boundary is treated.
The cells on the left and bottom boundary only belong to two blocks (or in some cases one). For example there is no block starting at a cell on the left boundary and extending to the left as that would take it outside the image. Thus a 256x256 image only has 63*63 blocks of size 2x2.
If I understand the VL code correctly ,hog.c line 927 and onward, it assumes that every cell belongs to 4 blocks. For the case of boudary cells, where this assumption does not hold, certain block normalization schemes are simply repeated to make up the four blocks, see lines 932-935. So if I am correct, for boundary cells, there should be repetitions in the final descriptor of the VL code. Though obviously you shouldnt cite me on this :)
Hope this helps.
i'm trying to use your code. For an image of size 256x256, with default parameters i'm obtaining a vector of size - 142884 (63*63*9*4). However, using the vl_hog function (from VLFeat.org) with the same parameters im getting a vector of size-147456 (64*64*9*4). Could you clarify this? Furthermore, could you tell me for example how to fold the output vector back (as 3D) in case of signed case. Thanks,