55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
import cv2 as cv
|
||
|
import os
|
||
|
import pyskyline
|
||
|
|
||
|
import pyskyline.localization
|
||
|
|
||
|
FILE = 'terrain'
|
||
|
SIZE = 256
|
||
|
X = SIZE//2
|
||
|
Y = SIZE//2
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
if os.path.isfile(f'{FILE}_{SIZE}.npz'):
|
||
|
print("Save detected, loading ...")
|
||
|
terrain = pyskyline.Terrain.load(f'{FILE}_{SIZE}')
|
||
|
else:
|
||
|
print("No save detected, generating new terrain ...")
|
||
|
terrain = pyskyline.Terrain.generate(size=SIZE)
|
||
|
terrain.compute_all_skylines()
|
||
|
terrain.save(f'{FILE}_{SIZE}')
|
||
|
print(f"Done, terrain saved as {FILE}_{SIZE}.npz")
|
||
|
|
||
|
# Output elevation map
|
||
|
cv.imwrite('elevation_map.jpg', terrain.dem.elevation)
|
||
|
|
||
|
# Output color map
|
||
|
cv.imwrite('color_map.jpg', terrain.dem.color)
|
||
|
|
||
|
# Ouput field of view visualization
|
||
|
cv.imwrite('fov.jpg', terrain.compute_fov(X, Y))
|
||
|
|
||
|
# Ouput skyline
|
||
|
skyline = terrain.compute_skyline(X, Y)
|
||
|
plt.figure()
|
||
|
plt.grid(False)
|
||
|
plt.plot(np.arange(-180,180,360/256),skyline)
|
||
|
plt.title('Skyline')
|
||
|
plt.savefig('skyline.svg')
|
||
|
|
||
|
# Generate heatmap
|
||
|
skyline = np.roll(skyline, 8) # Add heading error
|
||
|
skyline += np.random.normal(0,0.5, 256) # Add random noise
|
||
|
mosse_correlation = pyskyline.MosseCorrelation(terrain, skyline)
|
||
|
scoremap = mosse_correlation.generate_scoremap()
|
||
|
|
||
|
plt.figure()
|
||
|
plt.grid(False)
|
||
|
fig = plt.imshow(scoremap)
|
||
|
plt.title('Score map')
|
||
|
plt.colorbar(fig)
|
||
|
plt.savefig('scoremap.svg')
|
||
|
|