dsa-helpers 1.0.2.dev0__tar.gz → 1.0.2.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {dsa_helpers-1.0.2.dev0/dsa_helpers.egg-info → dsa_helpers-1.0.2.dev1}/PKG-INFO +1 -1
  2. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/tiling.py +97 -1
  3. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1/dsa_helpers.egg-info}/PKG-INFO +1 -1
  4. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/pyproject.toml +1 -1
  5. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/.gitignore +0 -0
  6. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/.readthedocs.yaml +0 -0
  7. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/LICENSE +0 -0
  8. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/README.md +0 -0
  9. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/app.py +0 -0
  10. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/requirements.txt +0 -0
  11. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/source/conf.py +0 -0
  12. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/source/index.rst +0 -0
  13. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/__init__.py +0 -0
  14. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/__init__.py +0 -0
  15. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/dash_paperdragon_utils.py +0 -0
  16. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/header.py +0 -0
  17. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/header_callbacks.py +0 -0
  18. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/girder_utils.py +0 -0
  19. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/imread.py +0 -0
  20. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/imwrite.py +0 -0
  21. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/__init__.py +0 -0
  22. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/callbacks.py +0 -0
  23. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/SegFormerSegmentationDataset.py +0 -0
  24. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/__init__.py +0 -0
  25. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/utils.py +0 -0
  26. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/evaluate.py +0 -0
  27. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/metrics.py +0 -0
  28. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/__init__.py +0 -0
  29. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/get_pearce_roi_images.py +0 -0
  30. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/tile_image.py +0 -0
  31. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/utils.py +0 -0
  32. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/segformer_semantic_segmentation/__init__.py +0 -0
  33. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/segformer_semantic_segmentation/inference.py +0 -0
  34. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/transforms/__init__.py +0 -0
  35. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/transforms/segformer_transforms.py +0 -0
  36. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/mongo_utils.py +0 -0
  37. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/tile_utils.py +0 -0
  38. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/utils.py +0 -0
  39. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/SOURCES.txt +0 -0
  40. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/dependency_links.txt +0 -0
  41. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/requires.txt +0 -0
  42. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/top_level.txt +0 -0
  43. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/setup.cfg +0 -0
  44. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/app/Dockerfile +0 -0
  45. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/app/app.py +0 -0
  46. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/docker-compose.yaml +0 -0
  47. {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/test.ipynb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dsa_helpers
3
- Version: 1.0.2.dev0
3
+ Version: 1.0.2.dev1
4
4
  Summary: Utility functions for working with the DSA girder client.
5
5
  Author-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
6
6
  Maintainer-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
@@ -11,7 +11,7 @@ import numpy as np
11
11
  from pathlib import Path
12
12
  from multiprocessing import Pool
13
13
  from tqdm import tqdm
14
- from . import imwrite
14
+ from . import imwrite, imread
15
15
  import pandas as pd
16
16
 
17
17
 
@@ -338,3 +338,99 @@ def tile_image(
338
338
  df_data.append([save_fp, x, y, tile_size])
339
339
 
340
340
  return pd.DataFrame(df_data, columns=["fp", "x", "y", "tile_size"])
341
+
342
+
343
+ def tile_image_with_mask(
344
+ img: np.ndarray | str,
345
+ mask: np.ndarray | str,
346
+ save_dir: str,
347
+ tile_size: int,
348
+ stride: int | None = None,
349
+ fill: tuple[int, int, int] = (255, 255, 255),
350
+ mask_pad_value: int = 0,
351
+ prepend_name: str = "",
352
+ ) -> pd.DataFrame:
353
+ """Tile an image and its corresponding mask.
354
+
355
+ Args:
356
+ img (np.ndarray): The image or filepath to tile.
357
+ mask (np.ndarray): The mask or filepath to mask.
358
+ save_dir (str): The directory to save the tiles. Images are
359
+ saved in a "images" subdirectory and masks in a "masks"
360
+ subdirectory.
361
+ tile_size (int): The size of the tiles.
362
+ stride (int, optional): The stride of the tiles. Defaults to
363
+ None which sets the stride to the tile size
364
+ (no overlap between tiles).
365
+ fill (tuple[int, int, int], optional): The fill value for the
366
+ tiles that go over the edge of image. Defaults to (255,
367
+ 255, 255).
368
+ mask_pad_value (int, optional): The value to pad the mask with.
369
+ Defaults to 0.
370
+ prepend_name (str, optional): A string to prepend to the tile
371
+ filenames. Default to "". Naming of tiles is:
372
+ {prepend_name}x{x}y{y}.png.
373
+
374
+ Returns:
375
+ pandas.DataFrame: A pandas dataframe containing the filepath of
376
+ the image and mask and x, y coordinate.
377
+
378
+ """
379
+ if isinstance(img, str):
380
+ img = imread(img)
381
+
382
+ if isinstance(mask, str):
383
+ mask = imread(mask, grayscale=True)
384
+
385
+ h, w = img.shape[:2]
386
+
387
+ # Pad the mask to avoid tiles going over the image boundary.
388
+ mask = cv.copyMakeBorder(
389
+ mask.copy(),
390
+ 0,
391
+ h + tile_size,
392
+ 0,
393
+ w + tile_size,
394
+ cv.BORDER_CONSTANT,
395
+ value=mask_pad_value,
396
+ )
397
+
398
+ # Same for the image.
399
+ img = cv.copyMakeBorder(
400
+ img.copy(),
401
+ 0,
402
+ h + tile_size,
403
+ 0,
404
+ w + tile_size,
405
+ cv.BORDER_CONSTANT,
406
+ value=fill,
407
+ )
408
+
409
+ # Make subdirectories to save images to.
410
+ img_dir = Path(save_dir).joinpath("images")
411
+ mask_dir = Path(save_dir).joinpath("masks")
412
+ img_dir.mkdir(parents=True, exist_ok=True)
413
+ mask_dir.mkdir(exist_ok=True)
414
+
415
+ if stride is None:
416
+ stride = tile_size
417
+
418
+ xys = [(x, y) for x in range(0, w, stride) for y in range(0, h, stride)]
419
+
420
+ tile_data = []
421
+
422
+ for xy in xys:
423
+ x, y = xy
424
+
425
+ tile_img = img[y : y + tile_size, x : x + tile_size]
426
+ tile_img_fp = img_dir / f"{prepend_name}x{x}y{y}.png"
427
+
428
+ tile_mask = mask[y : y + tile_size, x : x + tile_size]
429
+ tile_mask_fp = mask_dir / f"{prepend_name}x{x}y{y}.png"
430
+
431
+ imwrite(tile_img_fp, tile_img)
432
+ imwrite(tile_mask_fp, tile_mask, grayscale=True)
433
+
434
+ tile_data.append([str(tile_img_fp), str(tile_mask_fp), x, y])
435
+
436
+ return pd.DataFrame(tile_data, columns=["fp", "mask_fp", "x", "y"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dsa_helpers
3
- Version: 1.0.2.dev0
3
+ Version: 1.0.2.dev1
4
4
  Summary: Utility functions for working with the DSA girder client.
5
5
  Author-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
6
6
  Maintainer-email: "Juan C. Vizcarra" <jvizcar@emory.edu>
@@ -35,7 +35,7 @@ classifiers = [
35
35
  "License :: OSI Approved :: MIT License",
36
36
  ]
37
37
  keywords = ["dsa", "girder", "girder_client"]
38
- version = "v1.0.2dev0"
38
+ version = "v1.0.2dev1"
39
39
 
40
40
  [project.urls]
41
41
  Repository = "https://github.com/Gutman-Lab/dsa-python-utils"