diff --git a/demo/segmentation/level_set_segmentation.ipynb b/demo/segmentation/level_set_segmentation.ipynb new file mode 100644 index 00000000..27a9b221 --- /dev/null +++ b/demo/segmentation/level_set_segmentation.ipynb @@ -0,0 +1,197 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "import pyclesperanto_prototype as cle\n", + "from skimage.data import cells3d\n", + "from skimage.segmentation import morphological_chan_vese\n", + "import timeit\n", + "cle.select_device()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(60, 256, 256)\n" + ] + } + ], + "source": [ + "image = cells3d()[:,0,...]\n", + "cle.imshow(image)\n", + "print(image.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def level_set_gpu():\n", + " result_gpu = cle.morphological_snakes(image, n_iter=50, smoothing=0)\n", + " \n", + "def level_set_cpu():\n", + " result_cpu = morphological_chan_vese(image, iterations=50, smoothing=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "GPU time = 51.594847822\n" + ] + } + ], + "source": [ + "time_in_s = timeit.timeit(level_set_gpu, number=10)\n", + "print(\"GPU time = \", time_in_s)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU time = 87.60801198099999\n" + ] + } + ], + "source": [ + "time_in_s = timeit.timeit(level_set_cpu, number=10)\n", + "print(\"CPU time = \", time_in_s)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "image2d = cells3d()[30,0,...]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "result_gpu = cle.morphological_snakes(image2d, n_iter=50, smoothing=0)\n", + "cle.imshow(result_gpu)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "result_cpu = morphological_chan_vese(image2d, iterations=50, smoothing=0)\n", + "cle.imshow(result_cpu)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pyclesperanto", + "language": "python", + "name": "pyclesperanto" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + }, + "vscode": { + "interpreter": { + "hash": "f7e7e84a546d85c5beef5f7108b3ea7afa16a9e8e3877bd0c0d54e4df90a2b54" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyclesperanto_prototype/_tier3/__init__.py b/pyclesperanto_prototype/_tier3/__init__.py index 19bd0bc3..c29c4e97 100644 --- a/pyclesperanto_prototype/_tier3/__init__.py +++ b/pyclesperanto_prototype/_tier3/__init__.py @@ -54,6 +54,7 @@ from ._standard_deviation_of_touching_neighbors_map import standard_deviation_of_touching_neighbors_map from ._standard_deviation_of_proximal_neighbors_map import standard_deviation_of_proximal_neighbors_map from ._standard_deviation_of_proximal_neighbors_map import standard_deviation_of_proximal_neighbors_map as standard_deviation_of_distal_neighbors_map +from ._morphological_snakes import morphological_snakes from ._subtract_gaussian_background import subtract_gaussian_background from ._z_position_range_projection import z_position_range_projection \ No newline at end of file diff --git a/pyclesperanto_prototype/_tier3/_morphological_snakes.py b/pyclesperanto_prototype/_tier3/_morphological_snakes.py new file mode 100644 index 00000000..85a8f20f --- /dev/null +++ b/pyclesperanto_prototype/_tier3/_morphological_snakes.py @@ -0,0 +1,154 @@ +from skimage import morphology +import numpy as np +from .._tier0 import Image +from .._tier0 import plugin_function +from .._tier0 import create_like +from .._tier1 import absolute +from .._tier1 import binary_or +from .._tier1 import binary_not +from .._tier1 import gradient_x +from .._tier1 import gradient_y +from .._tier1 import gradient_z, copy, power +from .._tier1 import greater_constant, smaller_constant +from .._tier1 import mask, add_image_and_scalar, add_images_weighted +from .._tier2 import opening_sphere, closing_sphere + +@plugin_function +def morphological_snakes(input_image: Image, + contour_image : Image = np.zeros((0, 0)), + output_image : Image = None, + n_iter : int = 100, + smoothing : int = 1, + lambda1 : float = 1, + lambda2 : float = 1) -> Image: + """ + Parameters + ---------- + input_iamge: Image + contour_image: Image, optional + output_image: Image, optional + n_iter: int, optional + smoothing: int, optional + lambda1: int, optional + lambda2: int, optional + + Returns + ------- + Final segmentation + + """ + + if contour_image.size == 0: + contour_image = checkerboard_level_set(input_image.shape) + + greater_constant(contour_image, destination=output_image, constant=0) + + temp_1 = create_like(output_image) + temp_2 = create_like(output_image) + temp_3 = create_like(output_image) + temp_4 = create_like(output_image) + temp_5 = create_like(output_image) + + for _ in range(n_iter): + + # c0 = (image * (1 - u)).sum() / float((1 - u).sum() + 1e-8) + # c1 = (image * u).sum() / float(u.sum() + 1e-8) + + # define invert image + binary_not(output_image, destination=temp_1) + + # compute outside contour score + sum_image_value = mask(input_image, mask=temp_1).sum() + sum_contour_value = temp_1.sum() + 1e-8 + c0 = - (sum_image_value / sum_contour_value) + + # compute inside contour score + sum_image_value = mask(input_image, mask=output_image).sum() + sum_contour_value = output_image.sum() + 1e-8 + c1 = - (sum_image_value / sum_contour_value) + + + # du = np.gradient(u) + # abs_du = np.abs(du).sum(0) + + # compute gradient on contour in all direction + for d in range(input_image.ndim): + if d == 0: + gradient_x(output_image, destination=temp_1) + absolute(temp_1, destination=temp_2) + temp_3 += temp_2 + if d == 1: + gradient_y(output_image, destination=temp_1) + absolute(temp_1, destination=temp_2) + temp_3 += temp_2 + if d == 2: + gradient_z(output_image, destination=temp_1) + absolute(temp_1, destination=temp_2) + temp_3 += temp_2 + + # compute contour evolution according to gradient and score on contour + + # aux = abs_du * (lambda1 * (image - c1)**2 - lambda2 * (image - c0)**2) + + + add_image_and_scalar(input_image, destination=temp_1, scalar=c1) + add_image_and_scalar(input_image, destination=temp_2, scalar=c0) + power(temp_1, destination=temp_4, exponent=2) + power(temp_2, destination=temp_5, exponent=2) + temp_2 = temp_3 * (lambda1 * temp_4 - lambda2 * temp_5) + + # apply contour update on contour image + + # u[aux < 0] = 1 + # u[aux > 0] = 0 + + # # Smoothing + # for _ in range(smoothing): + # u = _curvop(u) + + + + greater_constant(temp_2, destination=temp_1, constant=0) + smaller_constant(temp_2, destination=temp_3, constant=0) + + binary_or(temp_1, temp_3, destination=temp_4) + binary_not(temp_4, destination=temp_1) + mask(output_image, mask=temp_1, destination=temp_2) + add_images_weighted(temp_2, temp_3, destination=temp_1, factor1=1, factor2=1) + + # smooth contour + for _ in range(smoothing): + opening_sphere(temp_1, destination=temp_2, radius_x=1, radius_y=1, radius_z=1) + closing_sphere(temp_2, destination=temp_1, radius_x=1, radius_y=1, radius_z=1) + + copy(temp_1, destination=output_image) + + return output_image + + +def checkerboard_level_set(image_shape, square_size=5): + """Create a checkerboard level set with binary values. + Parameters + ---------- + image_shape : tuple of positive integers + Shape of the image. + square_size : int, optional + Size of the squares of the checkerboard. It defaults to 5. + Returns + ------- + out : array with shape `image_shape` + Binary level set of the checkerboard. + See Also + -------- + disk_level_set + """ + + grid = np.mgrid[[slice(i) for i in image_shape]] + grid = (grid // square_size) + + # Alternate 0/1 for even/odd numbers. + grid = grid & 1 + + checkerboard = np.bitwise_xor.reduce(grid, axis=0) + res = np.int8(checkerboard) + return res \ No newline at end of file diff --git a/tests/test_morphological_snakes.py b/tests/test_morphological_snakes.py new file mode 100644 index 00000000..1a72da5b --- /dev/null +++ b/tests/test_morphological_snakes.py @@ -0,0 +1,27 @@ +import pyclesperanto_prototype as cle +from skimage import morphology +from skimage import segmentation +import numpy as np + +def test_morphological_snakes(): + + image = generate_disk((50, 50), 5) + + reference = cle.push(segmentation.morphological_chan_vese(image, num_iter=1, smoothing=1, lambda1=1, lambda2=1)) + + result = cle.morphological_snakes(image, n_iter=1, smoothing=1, lambda1=1, lambda2=1) + + a = cle.pull(result) + b = cle.pull(reference) + + print(a) + print(b) + + assert (np.array_equal(a, b)) + + +def generate_disk(shape, radius): + image = np.zeros(shape) + image[image.shape[0] // 2 - radius:image.shape[0] // 2 + radius + 1, + image.shape[1] // 2 - radius:image.shape[1] // 2 + radius + 1] = morphology.disk(radius) + return image