-
Notifications
You must be signed in to change notification settings - Fork 13
/
read.py
148 lines (123 loc) · 4.02 KB
/
read.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import os.path
import csv
import sys
import numpy as np
import skimage.io
CITY_METADATA_DICT = {
"bloomington": {
"fold": "test",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"bellingham": {
"fold": "test",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"innsbruck": {
"fold": "test",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"sfo": {
"fold": "test",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"tyrol-e": {
"fold": "test",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"austin": {
"fold": "train",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"chicago": {
"fold": "train",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"kitsap": {
"fold": "train",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"tyrol-w": {
"fold": "train",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
"vienna": {
"fold": "train",
"pixelsize": 0.3,
"numbers": list(range(1, 37)),
},
}
IMAGE_DIR_NAME = "images"
IMAGE_NAME_FORMAT = "{city}{number}"
IMAGE_FILENAME_FORMAT = IMAGE_NAME_FORMAT + ".tif" # City name, number
POLYGON_DIRNAME = "gt_polygons"
POLYGONS_FILENAME_FORMAT = IMAGE_NAME_FORMAT + ".npy" # City name, number
def get_tile_info_list():
tile_info_list = []
for city, info in CITY_METADATA_DICT.items():
for number in info["numbers"]:
image_info = {
"city": city,
"number": number,
}
tile_info_list.append(image_info)
return tile_info_list
def get_image_filepath(raw_dirpath, city, number):
fold = CITY_METADATA_DICT[city]["fold"]
filename = IMAGE_FILENAME_FORMAT.format(city=city, number=number)
filepath = os.path.join(raw_dirpath, fold, IMAGE_DIR_NAME, filename)
return filepath
def get_polygons_filepath(raw_dirpath, polygon_dirname, city, number, overwrite_polygons_filename_format=None):
if overwrite_polygons_filename_format is None:
polygons_filename_format = POLYGONS_FILENAME_FORMAT
else:
polygons_filename_format = overwrite_polygons_filename_format
fold = CITY_METADATA_DICT[city]["fold"]
filename = polygons_filename_format.format(city=city, number=number)
filepath = os.path.join(raw_dirpath, fold, polygon_dirname, filename)
return filepath
def load_image(raw_dirpath, city, number):
filepath = get_image_filepath(raw_dirpath, city, number)
image_array = skimage.io.imread(filepath)
# The following is writen this way for future image-specific addition of metadata:
image_metadata = {
"filepath": filepath,
"pixelsize": CITY_METADATA_DICT[city]["pixelsize"]
}
return image_array, image_metadata
def load_polygons(raw_dirpath, polygon_dirname, city, number):
filepath = get_polygons_filepath(raw_dirpath, polygon_dirname, city, number)
try:
gt_polygons = np.load(filepath)
except FileNotFoundError:
print("City {}, number {} does not have gt polygons in directory {}".format(city, number, polygon_dirname))
gt_polygons = None
return gt_polygons
def load_gt_data(raw_dirpath, city, number, overwrite_polygon_dir_name=None):
if overwrite_polygon_dir_name is None:
polygon_dirname = POLYGON_DIRNAME
else:
polygon_dirname = overwrite_polygon_dir_name
# Load image
image_array, image_metadata = load_image(raw_dirpath, city, number)
# Load polygon data
gt_polygons = load_polygons(raw_dirpath, polygon_dirname, city, number)
return image_array, image_metadata, gt_polygons
def main():
raw_dirpath = "raw"
city = "bloomington"
number = 1
image_array, image_metadata, gt_polygons = load_gt_data(raw_dirpath, city, number)
print(image_array.shape)
print(image_metadata)
print(gt_polygons)
if __name__ == "__main__":
main()