{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Close 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": "55424458-bc09-41d8-8ade-cd50ca504b20", "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 [morphological closing](https://en.wikipedia.org/wiki/Closing_(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.close.ListClose(\n", "\t\tIterableInterval out?,\n", "\t\tRandomAccessibleInterval in1,\n", "\t\tList in2)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ij.op().help(\"close\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the parameters here:\n", "\n", "* `IterableInterval out`: the output image\n", "* `RandomAccessibleInterval in1`: the input image\n", "* `List in2`: this parameter contains all of the [`Shape`](http://javadoc.scijava.org/ImgLib2/net/imglib2/algorithm/neighborhood/Shape.html)s that the `Op` will use to close (i.e. for each `Shape` in `in2` close the input (or output of the last `close` if there are 2+ `Shape`s in `in2`)).\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": [ "As it states in the Wikipedia article, closing an image will bridge small gaps between objects. The smaller the gap, the wider the bridge:" ] }, { "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(6)\n", "\n", "output = ij.op().run(\"close\", null, binaryInput, [shape])\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 denoting the original blobs as well as the green bridges between the blobs." ] } ], "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 }