{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline Op" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Added new repo: scijava.public\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "method": "display_data" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6b63bb20-2f0d-4c92-93b8-673dccb8369c", "version_major": 2, "version_minor": 0 }, "method": "display_data" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "net.imagej.ImageJ@3baf5137" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "//load ImageJ\n", "%classpath config resolver scijava.public https://maven.scijava.org/content/groups/public\n", "%classpath add mvn net.imagej imagej 2.0.0-rc-67\n", "\n", "//create ImageJ object\n", "ij = new net.imagej.ImageJ()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This op performs outlines any \"on\" objects on any binary image. Let's see how the `Op` is called:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Available operations:\n", "\t(RandomAccessibleInterval out?) =\n", "\tnet.imagej.ops.morphology.outline.Outline(\n", "\t\tRandomAccessibleInterval out?,\n", "\t\tRandomAccessibleInterval in1,\n", "\t\tBoolean in2)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ij.op().help(\"outline\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the parameters here:\n", "\n", "* `IterableInterval out`: the output image\n", "* `RandomAccessibleInterval in1`: the input image\n", "* `Boolean in2`: this boolean should be set to `true` if it is desired for the edges of the image to be treated as edges of the objects. For example (taken from the `Op` javadoc),\n", " For example, a 2D square:\n", " 0 0 0 0\n", " 1 1 1 0\n", " E 1 1 0\n", " 1 1 1 0\n", " 0 0 0 0\n", " Element E is removed if parameter true, kept if false\n", "\n", "We need to get a binary image to perform any morphological operations. Let's get a grayscale image and then binarize it using [the Huang Threshold Op](../threshold/threshold.ipynb#Huang-Thresholding):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[INFO] Verifying GIF format\n", "[INFO] Reading dimensions\n", "[INFO] Reading data blocks\n" ] }, { "data": { "image/png": "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" }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "input_full = ij.scifio().datasetIO().open(\"http://imagej.net/images/blobs.gif\")\n", "\n", "//input_full has 3 channels. We only need one.\n", "input = ij.op().run(\"hyperSliceView\", input_full, 2, 0)\n", "\n", "//invert the image so that the blobs are \"on\" and the background \"off\"\n", "inverted = ij.op().run(\"create.img\", input)\n", "ij.op().run(\"invert\", inverted, input)\n", "\n", "binaryInput = ij.op().run(\"threshold.huang\", inverted)\n", "\n", "ij.notebook().display(binaryInput)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have our image, let's outline all of the blobs:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import net.imglib2.algorithm.neighborhood.HyperSphereShape\n", "\n", "output = ij.op().run(\"outline\", binaryInput, true)\n", "\n", "ij.notebook().display(output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To show the difference, let's [stack](../transform/stackView.ipynb) the images to see the difference:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import net.imglib2.img.Img\n", "\n", "list = new ArrayList()\n", " \n", "list.add(binaryInput)\n", "list.add(output)\n", "\n", "stacked = ij.op().run(\"stackView\", list)\n", "\n", "ij.notebook().display(stacked)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the yellow edges that `outline` found (note that they are shared between the input and output, hence yellow) and the red insides of the blobs that were removed by `outline`." ] } ], "metadata": { "kernelspec": { "display_name": "Groovy", "language": "groovy", "name": "groovy" }, "language_info": { "codemirror_mode": "groovy", "file_extension": ".groovy", "mimetype": "", "name": "Groovy", "nbconverter_exporter": "", "version": "2.4.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": false, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }