Skip to content
Snippets Groups Projects
Commit abd34a4f authored by Raphael Sturgis's avatar Raphael Sturgis
Browse files

set boundaries for image and features

parent 51f21ad4
No related branches found
No related tags found
2 merge requests!17Resolve "Functionality for experiments using CNNs",!13Draft: Develop
This commit is part of merge request !17. Comments created here will be created in the context of that merge request.
...@@ -62,7 +62,7 @@ def apply_time_sequence(dat, time, func): ...@@ -62,7 +62,7 @@ def apply_time_sequence(dat, time, func):
def __get_image_value__(features, bounds): def __get_image_value__(features, bounds):
value = [] value = []
for f, b in zip(features, bounds): for f, b in zip(features, bounds):
value.append(1 - (b[1] - f) / b[1]) value.append(1 - (b[1] - f - b[0]) / (b[1] - b[0]))
return value return value
...@@ -236,12 +236,11 @@ class AISTrajectory(AISPoints): ...@@ -236,12 +236,11 @@ class AISTrajectory(AISPoints):
node_size=0): node_size=0):
nb_channels = 1 nb_channels = 1
if bounding_box == 'fit':
positions = self.df[['longitude', 'latitude']].to_numpy() positions = self.df[['longitude', 'latitude']].to_numpy()
if bounding_box == 'fit':
lower_lon, upper_lon = (min(positions[:, 0]), max(positions[:, 0])) lower_lon, upper_lon = (min(positions[:, 0]), max(positions[:, 0]))
lower_lat, upper_lat = (min(positions[:, 1]), max(positions[:, 1])) lower_lat, upper_lat = (min(positions[:, 1]), max(positions[:, 1]))
elif bounding_box == 'centered': elif bounding_box == 'centered':
positions = self.df[['longitude', 'latitude']].to_numpy()
center_lon, center_lat = positions[-1] center_lon, center_lat = positions[-1]
min_lon, max_lon = (min(positions[:, 0]), max(positions[:, 0])) min_lon, max_lon = (min(positions[:, 0]), max(positions[:, 0]))
min_lat, max_lat = (min(positions[:, 1]), max(positions[:, 1])) min_lat, max_lat = (min(positions[:, 1]), max(positions[:, 1]))
...@@ -253,7 +252,11 @@ class AISTrajectory(AISPoints): ...@@ -253,7 +252,11 @@ class AISTrajectory(AISPoints):
lower_lat = center_lat - distance_to_center lower_lat = center_lat - distance_to_center
upper_lon = center_lon + distance_to_center upper_lon = center_lon + distance_to_center
lower_lon = center_lon - distance_to_center lower_lon = center_lon - distance_to_center
elif type(bounding_box) is list:
upper_lon = bounding_box[1][0]
lower_lon = bounding_box[0][0]
upper_lat = bounding_box[1][1]
lower_lat = bounding_box[0][1]
else: else:
raise ValueError(f"Option not supported: {bounding_box}") raise ValueError(f"Option not supported: {bounding_box}")
...@@ -291,17 +294,23 @@ class AISTrajectory(AISPoints): ...@@ -291,17 +294,23 @@ class AISTrajectory(AISPoints):
data[x, y] = [1] data[x, y] = [1]
else: else:
bounds = []
if type(features) is list: if type(features) is list:
nb_channels = len(features) nb_channels = len(features)
features_vectors = self.df[features].to_numpy()
for c in features_vectors.T:
bounds.append((0, max(c)))
elif type(features) is str: elif type(features) is str:
features = [features] features_vectors = self.df[[features]].to_numpy()
for c in features_vectors.T:
bounds.append((0, max(c)))
elif type(features) is dict:
bounds = list(features.values())
features_vectors = self.df[features.keys()].to_numpy()
else: else:
raise TypeError("Type not supported") raise TypeError("Type not supported")
data = np.zeros((height, width, nb_channels), dtype=np.float) data = np.zeros((height, width, nb_channels), dtype=np.float)
features_vectors = self.df[features].to_numpy()
bounds = []
for c in features_vectors.T:
bounds.append((min(c), max(c)))
for pos, f in zip(positions, features_vectors): for pos, f in zip(positions, features_vectors):
latitude = pos[1] latitude = pos[1]
......
...@@ -380,6 +380,7 @@ class TestAISTrajectory(unittest.TestCase): ...@@ -380,6 +380,7 @@ class TestAISTrajectory(unittest.TestCase):
self.assertListEqual(result, expected) self.assertListEqual(result, expected)
class TestAISTrajectoryImageGeneration(unittest.TestCase): class TestAISTrajectoryImageGeneration(unittest.TestCase):
def setUp(self) -> None: def setUp(self) -> None:
self.trajectory = AISTrajectory( self.trajectory = AISTrajectory(
...@@ -408,7 +409,6 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase): ...@@ -408,7 +409,6 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase):
np.testing.assert_array_equal(result, expected) np.testing.assert_array_equal(result, expected)
def test_generate_array_from_positions_node_size(self): def test_generate_array_from_positions_node_size(self):
result = self.trajectory.generate_array_from_positions(height=9, width=9, link=False, bounding_box='fit', result = self.trajectory.generate_array_from_positions(height=9, width=9, link=False, bounding_box='fit',
features=None, node_size=1).reshape((9, 9)) features=None, node_size=1).reshape((9, 9))
expected = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 1], expected = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 1],
...@@ -539,15 +539,24 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase): ...@@ -539,15 +539,24 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase):
result = trajectory.generate_array_from_positions(height=9, width=18, link=True, bounding_box='fit', result = trajectory.generate_array_from_positions(height=9, width=18, link=True, bounding_box='fit',
features=['sog', 'cog'], node_size=0) features=['sog', 'cog'], node_size=0)
expected = np.array([[[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], expected = np.array([[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.25,1], [0.25,0.5], [0.25,0.5], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[[0,0], [0,0], [0,0], [0,0], [0,0], [0.25,1], [0.25,1], [0,0], [0,0], [0,0], [0.25,0.5], [0.25,0.5], [0,0], [0,0], [0,0], [0,0], [0,0], [0.5,0.25]], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0,0], [0,0], [0,0], [0.25,1], [0.25,1], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.25,0.5], [0.25,0.5], [0,0], [0,0], [0,0], [0.5,0.25]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[[0,0], [0.25,1], [0.25,1], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.25,0.5], [0.25,0.5], [0,0], [0.5,0.25]], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0.25,1], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0,0], [0.25,0.5], [0.5,0.25]]]) [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.25, 1], [0.25, 0.5],
[0.25, 0.5], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.25, 1], [0.25, 1], [0, 0], [0, 0], [0, 0],
[0.25, 0.5], [0.25, 0.5], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0, 0], [0, 0], [0, 0], [0.25, 1], [0.25, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[0, 0], [0, 0], [0.25, 0.5], [0.25, 0.5], [0, 0], [0, 0], [0, 0], [0.5, 0.25]],
[[0, 0], [0.25, 1], [0.25, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[0, 0], [0, 0], [0, 0], [0, 0], [0.25, 0.5], [0.25, 0.5], [0, 0], [0.5, 0.25]],
[[0.25, 1], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0],
[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.25, 0.5], [0.5, 0.25]]])
np.testing.assert_array_equal(result, expected) np.testing.assert_array_equal(result, expected)
...@@ -567,7 +576,8 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase): ...@@ -567,7 +576,8 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase):
np.testing.assert_array_equal(result, expected) np.testing.assert_array_equal(result, expected)
def test_generate_array_bounding_box(self): def test_generate_array_bounding_box(self):
result = self.trajectory.generate_array_from_positions(height=9, width=9, link=False, bounding_box=[(0, 0), (10,10)], result = self.trajectory.generate_array_from_positions(height=9, width=9, link=False,
bounding_box=[(0, 0), (10, 10)],
features=None, node_size=0).reshape((9, 9)) features=None, node_size=0).reshape((9, 9))
expected = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 1], expected = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
...@@ -577,11 +587,11 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase): ...@@ -577,11 +587,11 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase):
[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0]]) [1, 0, 0, 0, 0, 0, 0, 0, 1]])
np.testing.assert_array_equal(result, expected) np.testing.assert_array_equal(result, expected)
def test_generate_array_from_positions_with_line_grey_scale(self): def test_generate_array_feature_bounds(self):
trajectory = AISTrajectory( trajectory = AISTrajectory(
pd.DataFrame( pd.DataFrame(
{ {
...@@ -594,7 +604,7 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase): ...@@ -594,7 +604,7 @@ class TestAISTrajectoryImageGeneration(unittest.TestCase):
) )
result = trajectory.generate_array_from_positions(height=9, width=18, link=True, bounding_box='fit', result = trajectory.generate_array_from_positions(height=9, width=18, link=True, bounding_box='fit',
features=("sog", (0,80)), node_size=0).reshape((9, 18)) features={"sog": (0, 80)}, node_size=0).reshape((9, 18))
expected = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5], expected = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment