@staticmethod
def gauss_filter(sigma, epsilon=0.01):
    half_size = np.ceil((sigma * np.sqrt(((- 2) * np.log(((np.sqrt((2 * np.pi)) * sigma) * epsilon))))))
    size = np.int(((2 * half_size) + 1))
    filter_x = np.zeros((size, size))
    for i in range(size):
        for j in range(size):
            filter_x[(i, j)] = (MetricGRAD.gaussian((i - half_size), sigma) * MetricGRAD.dgaussian((j - half_size), sigma))
    norm = np.sqrt((filter_x ** 2).sum())
    filter_x = (filter_x / norm)
    filter_y = np.transpose(filter_x)
    return (filter_x, filter_y)
@staticmethod
def gauss_filter(sigma, epsilon=0.01):
    half_size = np.ceil((sigma * np.sqrt(((- 2) * np.log(((np.sqrt((2 * np.pi)) * sigma) * epsilon))))))
    size = np.int(((2 * half_size) + 1))
    filter_x = np.zeros((size, size))
    for i in range(size):
        for j in range(size):
            filter_x[(i, j)] = (MetricGRAD.gaussian((i - half_size), sigma) * MetricGRAD.dgaussian((j - half_size), sigma))
    norm = np.sqrt((filter_x ** 2).sum())
    filter_x = (filter_x / norm)
    filter_y = np.transpose(filter_x)
    return (filter_x, filter_y)