<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def hog(img, options=None):
 """ HOG feature extractor. :param img: :param options: :return: HOG Feature for given image The output will have channels same as number of orientations. Height and Width will be reduced based on block-size and cell-size """

    op = _DEF_HOG_OPTS.copy()
    if options is not None:
        op.update(options)

    img = gray(img)
    img_fd = skimage.feature.hog(img,
                                 orientations=op['orientations'],
                                 pixels_per_cell=op['cell_size'],
                                 cells_per_block=op['block_size'],
                                 visualise=False)
    h, w = img.shape

    cx, cy = op['cell_size']
    n_cellsx, n_cellsy = w // cx, h // cy

    bx, by = op['block_size']
    n_blksx, n_blksy = (n_cellsx - bx) + 1, (n_cellsy - by) + 1

    hog_shape = n_blksy * by, n_blksx * bx, op['orientations']

    image_hog = np.reshape(img_fd, hog_shape)
    return image_hog