From dbf187f06e851e7cd63e022b9fc708929a5a96fa Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Fri, 17 May 2024 22:55:18 -0500 Subject: [PATCH 01/20] napari_points_mask napari points mask function. --- plantcv/annotate/__init__.py | 4 +- plantcv/annotate/napari_points_mask.py | 62 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100755 plantcv/annotate/napari_points_mask.py diff --git a/plantcv/annotate/__init__.py b/plantcv/annotate/__init__.py index 9688bb5..83ad404 100644 --- a/plantcv/annotate/__init__.py +++ b/plantcv/annotate/__init__.py @@ -4,6 +4,7 @@ from plantcv.annotate.napari_join_labels import napari_join_labels from plantcv.annotate.napari_save_coor import napari_save_coor from plantcv.annotate.napari_read_coor import napari_read_coor +from plantcv.annotate.napari_points_mask import napari_points_mask __all__ = [ @@ -12,5 +13,6 @@ "napari_label_classes", "napari_join_labels", "napari_save_coor", - "napari_read_coor" + "napari_read_coor", + "napari_points_mask" ] diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py new file mode 100755 index 0000000..45f356f --- /dev/null +++ b/plantcv/annotate/napari_points_mask.py @@ -0,0 +1,62 @@ +# Make Masks of Labelled Napari Points + +import numpy as np +import os +import cv2 +from plantcv.annotate import napari_classes +from plantcv.plantcv import params +from plantcv.plantcv._debug import _debug + + +def napari_points_mask(img, viewer, shape='square'): + """ + draw points mask based on Napari viewer annotations + + Inputs: + img = img (grayimg, rgbimg, or hyperspectral image array data + e.g. hyperspectraldata.array_data). This is used to find the x,y size + of the image + viewer = Napari Viewer with classes labeled. The size of the masked points + will be from the viewer parameters + shape = 'square' or 'circle' + + Returns: + mask_dict = dictionary of masks; mask for each labelled class + + :param img: numpy.ndarray + :param viewer: Napari Viewer object + :param shape: str + :return mask_dict: dict of numpy.ndarray + + """ + # get shape of image + size = np.shape(img) + keys = napari_classes(viewer) + shapetype = shape + maskdict = {} + + for key in keys: + maskname = str(key) + mask = np.zeros((size[0], size[1])) + data = list(viewer.layers[key].data) + shapesize = int(viewer.layers[key]._current_size/2) + for y, x in data: + if shapetype == 'square': + startpoint = (int(x-shapesize), int(y-shapesize)) + endpoint = (int(x+shapesize), int(y+shapesize)) + mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) + else: + mask = cv2.circle(mask, (int(x), int(y)), shapesize, (255), -1) + + maskdict[maskname] = mask + + if params.debug == 'print': + _debug(visual=mask, filename=os.path.join(params.debug_outdir, + str(params.device) + + str(maskname) + + '_labeled_mask.png')) + else: + print(maskname) + _debug(visual=mask) + + return maskdict From e076a67831c0e83ce30e0145b0c5999e51967c8e Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 21 May 2024 07:06:59 -0500 Subject: [PATCH 02/20] added tests added tests and napari_points_mask. Also fixed viewer.close() in napari open test. --- plantcv/annotate/napari_points_mask.py | 18 +++++++----------- tests/test_napari_open.py | 2 ++ tests/test_napari_points_mask.py | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 tests/test_napari_points_mask.py diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index 45f356f..367bc10 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -14,9 +14,9 @@ def napari_points_mask(img, viewer, shape='square'): Inputs: img = img (grayimg, rgbimg, or hyperspectral image array data - e.g. hyperspectraldata.array_data). This is used to find the x,y size + e.g. hyperspectraldata.array_data). This is used to find the x,y size of the image - viewer = Napari Viewer with classes labeled. The size of the masked points + viewer = Napari Viewer with classes labeled. The size of the masked points will be from the viewer parameters shape = 'square' or 'circle' @@ -43,20 +43,16 @@ def napari_points_mask(img, viewer, shape='square'): for y, x in data: if shapetype == 'square': startpoint = (int(x-shapesize), int(y-shapesize)) - endpoint = (int(x+shapesize), int(y+shapesize)) + endpoint = (int(x+shapesize-1), int(y+shapesize-1)) mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) else: mask = cv2.circle(mask, (int(x), int(y)), shapesize, (255), -1) maskdict[maskname] = mask - if params.debug == 'print': - _debug(visual=mask, filename=os.path.join(params.debug_outdir, - str(params.device) + - str(maskname) + - '_labeled_mask.png')) - else: - print(maskname) - _debug(visual=mask) + _debug(visual=mask, filename=os.path.join(params.debug_outdir, + str(params.device) + + str(maskname) + + '_labeled_mask.png')) return maskdict diff --git a/tests/test_napari_open.py b/tests/test_napari_open.py index 0a445ee..602e3ef 100644 --- a/tests/test_napari_open.py +++ b/tests/test_napari_open.py @@ -13,6 +13,7 @@ def test_napari_open_rgb(test_data): face_color="red", size=1) assert len(viewer.layers['total'].data) == 2 + viewer.close() def test_napari_open_gray(test_data): @@ -25,6 +26,7 @@ def test_napari_open_gray(test_data): face_color="red", size=1) assert len(viewer.layers['total'].data) == 2 + viewer.close() def test_napari_open_envi(test_data): diff --git a/tests/test_napari_points_mask.py b/tests/test_napari_points_mask.py new file mode 100644 index 0000000..397005c --- /dev/null +++ b/tests/test_napari_points_mask.py @@ -0,0 +1,21 @@ +from plantcv.annotate import napari_points_mask +from plantcv.plantcv import readimage +from plantcv.annotate import napari_label_classes +import numpy as np + + +def test_napari_points_mask(test_data): + """Test for PlantCV.Annotate""" + # Read in test data + img, _, _ = readimage(test_data.small_rgb_img) + data = {'total': [(25, 25)], 'background': [(50, 50)]} + viewer = napari_label_classes(img, ['total'], size=50, importdata=data, + show=False) + maskdict = napari_points_mask(img, viewer, shape='square') + maskdict1 = napari_points_mask(img, viewer, shape='circle') + + summask = int((np.sum(maskdict['total']))/255) + summask1 = int((np.sum(maskdict1['total']))/255) + + assert summask == 2500 + assert summask1 == 1961 From f932f70ed7e0973b14ab327b7e5b8ebca73b09cb Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Mon, 19 Aug 2024 15:25:31 -0500 Subject: [PATCH 03/20] only allow squares realized that cv.circle drew pretty rough circles, so I changed it so that only squares are allowed as a shape option (thus removing the option) from all the functions --- docs/napari_label_classes.md | 6 ++-- docs/napari_points_mask.md | 41 ++++++++++++++++++++++++ plantcv/annotate/napari_label_classes.py | 7 ++-- plantcv/annotate/napari_points_mask.py | 8 ++--- tests/test_napari_join_labels.py | 16 ++++----- tests/test_napari_label_classes.py | 2 +- tests/test_napari_points_mask.py | 5 +-- tests/test_napari_save_coor.py | 2 +- 8 files changed, 59 insertions(+), 28 deletions(-) create mode 100644 docs/napari_points_mask.md diff --git a/docs/napari_label_classes.md b/docs/napari_label_classes.md index b612e8d..dec120c 100644 --- a/docs/napari_label_classes.md +++ b/docs/napari_label_classes.md @@ -3,16 +3,14 @@ This function opens an image in Napari and then defines a set of classes to label. A random shape label is assigned to each class. Image can be annotate as long as viewer is open. -**plantcv.annotate.napari_label_classes*(*img, classes, size, shape =10, 'square', importdata=False, show=True*) +**plantcv.annotate.napari_label_classes*(*img, classes, size=10, importdata=False, show=True*) **returns** napari viewer object - **Parameters:** - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data) - classes - list of classes to label. This option is not necessary if data is data is imported. - - size - integer pixel size of label - - shape - can be 'o', 'arrow', 'clobber', 'cross', 'diamond', 'disc', 'hbar', 'ring', 'square', 'star', 'tailed_arrow', - 'triangle_down', 'triangle_up', 'vbar', 'x'. + - size - integer pixel size of label, best if even number - importdata - dictionary of data, data saved from napari_save_coor or data imported from napari_read_coor - show - if show = True, viewer is launched. False setting is useful for test purposes. diff --git a/docs/napari_points_mask.md b/docs/napari_points_mask.md new file mode 100644 index 0000000..68d3105 --- /dev/null +++ b/docs/napari_points_mask.md @@ -0,0 +1,41 @@ +## Make Mask of Napari Points + +This function is to generate a mask from napari point information. +This application of this function could be to get information about image +at particular points (e.g. color or intensity information) + +**plantcv.annotate.napari_points_mask*(*img, viewer) + +**returns** dictionary of masks for each class + +- **Parameters:** + - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data) + - viewer = Napari Viewer with point classes labeled. The size of the points in the mask will be from the viewer parameters. + +- **Context:** + - This function can be used to generate a mask from Napari points in order to get information about point data. + +- **Example use:** + - An application of this function might be collection of color data for the Naive Bayes module. + + +```python +import plantcv.plantcv as pcv +import plantcv.annotate as pcvan +import napari + +# Create an instance of the Points class +img, path, name = pcv.readimage("./grayimg.png") + +viewer = pcvan.napari_label_classes(img,['background','leaf', 'rust', 'chlorosis'], size = 4) + +maskdict = pcvan.napari_points_mask(img,viewer) + +# Should open interactive napari viewer + +``` + +![Screenshot](img/documentation_images/napari_points_mask/) + + +**Source Code:** [Here](https://github.com/danforthcenter/plantcv-annotate/blob/main/plantcv/annotate/napari_points_mask.py) diff --git a/plantcv/annotate/napari_label_classes.py b/plantcv/annotate/napari_label_classes.py index 2303427..46e6646 100755 --- a/plantcv/annotate/napari_label_classes.py +++ b/plantcv/annotate/napari_label_classes.py @@ -6,7 +6,7 @@ from plantcv.annotate import napari_classes -def napari_label_classes(img, classes=False, size=10, shape='square', +def napari_label_classes(img, classes=False, size=10, importdata=False, show=True): """ open img in napari and label classes @@ -22,7 +22,6 @@ def napari_label_classes(img, classes=False, size=10, shape='square', will default to the last class in the list when napari_join_labels is run. size = size of marker in pixels - shape = either 'square' or 'circle' importdata = dictionary of values in Napari format (y,x). Output of napari_read_coor show = if show is True the viewer is launched. This opetion is useful for @@ -81,7 +80,7 @@ def napari_label_classes(img, classes=False, size=10, shape='square', if classes is not False: for x in classes: if x not in keys: - viewer.add_points(np.array([]), name=x, symbol=shape, + viewer.add_points(np.array([]), name=x, symbol='square', edge_color=random.choice(color), face_color=random.choice(color), size=size) keys = napari_classes(viewer) @@ -93,7 +92,7 @@ def napari_label_classes(img, classes=False, size=10, shape='square', if key in keys: viewer.layers[key].add(importdata[key]) else: - viewer.add_points(importdata[key], name=key, symbol=shape, + viewer.add_points(importdata[key], name=key, symbol='square', edge_color=random.choice(color), face_color=random.choice(color), size=size) diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index 367bc10..d527766 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -8,7 +8,7 @@ from plantcv.plantcv._debug import _debug -def napari_points_mask(img, viewer, shape='square'): +def napari_points_mask(img, viewer): """ draw points mask based on Napari viewer annotations @@ -18,7 +18,6 @@ def napari_points_mask(img, viewer, shape='square'): of the image viewer = Napari Viewer with classes labeled. The size of the masked points will be from the viewer parameters - shape = 'square' or 'circle' Returns: mask_dict = dictionary of masks; mask for each labelled class @@ -32,21 +31,18 @@ def napari_points_mask(img, viewer, shape='square'): # get shape of image size = np.shape(img) keys = napari_classes(viewer) - shapetype = shape maskdict = {} for key in keys: maskname = str(key) mask = np.zeros((size[0], size[1])) + shapetype = str(viewer.layers['background']._current_symbol).split()[-1] data = list(viewer.layers[key].data) shapesize = int(viewer.layers[key]._current_size/2) for y, x in data: - if shapetype == 'square': startpoint = (int(x-shapesize), int(y-shapesize)) endpoint = (int(x+shapesize-1), int(y+shapesize-1)) mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) - else: - mask = cv2.circle(mask, (int(x), int(y)), shapesize, (255), -1) maskdict[maskname] = mask diff --git a/tests/test_napari_join_labels.py b/tests/test_napari_join_labels.py index f3ae04b..37e7748 100644 --- a/tests/test_napari_join_labels.py +++ b/tests/test_napari_join_labels.py @@ -23,10 +23,10 @@ def test_napari_join_allclass(test_data): img, _, _ = readimage(test_data.kmeans_seed_gray_img) viewer = napari_open(img, show=False) background = [(54, 143), (77, 246)] - viewer.add_points(np.array(background), symbol="o", name='background', + viewer.add_points(np.array(background), symbol="square", name='background', face_color="red", size=1) wing = [(275, 54)] - viewer.add_points(np.array(wing), symbol="o", name='wing', + viewer.add_points(np.array(wing), symbol="square", name='wing', face_color="red", size=1) seed = [(280, 218)] viewer.add_points(np.array(seed), symbol="o", name='seed', @@ -44,13 +44,13 @@ def test_napari_join_warn(test_data): img, _, _ = readimage(test_data.kmeans_seed_gray_img) viewer = napari_open(img, show=False) background = [(54, 143), (77, 246)] - viewer.add_points(np.array(background), symbol="o", name='background', + viewer.add_points(np.array(background), symbol="square", name='background', face_color="red", size=1) wing = [(275, 54)] - viewer.add_points(np.array(wing), symbol="o", name='wing', + viewer.add_points(np.array(wing), symbol="square", name='wing', face_color="red", size=1) seed = [(275, 54)] - viewer.add_points(np.array(seed), symbol="o", name='seed', + viewer.add_points(np.array(seed), symbol="square", name='seed', face_color="red", size=1) labeled, _ = napari_join_labels(img, viewer) @@ -68,13 +68,13 @@ def test_napari_join_print(test_data, tmpdir): img, _, _ = readimage(test_data.kmeans_seed_gray_img) viewer = napari_open(img, show=False) background = [(54, 143), (77, 246)] - viewer.add_points(np.array(background), symbol="o", name='background', + viewer.add_points(np.array(background), symbol="square", name='background', face_color="red", size=1) wing = [(280, 218)] - viewer.add_points(np.array(wing), symbol="o", name='wing', + viewer.add_points(np.array(wing), symbol="square", name='wing', face_color="red", size=1) seed = [(275, 54)] - viewer.add_points(np.array(seed), symbol="o", name='seed', + viewer.add_points(np.array(seed), symbol="square", name='seed', face_color="red", size=1) labeled, _ = napari_join_labels(img, viewer) diff --git a/tests/test_napari_label_classes.py b/tests/test_napari_label_classes.py index 8732656..6ccdce3 100644 --- a/tests/test_napari_label_classes.py +++ b/tests/test_napari_label_classes.py @@ -11,7 +11,7 @@ def test_napari_label_classes_gray(test_data): viewer = napari_label_classes(img, ['total'], size=5, importdata=data, show=False) coor = [(50, 25)] - viewer.add_points(np.array(coor), symbol="o", name='coor', + viewer.add_points(np.array(coor), symbol="square", name='coor', face_color="red", size=5) assert len(viewer.layers['total'].data) == 1 diff --git a/tests/test_napari_points_mask.py b/tests/test_napari_points_mask.py index 397005c..4b82690 100644 --- a/tests/test_napari_points_mask.py +++ b/tests/test_napari_points_mask.py @@ -11,11 +11,8 @@ def test_napari_points_mask(test_data): data = {'total': [(25, 25)], 'background': [(50, 50)]} viewer = napari_label_classes(img, ['total'], size=50, importdata=data, show=False) - maskdict = napari_points_mask(img, viewer, shape='square') - maskdict1 = napari_points_mask(img, viewer, shape='circle') + maskdict = napari_points_mask(img, viewer) summask = int((np.sum(maskdict['total']))/255) - summask1 = int((np.sum(maskdict1['total']))/255) assert summask == 2500 - assert summask1 == 1961 diff --git a/tests/test_napari_save_coor.py b/tests/test_napari_save_coor.py index fafc359..069a409 100644 --- a/tests/test_napari_save_coor.py +++ b/tests/test_napari_save_coor.py @@ -12,7 +12,7 @@ def test_napari_save_coor(test_data, tmpdir): img, _, _ = readimage(test_data.kmeans_seed_gray_img) viewer = napari_label_classes(img, ['seed'], show=False) coor = [(25, 25)] - viewer.add_points(np.array(coor), symbol="o", name='background', + viewer.add_points(np.array(coor), symbol="square", name='background', face_color="red", size=1) filename = os.path.join(cache_dir, 'tempfile.txt') From 6ec049c1e153363ec581f18a938c9f9f72da5120 Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Mon, 19 Aug 2024 15:53:07 -0500 Subject: [PATCH 04/20] napari points mask docs Added napari points mask docs --- .../napari_points_mask/background.png | Bin 0 -> 805 bytes .../napari_points_mask/chlorosis.png | Bin 0 -> 720 bytes .../napari_points_mask/healthy.png | Bin 0 -> 673 bytes .../napari_points_mask/rust.png | Bin 0 -> 651 bytes .../napari_points_mask/viewer_labeled.png | Bin 0 -> 115767 bytes docs/napari_points_mask.md | 21 +++++++++++++++--- mkdocs.yml | 1 + 7 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 docs/img/documentation_images/napari_points_mask/background.png create mode 100644 docs/img/documentation_images/napari_points_mask/chlorosis.png create mode 100644 docs/img/documentation_images/napari_points_mask/healthy.png create mode 100644 docs/img/documentation_images/napari_points_mask/rust.png create mode 100644 docs/img/documentation_images/napari_points_mask/viewer_labeled.png diff --git a/docs/img/documentation_images/napari_points_mask/background.png b/docs/img/documentation_images/napari_points_mask/background.png new file mode 100644 index 0000000000000000000000000000000000000000..1b95a7288a75e10e694ed6242f68ffb0cbab2fbb GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0y~yU=#*n4xj*o!J)k=3=B+fJY5_^Dj44$G%R}Tz`$(q z;eY=<$E;okrMkykHU$~ z6-zLc-MQyj6M#m5BU0|Uf}Ti!v4D8jamx(${C1Bc+cj`5svzk`E%~LBq4Lxnj+Z1CBOfF%J~%-YVQv&?^v_UnY<*5dRp+ j*>}uwk0ZJsuoLR%919hBu_9I%l>R+k{an^LB{Ts5=j~ka literal 0 HcmV?d00001 diff --git a/docs/img/documentation_images/napari_points_mask/chlorosis.png b/docs/img/documentation_images/napari_points_mask/chlorosis.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d010a2a6d5db7847ea70abfa417a37e1255ec6 GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0y~yU=#*n4xj*o!J)k=3=B-uJzX3_Dj44$bj*@Z z@?ZPAgcC|)_tQ4btqV0$4K`9Ow{ECWMa(AnV?Fj`4|j(Ol*e`cJHY;c=prPhmgQ#XxhuTQ}IKzb|K~^t<<- z;nSQw_Zgp9&YTnt@)a5}-MZnAc;!y!6ZI2eOb+%5=}-7jh!n47g9hc5GyI%>=N-c* o{hfCipTrmKW3{#ekUS2Tu(!7*XHL?@hE~fs?3;i_U{y#9!QV0t|J1)*HvI8_SIqEp{+;IxpX_%Y zV|>DjMxZ%-=UK)lop+uwd~(SvW~fx!ZrNZn5$?SAdCMG=@9-gwrP$GoMI( za*^?g(We&-MYw_qO(V6qw`CmWoyg@=@PA^)K0&=`HuDK#pkH?$WPGBFMj!{;%CHnvX literal 0 HcmV?d00001 diff --git a/docs/img/documentation_images/napari_points_mask/rust.png b/docs/img/documentation_images/napari_points_mask/rust.png new file mode 100644 index 0000000000000000000000000000000000000000..a411242d9c224bb4a43d3a29c9c945d2b7f7f9e2 GIT binary patch literal 651 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Π7vG8 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 rW!QlAj&JJ!0RF$${(JM0!g>(N83E|woWS Date: Mon, 19 Aug 2024 15:56:29 -0500 Subject: [PATCH 05/20] fixed pep8 --- plantcv/annotate/napari_points_mask.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index d527766..f4fbec6 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -36,13 +36,12 @@ def napari_points_mask(img, viewer): for key in keys: maskname = str(key) mask = np.zeros((size[0], size[1])) - shapetype = str(viewer.layers['background']._current_symbol).split()[-1] data = list(viewer.layers[key].data) shapesize = int(viewer.layers[key]._current_size/2) for y, x in data: - startpoint = (int(x-shapesize), int(y-shapesize)) - endpoint = (int(x+shapesize-1), int(y+shapesize-1)) - mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) + startpoint = (int(x-shapesize), int(y-shapesize)) + endpoint = (int(x+shapesize-1), int(y+shapesize-1)) + mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) maskdict[maskname] = mask From 983129b1cad760c5b090ac3ed5b729dc229c9585 Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 20 Aug 2024 10:03:38 -0500 Subject: [PATCH 06/20] deepsource. missed a whitespace, deepsource is complaining about a protected class, I don't think there is a way around that since we're not going to change the napari code base. --- plantcv/annotate/napari_label_classes.py | 5 +++-- plantcv/annotate/napari_points_mask.py | 7 ++++--- tests/test_napari_classes.py | 4 ++-- tests/test_napari_open.py | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/plantcv/annotate/napari_label_classes.py b/plantcv/annotate/napari_label_classes.py index 46e6646..5cf2536 100755 --- a/plantcv/annotate/napari_label_classes.py +++ b/plantcv/annotate/napari_label_classes.py @@ -6,7 +6,7 @@ from plantcv.annotate import napari_classes -def napari_label_classes(img, classes=False, size=10, +def napari_label_classes(img, classes=False, size=10, importdata=False, show=True): """ open img in napari and label classes @@ -92,7 +92,8 @@ def napari_label_classes(img, classes=False, size=10, if key in keys: viewer.layers[key].add(importdata[key]) else: - viewer.add_points(importdata[key], name=key, symbol='square', + viewer.add_points(importdata[key], name=key, + symbol='square', edge_color=random.choice(color), face_color=random.choice(color), size=size) diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index f4fbec6..fb6dee9 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -37,10 +37,11 @@ def napari_points_mask(img, viewer): maskname = str(key) mask = np.zeros((size[0], size[1])) data = list(viewer.layers[key].data) - shapesize = int(viewer.layers[key]._current_size/2) + shapesize = viewer.layers[key]._current_size + shapesizehalf = int(shapesize/2) for y, x in data: - startpoint = (int(x-shapesize), int(y-shapesize)) - endpoint = (int(x+shapesize-1), int(y+shapesize-1)) + startpoint = (int(x-shapesizehalf), int(y-shapesizehalf)) + endpoint = (int(x+shapesizehalf-1), int(y+shapesizehalf-1)) mask = cv2.rectangle(mask, startpoint, endpoint, (255), -1) maskdict[maskname] = mask diff --git a/tests/test_napari_classes.py b/tests/test_napari_classes.py index e71826d..8d37b94 100644 --- a/tests/test_napari_classes.py +++ b/tests/test_napari_classes.py @@ -9,9 +9,9 @@ def test_napari_classes(make_napari_viewer): img = np.zeros((100, 100)) coor = [(25, 25), (50, 50)] viewer.add_image(img) - viewer.add_points(np.array(coor), symbol="o", name="total", + viewer.add_points(np.array(coor), symbol="square", name="total", face_color="red", size=30) - viewer.add_points(np.array(coor), symbol="o", name="test", + viewer.add_points(np.array(coor), symbol="square", name="test", face_color="red", size=30) keys = napari_classes(viewer) diff --git a/tests/test_napari_open.py b/tests/test_napari_open.py index 602e3ef..5b1ef78 100644 --- a/tests/test_napari_open.py +++ b/tests/test_napari_open.py @@ -22,7 +22,7 @@ def test_napari_open_gray(test_data): img, _, _ = readimage(test_data.kmeans_seed_gray_img) viewer = napari_open(img, show=False) coor = [(25, 25), (50, 50)] - viewer.add_points(np.array(coor), symbol="o", name="total", + viewer.add_points(np.array(coor), symbol="square", name="total", face_color="red", size=1) assert len(viewer.layers['total'].data) == 2 @@ -36,7 +36,7 @@ def test_napari_open_envi(test_data): img = img.array_data viewer = napari_open(img, show=False) coor = [(25, 25), (50, 50)] - viewer.add_points(np.array(coor), symbol="o", name="total", + viewer.add_points(np.array(coor), symbol="square", name="total", face_color="red", size=1) assert len(viewer.layers['total'].data) == 2 From 218497f355e3f1570aaacdfab3f0bc58b5eddc3d Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 20 Aug 2024 11:50:19 -0500 Subject: [PATCH 07/20] deepsource protected class fixing deepsource issue and adding class to get around protected class issue. --- plantcv/annotate/__init__.py | 2 ++ plantcv/annotate/classestomove.py | 8 ++++++++ plantcv/annotate/napari_open.py | 4 ++-- plantcv/annotate/napari_points_mask.py | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100755 plantcv/annotate/classestomove.py diff --git a/plantcv/annotate/__init__.py b/plantcv/annotate/__init__.py index 83ad404..c641133 100644 --- a/plantcv/annotate/__init__.py +++ b/plantcv/annotate/__init__.py @@ -1,3 +1,4 @@ +from plantcv.annotate.classestomove import Viewer from plantcv.annotate.napari_classes import napari_classes from plantcv.annotate.napari_open import napari_open from plantcv.annotate.napari_label_classes import napari_label_classes @@ -8,6 +9,7 @@ __all__ = [ + "Viewer", "napari_classes", "napari_open", "napari_label_classes", diff --git a/plantcv/annotate/classestomove.py b/plantcv/annotate/classestomove.py new file mode 100755 index 0000000..c4829e2 --- /dev/null +++ b/plantcv/annotate/classestomove.py @@ -0,0 +1,8 @@ +# Define Classes + +import napari + + +class Viewer(napari.Viewer): + def layer_size(self, layer): + return self.layers[layer]._current_size diff --git a/plantcv/annotate/napari_open.py b/plantcv/annotate/napari_open.py index ab75436..acf0de3 100755 --- a/plantcv/annotate/napari_open.py +++ b/plantcv/annotate/napari_open.py @@ -3,7 +3,7 @@ import cv2 import numpy as np from skimage.color import label2rgb -import napari +from plantcv.annotate import Viewer def napari_open(img, show=True): @@ -34,6 +34,6 @@ def napari_open(img, show=True): if shape[2] > 3: img = img.transpose(2, 0, 1) showcall = show - viewer = napari.Viewer(show=showcall) + viewer = Viewer(show=showcall) viewer.add_image(img) return viewer diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index fb6dee9..5b03ddf 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -37,8 +37,9 @@ def napari_points_mask(img, viewer): maskname = str(key) mask = np.zeros((size[0], size[1])) data = list(viewer.layers[key].data) - shapesize = viewer.layers[key]._current_size + shapesize = viewer.layer_size(key) shapesizehalf = int(shapesize/2) + for y, x in data: startpoint = (int(x-shapesizehalf), int(y-shapesizehalf)) endpoint = (int(x+shapesizehalf-1), int(y+shapesizehalf-1)) From 2761aa81e0e802ac62324a0084f9a184818377e4 Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 20 Aug 2024 12:22:42 -0500 Subject: [PATCH 08/20] deesource two minor deepsource fixes that I missed. --- plantcv/annotate/classestomove.py | 3 +++ plantcv/annotate/napari_points_mask.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/plantcv/annotate/classestomove.py b/plantcv/annotate/classestomove.py index c4829e2..d72f129 100755 --- a/plantcv/annotate/classestomove.py +++ b/plantcv/annotate/classestomove.py @@ -5,4 +5,7 @@ class Viewer(napari.Viewer): def layer_size(self, layer): + """ + method to get current size of points + """ return self.layers[layer]._current_size diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index 5b03ddf..3fb9376 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -39,7 +39,7 @@ def napari_points_mask(img, viewer): data = list(viewer.layers[key].data) shapesize = viewer.layer_size(key) shapesizehalf = int(shapesize/2) - + for y, x in data: startpoint = (int(x-shapesizehalf), int(y-shapesizehalf)) endpoint = (int(x+shapesizehalf-1), int(y+shapesizehalf-1)) From 1afcbe066f3ab915a43a72bf7a1826cdad79e4ec Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 20 Aug 2024 12:24:03 -0500 Subject: [PATCH 09/20] docstring fix fixed docstring --- plantcv/annotate/classestomove.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plantcv/annotate/classestomove.py b/plantcv/annotate/classestomove.py index d72f129..61bc6a8 100755 --- a/plantcv/annotate/classestomove.py +++ b/plantcv/annotate/classestomove.py @@ -5,7 +5,5 @@ class Viewer(napari.Viewer): def layer_size(self, layer): - """ - method to get current size of points - """ + """method to get current size of points""" return self.layers[layer]._current_size From fcf5bb5b82766e92307a0d35d84c90d5a138b944 Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Tue, 20 Aug 2024 12:39:16 -0500 Subject: [PATCH 10/20] complexity still exisits reverting back to the other method of calling viewer --- plantcv/annotate/__init__.py | 2 -- plantcv/annotate/classestomove.py | 9 --------- plantcv/annotate/napari_open.py | 4 ++-- plantcv/annotate/napari_points_mask.py | 2 +- tests/test_napari_join_labels.py | 6 +++--- 5 files changed, 6 insertions(+), 17 deletions(-) delete mode 100755 plantcv/annotate/classestomove.py diff --git a/plantcv/annotate/__init__.py b/plantcv/annotate/__init__.py index c641133..83ad404 100644 --- a/plantcv/annotate/__init__.py +++ b/plantcv/annotate/__init__.py @@ -1,4 +1,3 @@ -from plantcv.annotate.classestomove import Viewer from plantcv.annotate.napari_classes import napari_classes from plantcv.annotate.napari_open import napari_open from plantcv.annotate.napari_label_classes import napari_label_classes @@ -9,7 +8,6 @@ __all__ = [ - "Viewer", "napari_classes", "napari_open", "napari_label_classes", diff --git a/plantcv/annotate/classestomove.py b/plantcv/annotate/classestomove.py deleted file mode 100755 index 61bc6a8..0000000 --- a/plantcv/annotate/classestomove.py +++ /dev/null @@ -1,9 +0,0 @@ -# Define Classes - -import napari - - -class Viewer(napari.Viewer): - def layer_size(self, layer): - """method to get current size of points""" - return self.layers[layer]._current_size diff --git a/plantcv/annotate/napari_open.py b/plantcv/annotate/napari_open.py index acf0de3..341fa36 100755 --- a/plantcv/annotate/napari_open.py +++ b/plantcv/annotate/napari_open.py @@ -2,8 +2,8 @@ import cv2 import numpy as np +import napari from skimage.color import label2rgb -from plantcv.annotate import Viewer def napari_open(img, show=True): @@ -34,6 +34,6 @@ def napari_open(img, show=True): if shape[2] > 3: img = img.transpose(2, 0, 1) showcall = show - viewer = Viewer(show=showcall) + viewer = napari.Viewer(show=showcall) viewer.add_image(img) return viewer diff --git a/plantcv/annotate/napari_points_mask.py b/plantcv/annotate/napari_points_mask.py index 3fb9376..d73eaa5 100755 --- a/plantcv/annotate/napari_points_mask.py +++ b/plantcv/annotate/napari_points_mask.py @@ -37,7 +37,7 @@ def napari_points_mask(img, viewer): maskname = str(key) mask = np.zeros((size[0], size[1])) data = list(viewer.layers[key].data) - shapesize = viewer.layer_size(key) + shapesize = viewer.layers[key]._current_size shapesizehalf = int(shapesize/2) for y, x in data: diff --git a/tests/test_napari_join_labels.py b/tests/test_napari_join_labels.py index 37e7748..61160bc 100644 --- a/tests/test_napari_join_labels.py +++ b/tests/test_napari_join_labels.py @@ -1,8 +1,8 @@ import numpy as np -from plantcv.annotate.napari_open import napari_open -from plantcv.annotate.napari_label_classes import napari_label_classes +from plantcv.annotate import napari_open +from plantcv.annotate import napari_label_classes from plantcv.plantcv import readimage -from plantcv.annotate.napari_join_labels import napari_join_labels +from plantcv.annotate import napari_join_labels from plantcv.plantcv import params From 16cbb671c028840451fc98e45de53fba7672cede Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 09:41:41 -0500 Subject: [PATCH 11/20] Update changelog.md --- docs/changelog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 4d0ef44..3480875 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -22,6 +22,10 @@ All notable changes to this project will be documented below. * v0.1dev: viewer = **annotate.napari_open**(*img, mode = 'native', show=True*) +#### annotate.napari_points_mask + +* v0.1dev: mask_dict = **annotate.napari_points_mask**(*img, viewer*) + #### annotate.napari_read_coor * v0.1dev: data = **annotate.napari_read_coor**(*coor, dataformat='yx'*) From 0d1a29a2f6d6b805f2db626d619abc297b5b7ef0 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 09:47:40 -0500 Subject: [PATCH 12/20] docs pattern of markdown, link to related functions --- docs/napari_points_mask.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/napari_points_mask.md b/docs/napari_points_mask.md index 6d8767a..936c169 100644 --- a/docs/napari_points_mask.md +++ b/docs/napari_points_mask.md @@ -1,22 +1,22 @@ ## Make Mask of Napari Points -This function is to generate a mask from napari point information. +This function is to generate a mask from Napari point information. This application of this function could be to get information about image at particular points (e.g. color or intensity information) -**plantcv.annotate.napari_points_mask*(*img, viewer) +**plantcv.annotate.napari_points_mask**(*img, viewer*) -**returns** dictionary of masks for each class +**returns** dictionary of masks, one for each class where the class label is the key to access - **Parameters:** - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data) - - viewer = Napari Viewer with point classes labeled. The size of the points in the mask will be from the viewer parameters. + - viewer = Napari Viewer with point classes labeled (likely created with [`napari_label_classes`](napari_label_classes.md)). The size of the points in the mask will be determined from the viewer parameters. - **Context:** - This function can be used to generate a mask from Napari points in order to get information about point data. - **Example use:** - - An application of this function might be collection of color data for the Naive Bayes module. + - An application of this function might be collection of color data for the [Naive Bayes module](https://plantcv.readthedocs.io/en/latest/tutorials/machine_learning_tutorial/). ```python @@ -27,11 +27,15 @@ import napari # Create an instance of the Points class img, path, name = pcv.readimage("./wheat.png") +# Should open interactive napari viewer viewer = pcvan.napari_label_classes(img,['background','healthy', 'rust', 'chlorosis'], size = 4) maskdict = pcvan.napari_points_mask(img,viewer) -# Should open interactive napari viewer +pcv.plot_image(maskdict['background']) +pcv.plot_image(maskdict['healthy']) +pcv.plot_image(maskdict['rust']) +pcv.plot_image(maskdict['chlorosis']) ``` From 3338dab7da90b052ff0a88a16706a03389a5be31 Mon Sep 17 00:00:00 2001 From: Malia Gehan Date: Fri, 13 Sep 2024 13:05:53 -0500 Subject: [PATCH 13/20] Update test_napari_points_mask.py missing viewer.close() on test --- tests/test_napari_points_mask.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_napari_points_mask.py b/tests/test_napari_points_mask.py index 4b82690..10a2834 100644 --- a/tests/test_napari_points_mask.py +++ b/tests/test_napari_points_mask.py @@ -16,3 +16,4 @@ def test_napari_points_mask(test_data): summask = int((np.sum(maskdict['total']))/255) assert summask == 2500 + viewer.close() From fe6f8d59888b1bacd7e8ff383af68e96637dea72 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:16:48 -0500 Subject: [PATCH 14/20] Update napari_label_classes.md remove shape param --- docs/napari_label_classes.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/napari_label_classes.md b/docs/napari_label_classes.md index 3b75029..2394f8f 100644 --- a/docs/napari_label_classes.md +++ b/docs/napari_label_classes.md @@ -4,7 +4,7 @@ This function opens an image in Napari and then defines a set of Points layers w Image can be annotated as long as viewer is open. -**plantcv.annotate.napari_label_classes*(*img, classes, size=10, shape='square', importdata=False, show=True*) +**plantcv.annotate.napari_label_classes*(*img, classes, size=10, importdata=False, show=True*) **returns** napari viewer object @@ -12,8 +12,6 @@ Image can be annotated as long as viewer is open. - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data) - classes - list of classes to label. This option is not necessary if data is data is imported. - size - integer pixel size of label (also adjustable from the interactive Napari viewer) - - shape - shape of the annotation symbol. Can be 'o', 'arrow', 'clobber', 'cross', 'diamond', 'disc', 'hbar', 'ring', 'square' (default), 'star', 'tailed_arrow', - 'triangle_down', 'triangle_up', 'vbar', or 'x' (also adjustable from the interactive Napari viewer) - importdata - dictionary of data, data saved from napari_save_coor or data imported from napari_read_coor - show - if `show=True`, viewer is launched. `False` setting is useful for test purposes. From 271f811215adf7578c3a50d3e22d6d1b36a6ce74 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:16:56 -0500 Subject: [PATCH 15/20] Update napari_label_classes.py remove shape param --- plantcv/annotate/napari_label_classes.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plantcv/annotate/napari_label_classes.py b/plantcv/annotate/napari_label_classes.py index 8809974..78e7f13 100755 --- a/plantcv/annotate/napari_label_classes.py +++ b/plantcv/annotate/napari_label_classes.py @@ -34,7 +34,6 @@ def napari_label_classes(img, classes=False, size=10, :param img: numpy.ndarray :param classes: list :param size: int - :param shape: str :param importdata: dict :param show: str From 48e03a942d9a37ae5b48416731c30d2156f2df33 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:17:43 -0500 Subject: [PATCH 16/20] Update changelog.md remove shape param from label_classes --- docs/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 3480875..e50a031 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -16,7 +16,7 @@ All notable changes to this project will be documented below. #### annotate.napari_label_classes -* v0.1dev: viewer = **annotate.napari_label_classes**(*img, classes, size=10, shape='square', importdata=False, show=True*) +* v0.1dev: viewer = **annotate.napari_label_classes**(*img, classes, size=10, importdata=False, show=True*) #### annotate.napari_open From d9cee177641ee44e2ce74badcc56e4e2674db6f8 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:29:41 -0500 Subject: [PATCH 17/20] docs syntax fix and replace positional arguments --- docs/napari_points_mask.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/napari_points_mask.md b/docs/napari_points_mask.md index 936c169..127a808 100644 --- a/docs/napari_points_mask.md +++ b/docs/napari_points_mask.md @@ -28,9 +28,9 @@ import napari img, path, name = pcv.readimage("./wheat.png") # Should open interactive napari viewer -viewer = pcvan.napari_label_classes(img,['background','healthy', 'rust', 'chlorosis'], size = 4) +viewer = pcvan.napari_label_classes(img=img, classes=['background','healthy', 'rust', 'chlorosis'], size=4) -maskdict = pcvan.napari_points_mask(img,viewer) +maskdict = pcvan.napari_points_mask(img, viewer) pcv.plot_image(maskdict['background']) pcv.plot_image(maskdict['healthy']) From 9129b593270e10aa7fb90b59e673dd2a3d037617 Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:30:04 -0500 Subject: [PATCH 18/20] docs syntax of header --- docs/napari_label_classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/napari_label_classes.md b/docs/napari_label_classes.md index 2394f8f..a5d99a6 100644 --- a/docs/napari_label_classes.md +++ b/docs/napari_label_classes.md @@ -4,7 +4,7 @@ This function opens an image in Napari and then defines a set of Points layers w Image can be annotated as long as viewer is open. -**plantcv.annotate.napari_label_classes*(*img, classes, size=10, importdata=False, show=True*) +**plantcv.annotate.napari_label_classes**(*img, classes, size=10, importdata=False, show=True*) **returns** napari viewer object From 7c77c2c241a83ebbee6a3b6d1e11d405df14e1ea Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:30:25 -0500 Subject: [PATCH 19/20] header syntax & link to relevant upstream function --- docs/napari_join_labels.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/napari_join_labels.md b/docs/napari_join_labels.md index b8cd44e..bd55342 100644 --- a/docs/napari_join_labels.md +++ b/docs/napari_join_labels.md @@ -2,17 +2,18 @@ This function joins classes with the same label. This function would be run after classes are labeled with napari_label_classes. -**plantcv.annotate.napari_join_labels*(*img, viewer*) +**plantcv.annotate.napari_join_labels**(*img, viewer*) **returns** relabeled mask, dictionary of masks for each class - **Parameters:** - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data) - - viewer - viewer with labeled classes. If no points are selected for a class, + - viewer - viewer with labeled classes(likely created with [`napari_label_classes`](napari_label_classes.md)). + If no points are selected for a class, data without labels will default to this class when napari_join_labels is run. If all classes have points labeled, any clusters not labeled will default to the last class in the list if napari_join_labels is - run. + run. - **Context:** - This function would be run after labeling classes in Napari is complete. From 12b1a34b7e3b799ad6ea6347482e7b06514add4c Mon Sep 17 00:00:00 2001 From: HaleySchuhl Date: Fri, 13 Sep 2024 14:34:36 -0500 Subject: [PATCH 20/20] dont comma separate the info about returns --- docs/napari_points_mask.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/napari_points_mask.md b/docs/napari_points_mask.md index 127a808..d124f64 100644 --- a/docs/napari_points_mask.md +++ b/docs/napari_points_mask.md @@ -6,7 +6,7 @@ at particular points (e.g. color or intensity information) **plantcv.annotate.napari_points_mask**(*img, viewer*) -**returns** dictionary of masks, one for each class where the class label is the key to access +**returns** dictionary of masks (one for each class where the class label is the key to access) - **Parameters:** - img - image data (compatible with gray, RGB, and hyperspectral data. If data is hyperspecral it should be the array e.g. hyperspectral.array_data)