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.
- {dsa_helpers-1.0.2.dev0/dsa_helpers.egg-info → dsa_helpers-1.0.2.dev1}/PKG-INFO +1 -1
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/tiling.py +97 -1
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1/dsa_helpers.egg-info}/PKG-INFO +1 -1
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/pyproject.toml +1 -1
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/.gitignore +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/.readthedocs.yaml +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/LICENSE +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/README.md +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/app.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/requirements.txt +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/source/conf.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/docs/source/index.rst +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/dash_paperdragon_utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/header.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/header_callbacks.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/girder_utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/imread.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/imwrite.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/callbacks.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/SegFormerSegmentationDataset.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/datasets/utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/evaluate.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/metrics.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/get_pearce_roi_images.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/tile_image.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/segformer_semantic_segmentation/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/segformer_semantic_segmentation/inference.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/transforms/__init__.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/transforms/segformer_transforms.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/mongo_utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/tile_utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/utils.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/SOURCES.txt +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/dependency_links.txt +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/requires.txt +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers.egg-info/top_level.txt +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/setup.cfg +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/app/Dockerfile +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/app/app.py +0 -0
- {dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/tests/docker-compose.yaml +0 -0
- {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.
|
|
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.
|
|
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>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/dash/dash_paperdragon_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/object_detection/tile_image.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dsa_helpers-1.0.2.dev0 → dsa_helpers-1.0.2.dev1}/dsa_helpers/ml/transforms/segformer_transforms.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|