Spaces:
Sleeping
Sleeping
Rename Colony_Analyzer_AI_zstack2_HF.py to Organoid_Analyzer_AI_zstack2_HF.py
Browse files
Colony_Analyzer_AI_zstack2_HF.py → Organoid_Analyzer_AI_zstack2_HF.py
RENAMED
|
@@ -234,7 +234,7 @@ def analyze_colonies(mask, size_cutoff, circ_cutoff, img):
|
|
| 234 |
nec_list.append(nec)
|
| 235 |
|
| 236 |
data.append({
|
| 237 |
-
"
|
| 238 |
"necrotic_area": necrosis_area,
|
| 239 |
"centroid": centroid,
|
| 240 |
"percent_necrotic": necrosis_area/colony_area,
|
|
@@ -327,11 +327,11 @@ def main(args):
|
|
| 327 |
if img.ndim == 2:
|
| 328 |
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
| 329 |
caption = np.ones((150, 2048, 3), dtype=np.uint8) * 255 # Multiply by 255 to make it white
|
| 330 |
-
cv2.putText(caption, 'No
|
| 331 |
cv2.imwrite('results.png', np.vstack((img, caption)))
|
| 332 |
-
colonies = pd.DataFrame({"
|
| 333 |
with pd.ExcelWriter('results.xlsx') as writer:
|
| 334 |
-
colonies.to_excel(writer, sheet_name="
|
| 335 |
return(np.vstack((img, caption)), 'results.png', 'results.xlsx')
|
| 336 |
counts = {}
|
| 337 |
for x in range(len(files)):
|
|
@@ -368,12 +368,12 @@ def main(args):
|
|
| 368 |
pass
|
| 369 |
|
| 370 |
img = cv2.copyMakeBorder(img,top=0, bottom=10,left=0,right=10, borderType=cv2.BORDER_CONSTANT, value=[255, 255, 255])
|
| 371 |
-
colonies = colonies.sort_values(by=["
|
| 372 |
-
colonies = colonies[colonies["
|
| 373 |
colonies.index = range(1,len(colonies.index)+1)
|
| 374 |
#nearby is a boolean list of whether a colony has overlapping colonies. If so, labelling positions change
|
| 375 |
nearby = [False]*len(colonies)
|
| 376 |
-
areas = list(colonies["
|
| 377 |
if img.ndim == 2:
|
| 378 |
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
| 379 |
for i in range(len(colonies)):
|
|
@@ -418,31 +418,31 @@ def main(args):
|
|
| 418 |
colonies = colonies.drop('exclude', axis=1)
|
| 419 |
img = cv2.copyMakeBorder(img,top=10, bottom=0,left=10,right=0, borderType=cv2.BORDER_CONSTANT, value=[255, 255, 255])
|
| 420 |
|
| 421 |
-
colonies.insert(loc=0, column="
|
| 422 |
total_area_dark = sum(colonies['necrotic_area'])
|
| 423 |
-
total_area_light = sum(colonies['
|
| 424 |
ratio = total_area_dark/(abs(total_area_light)+1)
|
| 425 |
-
radii = [np.sqrt(x/3.1415) for x in list(colonies['
|
| 426 |
volumes = [4.189*(x**3) for x in radii]
|
| 427 |
-
colonies['
|
| 428 |
del radii, volumes
|
| 429 |
-
meanpix = sum(colonies['mean_pixel_value'] * colonies['
|
| 430 |
-
colonies.loc[len(colonies)+1] = ["Total", total_area_light, total_area_dark, None, ratio, None, meanpix, sum(colonies['
|
| 431 |
del meanpix
|
| 432 |
-
colonies = colonies[["
|
| 433 |
-
Parameters = pd.DataFrame({"Minimum
|
| 434 |
if do_necrosis == False:
|
| 435 |
colonies = colonies.drop('necrotic_area', axis=1)
|
| 436 |
colonies = colonies.drop('percent_necrotic', axis=1)
|
| 437 |
with pd.ExcelWriter("Group_analysis_results.xlsx") as writer:
|
| 438 |
-
colonies.to_excel(writer, sheet_name="
|
| 439 |
Parameters.to_excel(writer, sheet_name="Parameters", index=False)
|
| 440 |
caption = np.ones((150, 2068, 3), dtype=np.uint8) * 255 # Multiply by 255 to make it white
|
| 441 |
if do_necrosis == True:
|
| 442 |
cv2.putText(caption, "Total area necrotic: "+str(total_area_dark)+ ", Total area living: "+str(total_area_light)+", Ratio: "+str(ratio), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 443 |
else:
|
| 444 |
cv2.putText(caption, "Total area: "+str(total_area_light), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 445 |
-
cv2.putText(caption, "Total number of
|
| 446 |
print('img ndim: ' +str(img.ndim))
|
| 447 |
print('caption ndim: ' +str(caption.ndim))
|
| 448 |
|
|
|
|
| 234 |
nec_list.append(nec)
|
| 235 |
|
| 236 |
data.append({
|
| 237 |
+
"organoid_area": colony_area,
|
| 238 |
"necrotic_area": necrosis_area,
|
| 239 |
"centroid": centroid,
|
| 240 |
"percent_necrotic": necrosis_area/colony_area,
|
|
|
|
| 327 |
if img.ndim == 2:
|
| 328 |
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
| 329 |
caption = np.ones((150, 2048, 3), dtype=np.uint8) * 255 # Multiply by 255 to make it white
|
| 330 |
+
cv2.putText(caption, 'No organoids detected.', (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 331 |
cv2.imwrite('results.png', np.vstack((img, caption)))
|
| 332 |
+
colonies = pd.DataFrame({"organoid_number":[], 'organoid_volume':[], "organoid_area":[],'mean_pixel_value':[], "centroid":[], "necrotic_area":[],"percent_necrotic":[]})
|
| 333 |
with pd.ExcelWriter('results.xlsx') as writer:
|
| 334 |
+
colonies.to_excel(writer, sheet_name="Organoid data", index=False)
|
| 335 |
return(np.vstack((img, caption)), 'results.png', 'results.xlsx')
|
| 336 |
counts = {}
|
| 337 |
for x in range(len(files)):
|
|
|
|
| 368 |
pass
|
| 369 |
|
| 370 |
img = cv2.copyMakeBorder(img,top=0, bottom=10,left=0,right=10, borderType=cv2.BORDER_CONSTANT, value=[255, 255, 255])
|
| 371 |
+
colonies = colonies.sort_values(by=["organoid_area"], ascending=False)
|
| 372 |
+
colonies = colonies[colonies["organoid_area"]>= min_size]
|
| 373 |
colonies.index = range(1,len(colonies.index)+1)
|
| 374 |
#nearby is a boolean list of whether a colony has overlapping colonies. If so, labelling positions change
|
| 375 |
nearby = [False]*len(colonies)
|
| 376 |
+
areas = list(colonies["organoid_area"])
|
| 377 |
if img.ndim == 2:
|
| 378 |
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
| 379 |
for i in range(len(colonies)):
|
|
|
|
| 418 |
colonies = colonies.drop('exclude', axis=1)
|
| 419 |
img = cv2.copyMakeBorder(img,top=10, bottom=0,left=10,right=0, borderType=cv2.BORDER_CONSTANT, value=[255, 255, 255])
|
| 420 |
|
| 421 |
+
colonies.insert(loc=0, column="organoid_number", value=[str(x) for x in range(1, len(colonies)+1)])
|
| 422 |
total_area_dark = sum(colonies['necrotic_area'])
|
| 423 |
+
total_area_light = sum(colonies['organoid_area'])
|
| 424 |
ratio = total_area_dark/(abs(total_area_light)+1)
|
| 425 |
+
radii = [np.sqrt(x/3.1415) for x in list(colonies['organoid_area'])]
|
| 426 |
volumes = [4.189*(x**3) for x in radii]
|
| 427 |
+
colonies['organoid_volume'] = volumes
|
| 428 |
del radii, volumes
|
| 429 |
+
meanpix = sum(colonies['mean_pixel_value'] * colonies['organoid_area'])/total_area_light
|
| 430 |
+
colonies.loc[len(colonies)+1] = ["Total", total_area_light, total_area_dark, None, ratio, None, meanpix, sum(colonies['organoid_volume'])]
|
| 431 |
del meanpix
|
| 432 |
+
colonies = colonies[["organoid_number", 'organoid_volume', "organoid_area",'mean_pixel_value', "centroid", "necrotic_area","percent_necrotic", "source"]]
|
| 433 |
+
Parameters = pd.DataFrame({"Minimum organoid size in pixels":[min_size], "Minimum organoid circularity":[min_circ]})
|
| 434 |
if do_necrosis == False:
|
| 435 |
colonies = colonies.drop('necrotic_area', axis=1)
|
| 436 |
colonies = colonies.drop('percent_necrotic', axis=1)
|
| 437 |
with pd.ExcelWriter("Group_analysis_results.xlsx") as writer:
|
| 438 |
+
colonies.to_excel(writer, sheet_name="Organoid data", index=False)
|
| 439 |
Parameters.to_excel(writer, sheet_name="Parameters", index=False)
|
| 440 |
caption = np.ones((150, 2068, 3), dtype=np.uint8) * 255 # Multiply by 255 to make it white
|
| 441 |
if do_necrosis == True:
|
| 442 |
cv2.putText(caption, "Total area necrotic: "+str(total_area_dark)+ ", Total area living: "+str(total_area_light)+", Ratio: "+str(ratio), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 443 |
else:
|
| 444 |
cv2.putText(caption, "Total area: "+str(total_area_light), (40, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 445 |
+
cv2.putText(caption, "Total number of organoids: "+str(len(colonies)-1), (40, 110), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 3)
|
| 446 |
print('img ndim: ' +str(img.ndim))
|
| 447 |
print('caption ndim: ' +str(caption.ndim))
|
| 448 |
|