Как сократить/реорганизовать код в сегментации клеток проекта активной материи?Python

Программы на Python
Ответить
Anonymous
 Как сократить/реорганизовать код в сегментации клеток проекта активной материи?

Сообщение Anonymous »

В настоящее время я работаю над кодом, который предположительно читает, анализирует, сегментирует и выполняет расчеты соотношения сторон в соответствии с теорией Садхукана 2022. Но я все еще застрял в кодировании, так как моя программа постоянно умирает от перегрузки.
Всего 4 набора папок, в каждой из которых лежат сотни сделанных изображений в формате TIFF. Как мне переформулировать свой код, чтобы он действительно был работоспособным и мог выполнять расчеты соотношения сторон?
import os
import numpy as np
import imageio
import scipy.ndimage as ndi
import scipy as sc
import matplotlib.pyplot as plt

from skimage import filters, measure, morphology, segmentation, util, exposure
from skimage.segmentation import watershed

"""
skipping some normalizations, parameters, bandpass, segmentation using watershed)
"""

def process_image_file(path_to_tiff,
h_to_um_scale=h_to_um,
s_high=s_high_default,
s_low=s_low_default,
H=h_max_threshold,
min_maxima=min_maxima_size,
min_obj=min_object_size):

image = imageio.v2.imread(path_to_tiff).astype(float)

folder = os.path.dirname(path_to_tiff)
mask_path = os.path.join(folder,"mask.tiff")
if os.path.exists(mask_path):
mask = imageio.v2.imread(mask_path) > 0
else:
mask = image > 0

image_um = image * h_to_um_scale
image_um *= mask
band, high, low = bandpass_filter(image_um, s_high=s_high, s_low=s_low)
im_norm = normalized_and_mask(band, image_um)

seed, recon, hmax = find_local_maxima(im_norm, H=H, min_size=min_maxima)
labels, props, centroids = segment_with_watershed(band, recon, image_um, min_size=min_obj)
result= {
"path":path_to_tiff,
"raw":image_um,
"band_pass": band,
"high_pass": high,
"low_pass": low,
"normalized": im_norm,
"seed": seed,
"reconstruction": recon,
"local_maxima": hmax,
"labels": labels,
"regionprops": props,
"centroids": centroids
}
return result

def process_folder(folder_path, file_pattern=None, **kwargs):
results = []

for fname in sorted(os.listdir(folder_path)):
if fname.lower().endswith(('.tif', '.tiff')):
if file_pattern is None or file_pattern(fname):
full = os.path.join(folder_path, fname)
res = process_image_file(full, **kwargs)
results.append(res)
return results

def process_multiple_folders(folder_paths, **kwargs):
datasets = []
for f in folder_paths:
ds = process_folder(f, **kwargs)
datasets.append({"folder": f, "files": ds})
return datasets

if __name__ == "__main__":
base1="xx"
base2="xxx"

folders =[
os.path.join(base1, "A2-1"),
os.path.join(base1, "A2-7"),
os.path.join(base2, "A1-13"),
os.path.join(base2, "B1-11")
]

if len(folders) != 4:
raise ValueError("Please provide exactly 4 folder paths,")
for f in folders:
if not os.path.isdir(f):
raise FileNotFoundError(f"Folder not found: {f}")

datasets = process_multiple_folders(
folders,
h_to_um_scale=h_to_um,
s_high=s_high_default,
s_low=s_low_default,
H=h_max_threshold,
min_maxima=min_maxima_size,
min_obj=min_object_size
)

set1, set2, set3, set4 = [d["files"] for d in datasets]
print("Images processed per set:", len(set1), len(set2), len(set3), len(set4))


Подробнее здесь: https://stackoverflow.com/questions/798 ... er-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»