def closest_allzero_pixel(self, pixel, direction, w=13, t=0.5):
        """Starting at pixel, moves pixel by direction * t until all
        zero pixels within a radius w of pixel. Then, returns pixel.

        Parameters
        ----------
        pixel : :obj:`numpy.ndarray` of float
            The initial pixel location at which to start.

        direction : :obj:`numpy.ndarray` of float
            The 2D direction vector in which to move pixel.

        w : int
            A circular diameter in which to check for zero pixels.
            As soon as the current pixel has all zero pixels with a diameter
            w of it, this function returns the current pixel location.

        t : float
            The step size with which to move pixel along direction.

        Returns
        -------
        :obj:`numpy.ndarray` of float
            The first pixel location along the direction vector at which there
            exists all zero pixels within a radius w.
        """
        # create circular structure for checking clearance
        y, x = np.meshgrid(np.arange(w) - w / 2, np.arange(w) - w / 2)

        cur_px_y = np.ravel(y + pixel[0]).astype(np.uint16)
        cur_px_x = np.ravel(x + pixel[1]).astype(np.uint16)
        
        # Check if all pixels in radius are in bounds and zero-valued
        empty = False
        if np.all(
            cur_px_y >= 0) and np.all(
            cur_px_y < self.height) and np.all(
            cur_px_x >= 0) and np.all(
                cur_px_x < self.width):
            empty = np.all(self[cur_px_y, cur_px_x] <= self._threshold)
        else:
            return None
        
        # If some nonzero pixels, continue incrementing along direction
        # and checking for empty space
        while not empty:
            pixel = pixel + t * direction
            cur_px_y = np.ravel(y + pixel[0]).astype(np.uint16)
            cur_px_x = np.ravel(x + pixel[1]).astype(np.uint16)
            if np.all(
                cur_px_y >= 0) and np.all(
                cur_px_y < self.height) and np.all(
                cur_px_x >= 0) and np.all(
                    cur_px_x < self.width):
                empty = np.all(self[cur_px_y, cur_px_x] <= self._threshold)
            else:
                return None
                
        return pixel