HOG

Johannes Schönberger jsch at demuc.de
Thu Aug 22 02:43:06 EDT 2013


It would be great if you could open a PR against your branch.

Am 21.08.2013 um 23:59 schrieb Jean K <jean.kossaifi at gmail.com>:

> My is accessible here : https://github.com/JeanKossaifi/scikit-image/tree/improve_hog
> I don't have my own computer so I couldn't run the tests yet, and there must be some issues: should I still do the pull request so we can discuss there?
> 
> Also, I think the interpolation has to be done on the bins before, otherwise, when we sum the histograms in each cells, the orientation would get mixed...
> 
> Regards,
> 
> Jean
> 
> On Wednesday, 21 August 2013 19:44:41 UTC+1, Johannes Schönberger wrote:
> Your ideas seem totally valid to me (if I understand correctly), but how about turning around the order of interpolation: 
> 
> 1. 2-D interpolation (x, y direction) 
> 2. Interpolation in the 3rd dimension, which could then easily be implemented with array slicing ``for i, j in pixel_per_cell: magnitude[i::pixels_per_cell, j::pixels_per_cell] and orientation[i::pixels_per_cell, j::pixels_per_cell]``. 
> 
> This should be basically the same, but you save some memory as you do not the (sx, sy, nbins) intermediate array. 
> 
> It would be great if you could open a PR with your code, then we can discuss in there :-) 
> 
> Regards, Johannes 
> 
> Am 21.08.2013 um 20:04 schrieb Jean K <jean.k... at gmail.com>: 
> 
> > Hi, 
> > 
> > Thank you for your answers :) 
> > 
> > @Johannes: For the tri-linear interpolation, you're absolutely right, and I spent a lot of time thinking about it. 
> > 
> > Eventually I thought of something: 
> > Let sx, sy be the size of the image, nbins the number of desired bins. 
> > First, we interpolate between the bins, from the original (sx, sy) image to a (sx, sy, nbins) array. 
> > Then we can notice that, inside each cell, we have pixels_per_cell_x * pixels_per_cell_y histograms, which position in the cell doesn't matter (because we are going to sum them up to have only one histogram per cell). 
> > We can thus virtually divide each cell in 4, each part being interpolated in the 4 diagonally adjacent sub-cells. 
> > As a result, each of the 4 sub-cell will be interpolated once in the same cell, and once in the 3 adjacent cells (which is exactly what interpolation is). 
> > The only thing to do is to multiply by the right coefficient. 
> > Here's an image to illustrate: We sum 4 times in the 4 diagonal directions. The coefficient for the sum can be represented by a single matrix which is turned. 
> > 
> > 
> > Finally you just sum the histograms in each cell to obtain the (n_cells_x, n_cells_y, nbins) desired orientation_histogram (which you can further normalise block-wise). 
> > 
> > 
> > So I implemented a version using this trick, based on the original code, and the result seems to be fast for & 160*160 image. 
> > However, as I said, I'm not perfectly sure of the result. 
> > 
> > Also, I separated the gradient computation from the binning so that the function can also be used for HOF. 
> > 
> > Maybe I could do a pull request so you can have a look on the code? 
> > 
> > Cheers, 
> > 
> > Jean 
> > 
> > 
> > On Wednesday, 21 August 2013 08:06:56 UTC+1, Johannes Schönberger wrote: 
> > Hi Jean, 
> > 
> > First of all, I am not an expert regarding HoG… :-) 
> > 
> > > 1) the way of computing the gradients ( if I'm not mistaking, you use a [-1, 1] filter when they use a centered one [-1, 0, 1]. 
> > 
> > Not sure why the original author of the implementation did use np.diff rather than central differences or even Sobel / Scharr and the like (apart from performance). It should return much better approximations of the gradient. 
> > 
> > > 2) They use tri-linear interpolation when here the you seem to use hard binning. 
> > 
> > The tri-linear interpolation seems to be the original approach, but I do not know of a simple way to implement it in pure Python in a fast way… I guess scipy.ndimage.map_coordinates might be very useful here. 
> > 
> > I think, these fixes would be both much appreciated! 
> > 
> > > Also, I tried to write another version, trying to stick as much as possible to Dalal&Triggs version, although I don't really know how to assess the results it produces. Would that be of interest? 
> > 
> > Yes, definitely. 
> > 
> > Johannes 
> > 
> > -- 
> > You received this message because you are subscribed to the Google Groups "scikit-image" group. 
> > To unsubscribe from this group and stop receiving emails from it, send an email to scikit-image... at googlegroups.com. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups "scikit-image" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to scikit-image+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.




More information about the scikit-image mailing list