{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Erode 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": "e33c8d93-d958-4986-8312-613337cfcfa9", "version_major": 2, "version_minor": 0 }, "method": "display_data" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "net.imagej.ImageJ@7b00c550" ] }, "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 [morphological erosion](https://en.wikipedia.org/wiki/Erosion_(morphology)) 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(IterableInterval out?) =\n", "\tnet.imagej.ops.morphology.erode.DefaultErode(\n", "\t\tIterableInterval out?,\n", "\t\tRandomAccessibleInterval in1,\n", "\t\tShape in2,\n", "\t\tboolean isFull?,\n", "\t\tOutOfBoundsFactory f?)\n", "\t(IterableInterval out?) =\n", "\tnet.imagej.ops.morphology.erode.ListErode(\n", "\t\tIterableInterval out?,\n", "\t\tRandomAccessibleInterval in1,\n", "\t\tList in2,\n", "\t\tboolean isFull?)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ij.op().help(\"erode\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the parameters here:\n", "\n", "* `IterableInterval out`: the output image\n", "* `RandomAccessibleInterval in1`: the input image\n", "* `Shape in2`: the [`Shape`](http://javadoc.scijava.org/ImgLib2/net/imglib2/algorithm/neighborhood/Shape.html) that the `Op` will use to dilate each edge point of a structure. Note that in the Wikipedia article linked in the previous cell a circle was used; there are many other options (such as a rectangle) that are also available in ImageJ-Ops.\n", "* `List in2`: this parameter, only used in `ListErode`, contains a list of `Shape`s each used once in a series of erosions (i.e. for each `Shape` in the `List` call `DefaultErode` using the input (from the last `erode` if not the first) and that `Shape`)\n", "* `boolean isFull`: an **optional** parameter that the user can set to tell the `Op` if the **dimensions of the output** are bigger than the dimensions of the input **plus** the radius of the `Shape` parameter. This parameter should **never** be set to true if **no output is given**, since this will cause the output to be translated and therefore inaccurate.\n", "* `OutOfBoundsFactory f`: an **optional** parameter that tells the `Op` how to extend the input (so that the `Shape` can be applied outside each of the input's edge values without error). If no `OutOfBoundsFactory` is given all values outside the input `Interval` are set to the \"off\" value of the binary image.\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 erode it :" ] }, { "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", "//create the shape that we are going to dilate the image with\n", "shape = new HyperSphereShape(4)\n", "\n", "output = ij.op().run(\"erode\", null, binaryInput, shape, false)\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 regions, where the red original image and the green eroded image are the same, as well as the red borders that show where the erosion occurred." ] } ], "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 }