|
7 | 7 | from matplotlib import pyplot as plt |
8 | 8 |
|
9 | 9 | from djimaging.utils.alias_utils import check_shared_alias_str |
| 10 | +from djimaging.utils.mask_format_utils import assert_igor_format, to_igor_format |
10 | 11 | from djimaging.utils.scanm import read_h5_utils |
11 | 12 | from djimaging.utils.cellpose_utils import intersection_over_union |
12 | 13 |
|
@@ -417,92 +418,6 @@ def generate_roi_suggestions(mask_pred, mask_true, n_artifact, threshold=0.1, ve |
417 | 418 | return rois_to_add |
418 | 419 |
|
419 | 420 |
|
420 | | -def assert_igor_format(roi_mask): |
421 | | - vmin = np.min(roi_mask) |
422 | | - vmax = np.max(roi_mask) |
423 | | - |
424 | | - if roi_mask.ndim != 2: |
425 | | - raise ValueError(f'ROI mask must be 2D, but has shape {roi_mask.shape}') |
426 | | - |
427 | | - if np.any(roi_mask != roi_mask.astype(int)): |
428 | | - raise ValueError(f'ROI mask must be integer, but has non-integer values') |
429 | | - |
430 | | - if not ((vmax in [0, 1]) and vmin <= 1): |
431 | | - raise ValueError(f'ROI mask has unexpected values: vmin={vmin}, vmax={vmax}, value={np.unique(roi_mask)}') |
432 | | - |
433 | | - |
434 | | -def is_igor_format(roi_mask): |
435 | | - """This method can fail if the igor format is not used consistently.""" |
436 | | - vmin = np.min(roi_mask) |
437 | | - vmax = np.max(roi_mask) |
438 | | - |
439 | | - if roi_mask.ndim != 2: |
440 | | - return False |
441 | | - |
442 | | - if np.any(roi_mask != roi_mask.astype(int)): |
443 | | - return False |
444 | | - |
445 | | - if vmax in [0, 1] and vmin <= 1: |
446 | | - return True |
447 | | - else: |
448 | | - return False |
449 | | - |
450 | | - |
451 | | -def as_igor_format(roi_mask): |
452 | | - """Convert from python format to igor format""" |
453 | | - if is_igor_format(roi_mask): |
454 | | - return roi_mask |
455 | | - else: |
456 | | - return to_igor_format(roi_mask) |
457 | | - |
458 | | - |
459 | | -def to_igor_format(roi_mask): |
460 | | - if not is_python_format(roi_mask): |
461 | | - raise ValueError(f'ROI mask is not in python format; unique values in mask: {np.unique(roi_mask)}') |
462 | | - |
463 | | - roi_mask = roi_mask.copy() |
464 | | - roi_mask[roi_mask == 0] = -1 |
465 | | - roi_mask = -roi_mask |
466 | | - |
467 | | - return roi_mask |
468 | | - |
469 | | - |
470 | | -def is_python_format(roi_mask): |
471 | | - vmin = np.min(roi_mask) |
472 | | - vmax = np.max(roi_mask) |
473 | | - |
474 | | - if roi_mask.ndim != 2: |
475 | | - return False |
476 | | - |
477 | | - if np.any(roi_mask != roi_mask.astype(int)): |
478 | | - return False |
479 | | - |
480 | | - if vmin == 0 and vmax >= 0: |
481 | | - return True |
482 | | - else: |
483 | | - return False |
484 | | - |
485 | | - |
486 | | -def as_python_format(roi_mask): |
487 | | - """Convert from igor format to python format if necessary""" |
488 | | - if is_python_format(roi_mask): |
489 | | - return roi_mask |
490 | | - else: |
491 | | - return to_python_format(roi_mask) |
492 | | - |
493 | | - |
494 | | -def to_python_format(roi_mask): |
495 | | - assert_igor_format(roi_mask) |
496 | | - |
497 | | - vmax = np.max(roi_mask) |
498 | | - |
499 | | - roi_mask = roi_mask.copy() |
500 | | - roi_mask[roi_mask == vmax] = 0 |
501 | | - roi_mask = np.abs(roi_mask) |
502 | | - |
503 | | - return roi_mask |
504 | | - |
505 | | - |
506 | 421 | def to_roi_mask_file(data_file, old_suffix=None, new_suffix='_ROIs.pkl', |
507 | 422 | roi_mask_dir=None, old_prefix=None, new_prefix=None): |
508 | 423 | """Get ROI mask file path from data file path""" |
|
0 commit comments