Как я могу получить кривую, используя Gradient Vector Flow? - PullRequest
0 голосов
/ 04 марта 2019

Я пытался реализовать Gradient Vector Flow, чтобы вычислить кривые, но я был смущен результатом, я получил векторное поле в результате, используя формулировку, и как я должен получить кривую, а не векторное поле?что мне делать?

def gradient_vector_flow(fx, fy, iter, mu, dx=1.0, dy=1.0, verbose=True):
    # calc gradient vector flow of input gradient field fx, fy
    b = fx ** 2.0 + fy ** 2.0
    c1, c2 = b * fx, b * fy
    r = 0.25  # (17) r < 1/4 required for convergence.
    dt = dx * dy / (r * mu)
    curr_u = fx
    curr_v = fy

    def laplacian(m):
        return (
            np.hstack([m[:, 0:1], m[:, :-1]])
            + np.hstack([m[:, 1:], m[:, -2:-1]])
            + np.vstack([m[0:1, :], m[:-1, :]])
            + np.vstack([m[1:, :], m[-2:-1, :]])
            - 4 * m
        )

    for i in range(iter):
        next_u = (1.0 - b * dt) * curr_u + r * laplacian(curr_u) + c1 * dt
        next_v = (1.0 - b * dt) * curr_v + r * laplacian(curr_v) + c2 * dt
        curr_u, curr_v = next_u, next_v
    return curr_u, curr_v
...