Skip to content
Snippets Groups Projects
Commit 6836d951 authored by Tamino Huxohl's avatar Tamino Huxohl
Browse files

change segments in get perfusion and script can now update existing csv file

parent 06088b28
No related branches found
No related tags found
No related merge requests found
...@@ -16,23 +16,23 @@ class PolarMapSegment: ...@@ -16,23 +16,23 @@ class PolarMapSegment:
# see https://www.ahajournals.org/doi/full/10.1161/hc0402.102975 # see https://www.ahajournals.org/doi/full/10.1161/hc0402.102975
SEGMENTS = [ SEGMENTS = [
PolarMapSegment( id=1, location="basal", name="anterior", rect=( 29, 302, 53, 328)), PolarMapSegment( id=1, location="basal", name="anterior", rect=( 27, 281, 27+22, 281+29)),
PolarMapSegment( id=2, location="basal", name="anteroseptal", rect=(166, 61, 190, 91)), PolarMapSegment( id=2, location="basal", name="anteroseptal", rect=(156, 59, 156+22, 59+30)),
PolarMapSegment( id=3, location="basal", name="inferoseptal", rect=(438, 63, 463, 91)), PolarMapSegment( id=3, location="basal", name="inferoseptal", rect=(411, 58, 411+22, 58+29)),
PolarMapSegment( id=4, location="basal", name="inferior", rect=(577, 299, 600, 329)), PolarMapSegment( id=4, location="basal", name="inferior", rect=(540, 280, 540+22,280+29)),
PolarMapSegment( id=5, location="basal", name="inferolateral", rect=(439, 539, 463, 565)), PolarMapSegment( id=5, location="basal", name="inferolateral", rect=(411, 503, 411+22, 503+29)),
PolarMapSegment( id=6, location="basal", name="anterolateral", rect=(166, 539, 191, 567)), PolarMapSegment( id=6, location="basal", name="anterolateral", rect=(156, 503, 156+22, 503+29)),
PolarMapSegment( id=7, location="mid", name="anterior", rect=(107, 301, 131, 329)), PolarMapSegment( id=7, location="mid", name="anterior", rect=(100, 281, 100+22, 281+29)),
PolarMapSegment( id=8, location="mid", name="anteroseptal", rect=(205, 131, 230, 159)), PolarMapSegment( id=8, location="mid", name="anteroseptal", rect=(192, 122, 192+22, 122+29)),
PolarMapSegment( id=9, location="mid", name="inferoseptal", rect=(399, 132, 425, 159)), PolarMapSegment( id=9, location="mid", name="inferoseptal", rect=(375, 122, 372+22, 122+29)),
PolarMapSegment(id=10, location="mid", name="inferior", rect=(498, 301, 522, 328)), PolarMapSegment(id=10, location="mid", name="inferior", rect=(467, 280, 467+22, 280+29)),
PolarMapSegment(id=11, location="mid", name="inferolateral", rect=(400, 471, 425, 498)), PolarMapSegment(id=11, location="mid", name="inferolateral", rect=(375, 439, 375+22, 439+29)),
PolarMapSegment(id=12, location="mid", name="anterolateral", rect=(206, 471, 228, 497)), PolarMapSegment(id=12, location="mid", name="anterolateral", rect=(192, 439, 192+22, 439+29)),
PolarMapSegment(id=13, location="apical", name="anterior", rect=(185, 302, 209, 328)), PolarMapSegment(id=13, location="apical", name="anterior", rect=(174, 281, 174+22, 281+29)),
PolarMapSegment(id=14, location="apical", name="septal", rect=(304, 184, 328, 210)), PolarMapSegment(id=14, location="apical", name="septal", rect=(284, 171, 284+22, 171+29)),
PolarMapSegment(id=15, location="apical", name="inferior", rect=(421, 301, 445, 327)), PolarMapSegment(id=15, location="apical", name="inferior", rect=(394, 280, 394+22, 280+30)),
PolarMapSegment(id=16, location="apical", name="lateral", rect=(303, 418, 328, 445)), PolarMapSegment(id=16, location="apical", name="lateral", rect=(284, 391, 284+22, 391+29)),
PolarMapSegment(id=17, location="apex", name="apex", rect=(304, 302, 329, 329)), PolarMapSegment(id=17, location="apex", name="apex", rect=(284, 281, 284+22, 281+29)),
] ]
...@@ -87,20 +87,31 @@ if __name__ == "__main__": ...@@ -87,20 +87,31 @@ if __name__ == "__main__":
data = pd.read_csv(args.csv) data = pd.read_csv(args.csv)
data = data[data[headers.segments]] data = data[data[headers.segments]]
rows = [] if os.path.isfile(args.perfusion_csv):
perfusion = pd.read_csv(args.perfusion_csv)
else:
perfusion = pd.DataFrame()
for i in range(len(data)): for i in range(len(data)):
row = data.iloc[i] row = data.iloc[i]
_id = row[headers.id] _id = row[headers.id]
_file = os.path.join(args.images_dir, row[headers.file]) _file = row[headers.file]
if _file in perfusion["file"].values:
print(f"SKIP file {_file} as perfusion scores are already in {args.perfusion_csv}")
continue
else:
print(f"Process {_file} ...")
polar_map = cv.imread(_file) polar_map = cv.imread(os.path.join(args.images_dir, _file))
for segment in SEGMENTS: for segment in SEGMENTS:
# extract number segment # extract number segment
top, left, bottom, right = segment.rect top, left, bottom, right = segment.rect
img_number = polar_map[top:bottom, left:right] img_number = polar_map[top:bottom, left:right]
# process segment for improved automatic number detection # process segment for improved automatic number detection
img_number = cv.resize(img_number, (args.number_res, args.number_res)) scale = args.number_res / img_number.shape[1]
img_number = cv.resize(img_number, None, fx=scale, fy=scale)
img_number = cv.cvtColor(img_number, cv.COLOR_BGR2HSV) img_number = cv.cvtColor(img_number, cv.COLOR_BGR2HSV)
img_number = cv.inRange(img_number, hsv_green_lower, hsv_green_upper) img_number = cv.inRange(img_number, hsv_green_lower, hsv_green_upper)
img_number = cv.morphologyEx(img_number, cv.MORPH_CLOSE, np.ones((4, 4), np.uint8)) img_number = cv.morphologyEx(img_number, cv.MORPH_CLOSE, np.ones((4, 4), np.uint8))
...@@ -116,7 +127,8 @@ if __name__ == "__main__": ...@@ -116,7 +127,8 @@ if __name__ == "__main__":
_polar_map = cv.rectangle(_polar_map, (left, top), (right, bottom), (255, 255, 255), 1) _polar_map = cv.rectangle(_polar_map, (left, top), (right, bottom), (255, 255, 255), 1)
_polar_map = cv.resize(_polar_map, (512, 512)) _polar_map = cv.resize(_polar_map, (512, 512))
img_number = img_number.repeat(3).reshape((*img_number.shape, 3)) img_number = img_number.repeat(3).reshape((*img_number.shape, 3))
img_number = cv.resize(img_number, (512, 512)) scale = 512 / img_number.shape[0]
img_number = cv.resize(img_number, None, fx=scale, fy=scale)
space_h = np.full((512, 10, 3), 239, np.uint8) space_h = np.full((512, 10, 3), 239, np.uint8)
cv.imshow("Polar Map - Segment", np.hstack((_polar_map, space_h, img_number))) cv.imshow("Polar Map - Segment", np.hstack((_polar_map, space_h, img_number)))
...@@ -138,7 +150,8 @@ if __name__ == "__main__": ...@@ -138,7 +150,8 @@ if __name__ == "__main__":
_value = pd.Series({f"segment_{segment.id}": number}) _value = pd.Series({f"segment_{segment.id}": number})
row = pd.concat([row, _value]) row = pd.concat([row, _value])
rows.append(row) perfusion = perfusion.append(row, ignore_index=True)
pd.DataFrame(rows).to_csv(args.perfusion_csv) perfusion = perfusion.sort_values(by=["id", "file"])
perfusion.to_csv(args.perfusion_csv, index=False)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment