본문 바로가기

버츄얼유튜버

Density Map 작성법

import pylab as plt
import numpy as np

# Sample data
side = np.linspace(-2,2,4)  # (최소값, 최대값, 격자 수). side = (-2, 2, 4)인 경우, [-2.  -0.66666667  0.66666667  2. ]가 나옴. 즉 차=4, 간=3이니 4/3=1.3333... 차이의 배열이 생김.
X,Y = np.meshgrid(side,side)
print(X)
print(Y)
# Z = np.exp(-((X-1)**2+Y**2))  # 각 격자에 거기에 들어갈 값
Z = X * Y
print(Z)
# Plot the density map using nearest-neighbor interpolation
plt.pcolormesh(X,Y,Z)
plt.show()

[[-2.         -0.66666667  0.66666667  2.        ]
 [-2.         -0.66666667  0.66666667  2.        ]
 [-2.         -0.66666667  0.66666667  2.        ]
 [-2.         -0.66666667  0.66666667  2.        ]]
[[-2.         -2.         -2.         -2.        ]
 [-0.66666667 -0.66666667 -0.66666667 -0.66666667]
 [ 0.66666667  0.66666667  0.66666667  0.66666667]
 [ 2.          2.          2.          2.        ]]
[[ 4.          1.33333333 -1.33333333 -4.        ]
 [ 1.33333333  0.44444444 -0.44444444 -1.33333333]
 [-1.33333333 -0.44444444  0.44444444  1.33333333]
 [-4.         -1.33333333  1.33333333  4.        ]]

이를 통해 아래를 획득했고, 샘플이미지는 그 아래이다.

샘플 이미지

다음으로 대표 확인해야 하는 이미지에선 이걸 획득.


def pcolormesh(pred_map):
    # Sample data
    Xlen, Ylen = pred_map.shape[3], pred_map.shape[2]
    Xside, Yside = np.linspace(0, Xlen -1, Xlen), np.linspace(0, Ylen - 1, Ylen)
    X, Y = np.meshgrid(Xside, Yside)

    Z = []
    for i in range(Ylen-1, 0, -1):
        tmp = []
        for j in range(Xlen):
            try:
                tmp.append(pred_map[0][0][i][j])
            except:
                print(i, j)

        Z.append(tmp)
    Z = np.array(Z)

    # Plot the density map using nearest-neighbor interpolation
    plt.pcolormesh(X, Y, Z)
    plt.savefig('savefig_sample.png')

pred_map을 얻었을 떄, 위의 코드면 됨.

단, 이 때 pred_map은 (1,1,x,y) 사이즈임.