Skip to content

infer_subc/organelles/golgi

fixed_infer_golgi(in_img, cytoplasm_mask=None)

Procedure to infer golgi from linearly unmixed input.

Parameters


in_img: a 3d image containing all the channels Returns


golgi_object mask defined extent of golgi object

Source code in infer_subc/organelles/golgi.py
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
def fixed_infer_golgi(in_img: np.ndarray, cytoplasm_mask: Optional[np.ndarray] = None) -> np.ndarray:
    """
     Procedure to infer golgi from linearly unmixed input.

     Parameters
     ------------
     in_img:
         a 3d image containing all the channels
     Returns
     -------------
    golgi_object
         mask defined extent of golgi object
    """

    median_sz = 4
    gauss_sig = 1.34
    mo_method = "tri"
    mo_adjust = 0.90
    mo_cutoff_size = 1200
    min_thickness = 1.6
    thin = 1
    dot_scale = 1.6
    dot_cut = 0.02
    small_obj_w = 3

    return infer_golgi(
        in_img,
        median_sz,
        gauss_sig,
        mo_method,
        mo_adjust,
        mo_cutoff_size,
        min_thickness,
        thin,
        dot_scale,
        dot_cut,
        small_obj_w,
    )

get_golgi(in_img, meta_dict, out_data_path)

load golgi if it exists, otherwise calculate and write to ome.tif file

Parameters

in_img

a 3d np.ndarray image of the inferred organelle (labels or boolean)

meta_dict

dictionary of meta-data (ome)

out_data_path

Path object where tiffs are written to

Returns

exported file name

Source code in infer_subc/organelles/golgi.py
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def get_golgi(in_img: np.ndarray, meta_dict: Dict, out_data_path: Path) -> np.ndarray:
    """
    load golgi if it exists, otherwise calculate and write to ome.tif file

    Parameters
    ------------
    in_img:
        a 3d  np.ndarray image of the inferred organelle (labels or boolean)
    meta_dict:
        dictionary of meta-data (ome)
    out_data_path:
        Path object where tiffs are written to

    Returns
    -------------
    exported file name

    """

    try:
        golgi = import_inferred_organelle("golgi", meta_dict, out_data_path)
    except:
        start = time.time()
        print("starting segmentation...")
        golgi = infer_and_export_golgi(in_img, meta_dict, out_data_path)
        end = time.time()
        print(f"inferred (and exported) golgi in ({(end - start):0.2f}) sec")

    return golgi

infer_and_export_golgi(in_img, meta_dict, out_data_path)

infer golgi and write inferred golgi to ome.tif file

Parameters

in_img

a 3d np.ndarray image of the inferred organelle (labels or boolean)

meta_dict

dictionary of meta-data (ome)

out_data_path

Path object where tiffs are written to

Returns

exported file name

Source code in infer_subc/organelles/golgi.py
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
def infer_and_export_golgi(in_img: np.ndarray, meta_dict: Dict, out_data_path: Path) -> np.ndarray:
    """
    infer golgi and write inferred golgi to ome.tif file

    Parameters
    ------------
    in_img:
        a 3d  np.ndarray image of the inferred organelle (labels or boolean)
    meta_dict:
        dictionary of meta-data (ome)
    out_data_path:
        Path object where tiffs are written to

    Returns
    -------------
    exported file name

    """
    golgi = fixed_infer_golgi(in_img)
    out_file_n = export_inferred_organelle(golgi, "golgi", meta_dict, out_data_path)
    print(f"inferred golgi. wrote {out_file_n}")
    return golgi

infer_golgi(in_img, median_sz, gauss_sig, mo_method, mo_adjust, mo_cutoff_size, min_thickness, thin, dot_scale, dot_cut, small_obj_w)

Procedure to infer golgi from linearly unmixed input.

Parameters


in_img: a 3d image containing all the channels median_sz: width of median filter for signal mo_method: which method to use for calculating global threshold. Options include: "triangle" (or "tri"), "median" (or "med"), and "ave_tri_med" (or "ave"). "ave" refers the average of "triangle" threshold and "mean" threshold. mo_adjust: Masked Object threshold local_adjust mo_cutoff_size: Masked Object threshold size_min min_thinkness: Half of the minimum width you want to keep from being thinned. For example, when the object width is smaller than 4, you don't want to make this part even thinner (may break the thin object and alter the topology), you can set this value as 2. thin: the amount to thin (has to be an positive integer). The number of pixels to be removed from outter boundary towards center. dot_scale: scales (log_sigma) for dot filter (1,2, and 3) dot_cut: threshold for dot filter thresholds (1,2,and 3) small_obj_w: minimu object size cutoff for nuclei post-processing

Returns


golgi_object mask defined extent of golgi object

Source code in infer_subc/organelles/golgi.py
 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
def infer_golgi(
    in_img: np.ndarray,
    median_sz: int,
    gauss_sig: float,
    mo_method: str,
    mo_adjust: float,
    mo_cutoff_size: int,
    min_thickness: int,
    thin: int,
    dot_scale: float,
    dot_cut: float,
    small_obj_w: int,
) -> np.ndarray:
    """
     Procedure to infer golgi from linearly unmixed input.

    Parameters
     ------------
     in_img:
         a 3d image containing all the channels
     median_sz:
         width of median filter for signal
     mo_method:
          which method to use for calculating global threshold. Options include:
          "triangle" (or "tri"), "median" (or "med"), and "ave_tri_med" (or "ave").
          "ave" refers the average of "triangle" threshold and "mean" threshold.
     mo_adjust:
         Masked Object threshold `local_adjust`
     mo_cutoff_size:
         Masked Object threshold `size_min`
     min_thinkness:
         Half of the minimum width you want to keep from being thinned.
         For example, when the object width is smaller than 4, you don't
         want to make this part even thinner (may break the thin object
         and alter the topology), you can set this value as 2.
     thin:
         the amount to thin (has to be an positive integer). The number of
          pixels to be removed from outter boundary towards center.
     dot_scale:
         scales (log_sigma) for dot filter (1,2, and 3)
     dot_cut:
         threshold for dot filter thresholds (1,2,and 3)
     small_obj_w:
         minimu object size cutoff for nuclei post-processing

     Returns
     -------------
     golgi_object
         mask defined extent of golgi object
    """
    golgi_ch = GOLGI_CH

    ###################
    # EXTRACT
    ###################
    golgi = select_channel_from_raw(in_img, golgi_ch)

    ###################
    # PRE_PROCESSING
    ###################
    golgi = scale_and_smooth(golgi, median_sz=median_sz, gauss_sig=gauss_sig)
    ###################
    # CORE_PROCESSING
    ###################
    # bw = MO(golgi, global_thresh_method=thresh_method, object_minArea=obj_min_area)
    bw = masked_object_thresh(golgi, th_method=mo_method, cutoff_size=mo_cutoff_size, th_adjust=mo_adjust)

    bw_thin = topology_preserving_thinning(bw, min_thickness, thin)

    s3_param = [(dot_cut, dot_scale)]
    bw_extra = dot_2d_slice_by_slice_wrapper(golgi, s3_param)
    # bw_extra = dot_3d_wrapper(golgi, s3_param)

    bw = np.logical_or(bw_extra, bw_thin)
    ###################
    # POST_PROCESSING
    ###################
    struct_obj = size_filter_linear_size(bw, min_size=small_obj_w, connectivity=1)

    return label_uint16(struct_obj)