Update app.py
Browse files
app.py
CHANGED
|
@@ -98,6 +98,7 @@ class DicomAnalyzer:
|
|
| 98 |
except Exception as e:
|
| 99 |
print(f"Error loading DICOM file: {str(e)}")
|
| 100 |
return None, f"Error loading DICOM file: {str(e)}"
|
|
|
|
| 101 |
def normalize_image(self, image):
|
| 102 |
try:
|
| 103 |
normalized = cv2.normalize(
|
|
@@ -114,7 +115,6 @@ class DicomAnalyzer:
|
|
| 114 |
except Exception as e:
|
| 115 |
print(f"Error normalizing image: {str(e)}")
|
| 116 |
return None
|
| 117 |
-
|
| 118 |
def reset_view(self):
|
| 119 |
self.zoom_factor = 1.0
|
| 120 |
self.pan_x = 0
|
|
@@ -419,7 +419,9 @@ class DicomAnalyzer:
|
|
| 419 |
current_row = 32
|
| 420 |
|
| 421 |
# Headers for StdDev Averages
|
| 422 |
-
ws.cell(row=current_row, column=1, value="StdDev Averages")
|
|
|
|
|
|
|
| 423 |
current_row += 1
|
| 424 |
|
| 425 |
# Calculate StdDev averages for each row pair
|
|
@@ -435,32 +437,44 @@ class DicomAnalyzer:
|
|
| 435 |
|
| 436 |
if stddev_values:
|
| 437 |
avg = sum(stddev_values) / len(stddev_values)
|
| 438 |
-
ws.cell(row=current_row, column=1, value=size)
|
| 439 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 440 |
current_row += 1
|
| 441 |
|
| 442 |
current_row += 2 # Space between tables
|
| 443 |
|
| 444 |
# Headers for CNR Averages
|
| 445 |
-
ws.cell(row=current_row, column=1, value="CNR Averages")
|
|
|
|
|
|
|
| 446 |
current_row += 1
|
| 447 |
|
| 448 |
# Calculate CNR averages for each row pair
|
| 449 |
for i, size in enumerate(phantom_sizes):
|
| 450 |
row_number = row_pairs[i][1] # Second row for CNR
|
| 451 |
-
|
| 452 |
|
|
|
|
| 453 |
for cols in column_groups:
|
| 454 |
formula_col = get_column_letter(column_index_from_string(cols[-1]) + 1)
|
| 455 |
-
|
| 456 |
-
|
| 457 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 458 |
|
| 459 |
-
if cnr_values:
|
| 460 |
-
formula = f"=AVERAGE({','.join(cnr_values)})"
|
| 461 |
-
ws.cell(row=current_row, column=1, value=size)
|
| 462 |
-
cell = ws.cell(row=current_row, column=2, value=formula)
|
| 463 |
-
cell.number_format = '0.000'
|
| 464 |
current_row += 1
|
| 465 |
|
| 466 |
# Format the tables
|
|
|
|
| 98 |
except Exception as e:
|
| 99 |
print(f"Error loading DICOM file: {str(e)}")
|
| 100 |
return None, f"Error loading DICOM file: {str(e)}"
|
| 101 |
+
|
| 102 |
def normalize_image(self, image):
|
| 103 |
try:
|
| 104 |
normalized = cv2.normalize(
|
|
|
|
| 115 |
except Exception as e:
|
| 116 |
print(f"Error normalizing image: {str(e)}")
|
| 117 |
return None
|
|
|
|
| 118 |
def reset_view(self):
|
| 119 |
self.zoom_factor = 1.0
|
| 120 |
self.pan_x = 0
|
|
|
|
| 419 |
current_row = 32
|
| 420 |
|
| 421 |
# Headers for StdDev Averages
|
| 422 |
+
stddev_header = ws.cell(row=current_row, column=1, value="StdDev Averages")
|
| 423 |
+
stddev_header.font = red_font
|
| 424 |
+
stddev_header.alignment = center_alignment
|
| 425 |
current_row += 1
|
| 426 |
|
| 427 |
# Calculate StdDev averages for each row pair
|
|
|
|
| 437 |
|
| 438 |
if stddev_values:
|
| 439 |
avg = sum(stddev_values) / len(stddev_values)
|
| 440 |
+
size_cell = ws.cell(row=current_row, column=1, value=size)
|
| 441 |
+
size_cell.alignment = center_alignment
|
| 442 |
+
|
| 443 |
+
avg_cell = ws.cell(row=current_row, column=2, value=avg)
|
| 444 |
+
avg_cell.number_format = '0.000'
|
| 445 |
+
avg_cell.alignment = center_alignment
|
| 446 |
current_row += 1
|
| 447 |
|
| 448 |
current_row += 2 # Space between tables
|
| 449 |
|
| 450 |
# Headers for CNR Averages
|
| 451 |
+
cnr_header = ws.cell(row=current_row, column=1, value="CNR Averages")
|
| 452 |
+
cnr_header.font = red_font
|
| 453 |
+
cnr_header.alignment = center_alignment
|
| 454 |
current_row += 1
|
| 455 |
|
| 456 |
# Calculate CNR averages for each row pair
|
| 457 |
for i, size in enumerate(phantom_sizes):
|
| 458 |
row_number = row_pairs[i][1] # Second row for CNR
|
| 459 |
+
cnr_references = []
|
| 460 |
|
| 461 |
+
# Get all CNR formula references
|
| 462 |
for cols in column_groups:
|
| 463 |
formula_col = get_column_letter(column_index_from_string(cols[-1]) + 1)
|
| 464 |
+
cnr_cell = f"{formula_col}{row_number}"
|
| 465 |
+
cnr_references.append(cnr_cell)
|
| 466 |
+
|
| 467 |
+
if cnr_references:
|
| 468 |
+
# Create AVERAGE formula using cell references
|
| 469 |
+
formula = f"=AVERAGE({','.join(cnr_references)})"
|
| 470 |
+
size_cell = ws.cell(row=current_row, column=1, value=size)
|
| 471 |
+
size_cell.alignment = center_alignment
|
| 472 |
+
|
| 473 |
+
avg_cell = ws.cell(row=current_row, column=2)
|
| 474 |
+
avg_cell.value = formula
|
| 475 |
+
avg_cell.number_format = '0.000'
|
| 476 |
+
avg_cell.alignment = center_alignment
|
| 477 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 478 |
current_row += 1
|
| 479 |
|
| 480 |
# Format the tables
|