diff --git a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_base.scssc b/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_base.scssc deleted file mode 100644 index f2343818403d378a27cf7a1776c7caca552acd46..0000000000000000000000000000000000000000 Binary files a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_base.scssc and /dev/null differ diff --git a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_layout.scssc b/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_layout.scssc deleted file mode 100644 index 8247d159faaff83198531e2b15de5dfa99d91056..0000000000000000000000000000000000000000 Binary files a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_layout.scssc and /dev/null differ diff --git a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_syntax-highlighting.scssc b/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_syntax-highlighting.scssc deleted file mode 100644 index 4f51ca8ac7d92b3d465c9b6fa9fd724f0f93ac90..0000000000000000000000000000000000000000 Binary files a/.sass-cache/761eea354431019149b389dbb9a279bff524cd59/_syntax-highlighting.scssc and /dev/null differ diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 4fb1142ad0658bb4aa2eb2d34a94f5cca174a7c2..0000000000000000000000000000000000000000 --- a/Gemfile.lock +++ /dev/null @@ -1,71 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) - concurrent-ruby (1.1.5) - ffi (1.11.1) - forwardable-extended (2.6.0) - i18n (1.6.0) - concurrent-ruby (~> 1.0) - jekyll (3.4.0) - addressable (~> 2.4) - colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 3.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (~> 1.7) - safe_yaml (~> 1.0) - jekyll-commonmark (1.2.0) - commonmarker (~> 0.14) - jekyll (>= 3.0, < 4.0) - jekyll-commonmark-ghpages (0.1.0) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-watch (1.5.1) - listen (~> 3.0) - kramdown (1.17.0) - liquid (3.0.6) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (3.1.0) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rouge (1.11.1) - ruby-enum (0.7.2) - i18n - ruby_dep (1.5.0) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll (= 3.4.0) - jekyll-commonmark-ghpages - tzinfo-data - -RUBY VERSION - ruby 2.6.2p47 - -BUNDLED WITH - 2.0.1 diff --git a/_site/CONTRIBUTING.html b/_site/CONTRIBUTING.html deleted file mode 100644 index 823c4dc889d370dabcf30bd2b520eb853018075c..0000000000000000000000000000000000000000 --- a/_site/CONTRIBUTING.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - Image Analysis Training - - - - - - - - - - - - - - - -
-
-

Guidelines for Contributing

-

Contributions to this project are very welcome. -Changes should be submitted by merge request from a new branch to master. -Merge requests should be reviewed by at least one Maintainer before merging.

-

See README.md for information on the structure of the repository.

-

Step by step guide

-

To contribute to this project, please follow those steps:

-
    -
  1. Clone this repository: git clone https://git.embl.de/grp-bio-it/image-analysis-training-resources.git
  2. -
  3. On your computer, make a new branch. For example, if you would like to contribute python code to the binarization.md module you may: git checkout -b pythonBinarization
  4. -
  5. Now add your changes on your computer (staying in this branch) - see "Adding a new module" section, below.
  6. -
  7. When you are done, please git add .; git commit -m "some message"
  8. -
  9. Now you can upload your branch to the online repository by typing: git push --set-upstream origin pythonBinarization.
  10. -
  11. Go to the online repository on gitlab: https://git.embl.de/grp-bio-it/image-analysis-training-resources
  12. -
  13. On gitlab, there will now be button at the top of the page. Click this button to stage a "merge request" of your contribution (in your branch) to the master branch. There will also a possibility to assign a project maintainer to review your contribution and to merge it. Please select someone appropriate here.
  14. -
  15. Thank you for your contribution!
  16. -
-

Adding a new module

-

Each module page is built from a template (_layouts/module.html), -ensuring a consistent structure and style for the whole collection. -To create a new module, you will need to add a few files -in a few different places in this repository.

-

Module file

-

Most important is the module file itself. -This module file should be saved with a short, descriptive name (no spaces!) -ending with the .md (Markdown) extension. -Typically, the only content of this Markdown file should be a header -written in YAML. See the specification below. -All fields not marked as optional are required for the page to build. -You can check that your YAML is valid with this tool.

-
---
-title:     Title of the Module
-layout:    module               # don't change this
-prerequisites:
-  - "a list of things that learners should know"
-  - "in order to understand this module"
-objectives:
-  - "a list of learning objectives"
-  - "see note 1 below for more info"
-motivation: >
-  A description of *why* you would want to learn this.
-  Can be written in
-  (GitHub-flavoured) [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)
-  and split
-  across
-  multiple
-  lines.
-concept_map: > # see note 2
-  graph TD
-      A[Christmas] -->|Get money| B(Go shopping)
-      B --> C{Let me think}
-      C -->|One| D[Laptop]
-      C -->|Two| E[iPhone]
-      C -->|Three| F[fa:fa-car Car];
-figure: /figures/mymodule.png # store the example image for your module in the `figures` folder and provide the absolute path from the root of the site here.
-figure_legend: Some description of the figure. (optional)
-activity_preface: >
-  Some general description of the activity for
-  that learners will do while studying the module.
-  It will be followed by platform-specific instructions/example code.
-  (optional)
-activities: # platform-specific activity instruction/example code files (see note 3) (optional)
-  "ImageJ GUI": "mymodule/activities/mymodule_imagejgui.md"
-  "ImageJ Macro": "mymodule/activities/mymodule_imagejmacro.md"
-  "Jython": "mymodule/activities/mymodule_jython.md"
-exercises_preface: >
-  You could put general, language-agnostic questions here...
-  (optional)
-exercises: # platform-specific exercises (in Markdown files) (see note 3) (optional)
-  "ImageJ GUI": "mymodule/exercises/mymodule_imagejgui.md"
-  "ImageJ Macro": "mymodule/exercises/mymodule_imagejmacro.md"
-  "Jython": "mymodule/exercises/mymodule_jython.md"
-  "MATLAB": "mymodule/exercises/mymodule_matlab.md"
-learn_next: # see note 4
-  - "[name_of_one](calibration)"
-  - "[or_more_modules](object_splitting)"
-  - "[to link to next](display)"
-external_links:
-  - "[link to](https://external.page.com)"
----
-
-

Notes:

-
    -
  1. Learning objectives should be worded as endings to a sentence beginning "After completing this lesson, learners should be able to...". We recommend starting each learning objective with a verb from Bloom's Taxonomy
  2. -
  3. Concept maps are drawn with Mermaid.js. The indentation of the chart description is important, so be careful!
  4. -
  5. The activities and exercises fields should be populated with key-value pairs, where the key is the name of the platform (e.g. "ImageJ GUI", "Python", etc) and the value is the path (relative to _includes/) to the file containing the activity instructions/exercises for that platform.
  6. -
  7. The points in "Learn Next" are Markdown links, which should be formed as [Module Title](modulefilename), where the extension has been removed from the filename.
  8. -
-

Associated files

-

Below is a list of all the other files that you should provide -to accompany a new module, -as well as the appropriate location for each -(relative to the top level of the repository). -Examples are given for a /modules/mymodule.md

- -

Adding exercises/activity instructions for a new platform

-

Contributions of instructions and exercises for more platforms are very welcome - please see the "Associated files" subsection above for details of where these contributed files should be added.

-

Questions about the module layout

-

If you have questions about the module layout, please contact Toby Hodges.

- -
-
- - - - - - - diff --git a/_site/Gemfile b/_site/Gemfile deleted file mode 100644 index d871508228605a13ec352bcb0ec0699b01e53467..0000000000000000000000000000000000000000 --- a/_site/Gemfile +++ /dev/null @@ -1,13 +0,0 @@ -source "https://rubygems.org" -ruby RUBY_VERSION - -# This will help ensure the proper Jekyll version is running. -gem "jekyll", "3.4.0" - -# Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] - -# install GH-flavoured MD plugin -group :jekyll_plugins do - gem 'jekyll-commonmark-ghpages' -end diff --git a/_site/Gemfile.lock b/_site/Gemfile.lock deleted file mode 100644 index 4fb1142ad0658bb4aa2eb2d34a94f5cca174a7c2..0000000000000000000000000000000000000000 --- a/_site/Gemfile.lock +++ /dev/null @@ -1,71 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) - concurrent-ruby (1.1.5) - ffi (1.11.1) - forwardable-extended (2.6.0) - i18n (1.6.0) - concurrent-ruby (~> 1.0) - jekyll (3.4.0) - addressable (~> 2.4) - colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 3.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (~> 1.7) - safe_yaml (~> 1.0) - jekyll-commonmark (1.2.0) - commonmarker (~> 0.14) - jekyll (>= 3.0, < 4.0) - jekyll-commonmark-ghpages (0.1.0) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-watch (1.5.1) - listen (~> 3.0) - kramdown (1.17.0) - liquid (3.0.6) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (3.1.0) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rouge (1.11.1) - ruby-enum (0.7.2) - i18n - ruby_dep (1.5.0) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll (= 3.4.0) - jekyll-commonmark-ghpages - tzinfo-data - -RUBY VERSION - ruby 2.6.2p47 - -BUNDLED WITH - 2.0.1 diff --git a/_site/LICENSE.md b/_site/LICENSE.md deleted file mode 100644 index 9e07a6e7d0d248404ba021ee70b64eac17c0f6ef..0000000000000000000000000000000000000000 --- a/_site/LICENSE.md +++ /dev/null @@ -1,41 +0,0 @@ -This material is made available under the [Creative Commons Attribution license][cc-by-human]. -The following is a human-readable summary of (and not a substitute for) -the [full legal text of the CC BY 4.0 license][cc-by-legal]. - -You are free: - -* to **Share**---copy and redistribute the material in any medium or format -* to **Adapt**---remix, transform, and build upon the material - -for any purpose, even commercially. - -The licensor cannot revoke these freedoms as long as you follow the -license terms. - -Under the following terms: - -* **Attribution**---You must give appropriate credit (mentioning that - your work is derived from work that is Copyright © - European Molecualr Biology Laboratory and, where practical, link to - the [source project repository][our-gitlab-repo]) and [the license][cc-by-human], - and indicate if changes were made. You may do - so in any reasonable manner, but not in any way that suggests the - licensor endorses you or your use. - -**No additional restrictions**---You may not apply legal terms or -technological measures that legally restrict others from doing -anything the license permits. With the understanding that: - -Notices: - -* You do not have to comply with the license for elements of the - material in the public domain or where your use is permitted by an - applicable exception or limitation. -* No warranties are given. The license may not give you all of the - permissions necessary for your intended use. For example, other - rights such as publicity, privacy, or moral rights may limit how you - use the material. - -[cc-by-human]: https://creativecommons.org/licenses/by/4.0/ -[cc-by-legal]: https://creativecommons.org/licenses/by/4.0/legalcode -[our-gitlab-repo]: https://git.embl.de/grp-bio-it/image-analysis-training-resources/ \ No newline at end of file diff --git a/_site/css/main.css b/_site/css/main.css deleted file mode 100644 index 1fb1692b6443c8f257729f6afd8aa38c9f166e6e..0000000000000000000000000000000000000000 --- a/_site/css/main.css +++ /dev/null @@ -1,457 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; } - -/** - * Basic styling - */ -body { - font: 400 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #111; - background-color: #fdfdfd; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; } - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -.highlight { - margin-bottom: 15px; } - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; } - -/** - * Figures - */ -figure > img { - display: block; } - -figcaption { - font-size: 14px; } - -/** - * Lists - */ -ul, ol { - margin-left: 30px; } - -li > ul, -li > ol { - margin-bottom: 0; } - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: 400; } - -/** - * Links - */ -a { - color: #2a7ae2; - text-decoration: none; } - a:visited { - color: #1756a9; } - a:hover { - color: #111; - text-decoration: underline; } - -/** - * Blockquotes - */ -blockquote { - color: #828282; - border-left: 4px solid #e8e8e8; - padding-left: 15px; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; } - blockquote > :last-child { - margin-bottom: 0; } - -/** - * Code formatting - */ -pre, -code { - font-size: 15px; - border: 1px solid #e8e8e8; - border-radius: 3px; - background-color: #eef; } - -code { - padding: 1px 5px; } - -pre { - padding: 8px 12px; - overflow-x: auto; } - pre > code { - border: 0; - padding-right: 0; - padding-left: 0; } - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(800px - (30px * 2)); - max-width: calc(800px - (30px * 2)); - margin-right: auto; - margin-left: auto; - padding-right: 30px; - padding-left: 30px; } - @media screen and (max-width: 800px) { - .wrapper { - max-width: -webkit-calc(800px - (30px)); - max-width: calc(800px - (30px)); - padding-right: 15px; - padding-left: 15px; } } - -/** - * Clearfix - */ -.wrapper:after, .footer-col-wrapper:after { - content: ""; - display: table; - clear: both; } - -/** - * Icons - */ -.icon > svg { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: middle; } - .icon > svg path { - fill: #828282; } - -/** - * Site header - */ -.site-header { - border-top: 5px solid #424242; - border-bottom: 1px solid #e8e8e8; - min-height: 56px; - position: relative; } - -.site-title { - font-size: 26px; - font-weight: 300; - line-height: 56px; - letter-spacing: -1px; - margin-bottom: 0; - float: left; } - .site-title, .site-title:visited { - color: #424242; } - -.site-nav { - float: right; - line-height: 56px; } - .site-nav .menu-icon { - display: none; } - .site-nav .page-link { - color: #111; - line-height: 1.5; } - .site-nav .page-link:not(:last-child) { - margin-right: 20px; } - @media screen and (max-width: 600px) { - .site-nav { - position: absolute; - top: 9px; - right: 15px; - background-color: #fdfdfd; - border: 1px solid #e8e8e8; - border-radius: 5px; - text-align: right; } - .site-nav .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; } - .site-nav .menu-icon > svg { - width: 18px; - height: 15px; } - .site-nav .menu-icon > svg path { - fill: #424242; } - .site-nav .trigger { - clear: both; - display: none; } - .site-nav:hover .trigger { - display: block; - padding-bottom: 5px; } - .site-nav .page-link { - display: block; - padding: 5px 10px; - margin-left: 20px; } - .site-nav .page-link:not(:last-child) { - margin-right: 0; } } - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid #e8e8e8; - padding: 30px 0; } - -.footer-heading { - font-size: 18px; - margin-bottom: 15px; } - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; } - -.footer-col-wrapper { - font-size: 15px; - color: #828282; - margin-left: -15px; } - -.footer-col { - float: left; - margin-bottom: 15px; - padding-left: 15px; } - -.footer-col-1 { - width: -webkit-calc(35% - (30px / 2)); - width: calc(35% - (30px / 2)); } - -.footer-col-2 { - width: -webkit-calc(20% - (30px / 2)); - width: calc(20% - (30px / 2)); } - -.footer-col-3 { - width: -webkit-calc(45% - (30px / 2)); - width: calc(45% - (30px / 2)); } - -@media screen and (max-width: 800px) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (30px / 2)); - width: calc(50% - (30px / 2)); } - - .footer-col-3 { - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - (30px / 2)); } } -@media screen and (max-width: 600px) { - .footer-col { - float: none; - width: -webkit-calc(100% - (30px / 2)); - width: calc(100% - (30px / 2)); } } -/** - * Page content - */ -.page-content { - padding: 30px 0; } - -.page-heading { - font-size: 20px; } - -.post-list { - margin-left: 0; - list-style: none; } - .post-list > li { - margin-bottom: 30px; } - -.post-meta { - font-size: 14px; - color: #828282; } - -.post-link { - display: block; - font-size: 24px; } - -/** - * Posts - */ -.post-header { - margin-bottom: 30px; } - -.post-title { - font-size: 42px; - letter-spacing: -1px; - line-height: 1; } - @media screen and (max-width: 800px) { - .post-title { - font-size: 36px; } } - -.post-content { - margin-bottom: 30px; } - .post-content h2 { - font-size: 32px; } - @media screen and (max-width: 800px) { - .post-content h2 { - font-size: 28px; } } - .post-content h3 { - font-size: 26px; } - @media screen and (max-width: 800px) { - .post-content h3 { - font-size: 22px; } } - .post-content h4 { - font-size: 20px; } - @media screen and (max-width: 800px) { - .post-content h4 { - font-size: 18px; } } - -/** - * Syntax highlighting styles - */ -.highlight { - background: #fff; } - .highlighter-rouge .highlight { - background: #eef; } - .highlight .c { - color: #998; - font-style: italic; } - .highlight .err { - color: #a61717; - background-color: #e3d2d2; } - .highlight .k { - font-weight: bold; } - .highlight .o { - font-weight: bold; } - .highlight .cm { - color: #998; - font-style: italic; } - .highlight .cp { - color: #999; - font-weight: bold; } - .highlight .c1 { - color: #998; - font-style: italic; } - .highlight .cs { - color: #999; - font-weight: bold; - font-style: italic; } - .highlight .gd { - color: #000; - background-color: #fdd; } - .highlight .gd .x { - color: #000; - background-color: #faa; } - .highlight .ge { - font-style: italic; } - .highlight .gr { - color: #a00; } - .highlight .gh { - color: #999; } - .highlight .gi { - color: #000; - background-color: #dfd; } - .highlight .gi .x { - color: #000; - background-color: #afa; } - .highlight .go { - color: #888; } - .highlight .gp { - color: #555; } - .highlight .gs { - font-weight: bold; } - .highlight .gu { - color: #aaa; } - .highlight .gt { - color: #a00; } - .highlight .kc { - font-weight: bold; } - .highlight .kd { - font-weight: bold; } - .highlight .kp { - font-weight: bold; } - .highlight .kr { - font-weight: bold; } - .highlight .kt { - color: #458; - font-weight: bold; } - .highlight .m { - color: #099; } - .highlight .s { - color: #d14; } - .highlight .na { - color: #008080; } - .highlight .nb { - color: #0086B3; } - .highlight .nc { - color: #458; - font-weight: bold; } - .highlight .no { - color: #008080; } - .highlight .ni { - color: #800080; } - .highlight .ne { - color: #900; - font-weight: bold; } - .highlight .nf { - color: #900; - font-weight: bold; } - .highlight .nn { - color: #555; } - .highlight .nt { - color: #000080; } - .highlight .nv { - color: #008080; } - .highlight .ow { - font-weight: bold; } - .highlight .w { - color: #bbb; } - .highlight .mf { - color: #099; } - .highlight .mh { - color: #099; } - .highlight .mi { - color: #099; } - .highlight .mo { - color: #099; } - .highlight .sb { - color: #d14; } - .highlight .sc { - color: #d14; } - .highlight .sd { - color: #d14; } - .highlight .s2 { - color: #d14; } - .highlight .se { - color: #d14; } - .highlight .sh { - color: #d14; } - .highlight .si { - color: #d14; } - .highlight .sx { - color: #d14; } - .highlight .sr { - color: #009926; } - .highlight .s1 { - color: #d14; } - .highlight .ss { - color: #990073; } - .highlight .bp { - color: #999; } - .highlight .vc { - color: #008080; } - .highlight .vg { - color: #008080; } - .highlight .vi { - color: #008080; } - .highlight .il { - color: #099; } diff --git a/_site/example-images/index.html b/_site/example-images/index.html deleted file mode 100644 index 929315b418e48c979f1796e3c0811a508ed95a5f..0000000000000000000000000000000000000000 --- a/_site/example-images/index.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - Example Images - - - - - - - - - - - - - - - -
-
-
- -
-

Example Images

-
- -
-

Example Images for Teaching

-

Below is a list of links to images that instructors have used as examples when -teaching image analysis concepts and techniques.

-

Add a link according to the following template:

-

* [Title/short description of image](link to image): brief description of why the image has been chosen and for which concepts it is useful when teaching

- -
- -
- -
-
- - - - - - - diff --git a/_site/figures/animated-histogram.gif b/_site/figures/animated-histogram.gif deleted file mode 100644 index 9c0525e2b3bc35992117c92a079391f9a50fba99..0000000000000000000000000000000000000000 Binary files a/_site/figures/animated-histogram.gif and /dev/null differ diff --git a/_site/figures/binarization.png b/_site/figures/binarization.png deleted file mode 100644 index 25213f14212400bcb0664505715d88dbaee27611..0000000000000000000000000000000000000000 Binary files a/_site/figures/binarization.png and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif deleted file mode 100644 index 48ef1028f9818f37d4c2417d30df2869ced6962a..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00001--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00001--Z000--C.tif deleted file mode 100644 index 79920af70487c831410b0fc839760f167763428b..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00001--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00002--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00002--Z000--C.tif deleted file mode 100644 index 4f8d549aa2b928b83ab6caa2202586a190990722..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00002--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00003--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00003--Z000--C.tif deleted file mode 100644 index 2b666b0dc18539b6a3085de86d8bd2d805985677..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00003--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00004--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00004--Z000--C.tif deleted file mode 100644 index 9185b7adf6f01613fea568896f84a2d0ec2bc2db..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00004--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00005--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00005--Z000--C.tif deleted file mode 100644 index af8228595a8bbf8ea12742b63612d4140e7dfa15..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00005--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00006--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00006--Z000--C.tif deleted file mode 100644 index d8263f9548310d2b8308b5be482ff95f55b12526..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00006--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00007--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00007--Z000--C.tif deleted file mode 100644 index 02bfb3138d52674cfcd39f57bf096206211641c6..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00007--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00008--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00008--Z000--C.tif deleted file mode 100644 index 043e8dced326a11156cae41d181750293abc1c15..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00008--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00009--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00009--Z000--C.tif deleted file mode 100644 index 741934d2a517cbd192c93cbf368a8dbb85d5f0b6..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00009--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00010--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00010--Z000--C.tif deleted file mode 100644 index 7a6003bcee50f9e342d247820199a6eff6306f58..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00010--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00011--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00011--Z000--C.tif deleted file mode 100644 index 55f6cacafec58170dc47b75eb340fc0643657500..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00011--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00012--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00012--Z000--C.tif deleted file mode 100644 index d2f452eaab3b2bfa3bcb1d1fe4e4d13ce836d6e6..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00012--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00013--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00013--Z000--C.tif deleted file mode 100644 index 29fa44c6d18037889309e8eb9b2f006ba5118b5f..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00013--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00014--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00014--Z000--C.tif deleted file mode 100644 index afd9a7fe90ee8d9250b26e756168f51ffcf68db0..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00014--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00015--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00015--Z000--C.tif deleted file mode 100644 index e3e99a1e1a98738e1d7c3300b83d12fc3f30e563..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00015--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00016--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00016--Z000--C.tif deleted file mode 100644 index fff03a2060043879b89d6c4da6e0be591b6f94f0..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00016--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00017--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00017--Z000--C.tif deleted file mode 100644 index 18885dbca390531b7871076c4c64383ec2b66fe4..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00017--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00018--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00018--Z000--C.tif deleted file mode 100644 index 8a960c614ad8a23a5d155f49b0c8d424f547d969..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00018--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00019--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00019--Z000--C.tif deleted file mode 100644 index 5b70081ee547a993f5ac96170b9057ed94092fab..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00019--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00020--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00020--Z000--C.tif deleted file mode 100644 index 71e1b8d1a16419f2430cbb455fd60d3563146d6e..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00020--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00021--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00021--Z000--C.tif deleted file mode 100644 index 2ce1911e96789e8b1d9492cad74ddaa9efc98633..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00021--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00022--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00022--Z000--C.tif deleted file mode 100644 index 6e97f811da236a47e0352afea436187a9fde7fc8..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00022--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00023--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00023--Z000--C.tif deleted file mode 100644 index aaeddc9ba4bd7a02aa9966acf6d7c20b90aa819d..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00023--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00024--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00024--Z000--C.tif deleted file mode 100644 index 5fc6ef1c909d4f84dbfe8fd929881aae708751cc..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00024--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00025--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00025--Z000--C.tif deleted file mode 100644 index 7991d4713b3b0289eaf335c6fad8e291d2b5aac1..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00025--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00026--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00026--Z000--C.tif deleted file mode 100644 index 41d3e8659410f911568c853f54efe61d458ea37c..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00026--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00027--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00027--Z000--C.tif deleted file mode 100644 index 7ec2421755fb76926dc856b77b849669e072e46b..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00027--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00028--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00028--Z000--C.tif deleted file mode 100644 index 96d90a4f0e467c58070f956f0beece01bd5f60e2..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00028--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00029--Z000--C.tif b/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00029--Z000--C.tif deleted file mode 100644 index fb814aa2b89f07562c702b6c274d9b2691611a13..0000000000000000000000000000000000000000 Binary files a/_site/image_data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00029--Z000--C.tif and /dev/null differ diff --git a/_site/image_data/scripts/create-test-data/create-noisy-spots-uneven-background.ijm b/_site/image_data/scripts/create-test-data/create-noisy-spots-uneven-background.ijm deleted file mode 100644 index 910be885089e3fad421463f2fde4c2a5f0a70b38..0000000000000000000000000000000000000000 --- a/_site/image_data/scripts/create-test-data/create-noisy-spots-uneven-background.ijm +++ /dev/null @@ -1,47 +0,0 @@ -// create empty image -newImage("test", "8-bit black", 400, 400, 1); - -// add offset -run("Add...", "value=10"); - -// -// draw uneven background -// - -background = 100; -makeOval(150, 150, 100, 100); -run("Add...", "value=&background"); - -// remove selection (otherwise all following actions will only be executed in the selected region) -run("Select None"); - -// blur backgroud -run("Gaussian Blur...", "sigma=20"); - -// -// draw spots -// - -diameter = 5; -spots = 40; - -// draw spot -makeOval(170, 170, diameter, diameter); -run("Add...", "value=&spots"); - -// draw spot -makeOval(350, 350, diameter, diameter); -run("Add...", "value=&spots"); - -// remove selection (otherwise all following actions will only be executed in the selected region) -run("Select None"); - -// blur spots -run("Gaussian Blur...", "sigma=2"); - -// -// add noise -// - -// add noise -run("Add Specified Noise...", "standard=5"); diff --git a/_site/image_data/xy_16bit__autophagosomes.tif b/_site/image_data/xy_16bit__autophagosomes.tif deleted file mode 100644 index 22129e2e4e5b3cdc5d30583f7a2bd82af1dd31aa..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_16bit__autophagosomes.tif and /dev/null differ diff --git a/_site/image_data/xy_16bit__nuclei_high_dynamic_range.tif b/_site/image_data/xy_16bit__nuclei_high_dynamic_range.tif deleted file mode 100644 index 2db1cf790362d6939078b9f68381e9cda2204266..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_16bit__nuclei_high_dynamic_range.tif and /dev/null differ diff --git a/_site/image_data/xy_16bit__two_values.tif b/_site/image_data/xy_16bit__two_values.tif deleted file mode 100644 index 3b3f568d5e68ab8b44bed8920621f172a1f06937..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_16bit__two_values.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__em_fly_eye.tif b/_site/image_data/xy_8bit__em_fly_eye.tif deleted file mode 100644 index 08f0e1666926cc992d4d9268a7cefeecd40c2662..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__em_fly_eye.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__nuclei_noisy_different_intensity.tif b/_site/image_data/xy_8bit__nuclei_noisy_different_intensity.tif deleted file mode 100644 index c300a5831dbd0328af2d22399295ff276c73c832..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__nuclei_noisy_different_intensity.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__spots_local_background.tif b/_site/image_data/xy_8bit__spots_local_background.tif deleted file mode 100644 index da4334f2673828289004cc16af0d6328f7fb00db..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__spots_local_background.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__spots_local_background_with_noise.tif b/_site/image_data/xy_8bit__spots_local_background_with_noise.tif deleted file mode 100644 index e42d204814b69fb140127c1c215ec7bd1eb56731..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__spots_local_background_with_noise.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__touching_objects.tif b/_site/image_data/xy_8bit__touching_objects.tif deleted file mode 100644 index fd985f51c30c5cc2f80529fdd594f2c90547b4f2..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__touching_objects.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__touching_objects_same_intensity.tif b/_site/image_data/xy_8bit__touching_objects_same_intensity.tif deleted file mode 100644 index 2f0b3aa424973fb6c1f4f0919aaa1a13bb2501c3..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__touching_objects_same_intensity.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__two_cells.tif b/_site/image_data/xy_8bit__two_cells.tif deleted file mode 100644 index 57704468b40be79177fbfec1d8b3bd75da96ec08..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__two_cells.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__two_noisy_squares_different_size.tif b/_site/image_data/xy_8bit__two_noisy_squares_different_size.tif deleted file mode 100644 index 682ab3c293ec11c5fa08bafea431dd9312c92e5b..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__two_noisy_squares_different_size.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__two_nuclei_high_background.tif b/_site/image_data/xy_8bit__two_nuclei_high_background.tif deleted file mode 100644 index 257a04b5296c85f709e67c0124f2d3ed4eacd064..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__two_nuclei_high_background.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit__two_spots_noisy_uneven_background.tif b/_site/image_data/xy_8bit__two_spots_noisy_uneven_background.tif deleted file mode 100644 index 88f141c1c5bfe5d31ca11026dd9d2eb4412ddda7..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit__two_spots_noisy_uneven_background.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_binary__for_open_and_close.tif b/_site/image_data/xy_8bit_binary__for_open_and_close.tif deleted file mode 100644 index 0113d608217de95e777eafe2fb3ccea71d40d765..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_binary__for_open_and_close.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_binary__nuclei.tif b/_site/image_data/xy_8bit_binary__nuclei.tif deleted file mode 100644 index 56f3c196dd0f5dabf4c16b46ea31dc653bb6933f..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_binary__nuclei.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_binary__single_object.tif b/_site/image_data/xy_8bit_binary__single_object.tif deleted file mode 100644 index 6fe447de3c88253916867d7ba1d2393c467308e2..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_binary__single_object.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_binary__two_objects.tif b/_site/image_data/xy_8bit_binary__two_objects.tif deleted file mode 100644 index dc6c36fa7cfbfd957312c040f96bb395f8bb737d..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_binary__two_objects.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_binary__two_spots_different_size.tif b/_site/image_data/xy_8bit_binary__two_spots_different_size.tif deleted file mode 100644 index 93a936b4ca396fe90905ee852260fb6dd71ad796..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_binary__two_spots_different_size.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_calibrated_anisotropic__mri_stack.tif b/_site/image_data/xy_8bit_calibrated_anisotropic__mri_stack.tif deleted file mode 100644 index 3d678923385a59dd28c4cefa1c3dace48247a42b..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_calibrated_anisotropic__mri_stack.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_labels__four_objects.tif b/_site/image_data/xy_8bit_labels__four_objects.tif deleted file mode 100644 index 7bd600bbef32be980b05224540ec0b0f41b77567..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_labels__four_objects.tif and /dev/null differ diff --git a/_site/image_data/xy_8bit_labels__two_spots.tif b/_site/image_data/xy_8bit_labels__two_spots.tif deleted file mode 100644 index 97a61d8d574e9396a53e8fe8fb9fb3a804c19feb..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_8bit_labels__two_spots.tif and /dev/null differ diff --git a/_site/image_data/xy_calibrated_16bit__cells_eres_noisy.tif b/_site/image_data/xy_calibrated_16bit__cells_eres_noisy.tif deleted file mode 100644 index 9c401101f6c2ca95e5916c5e7df91ee70222a669..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_calibrated_16bit__cells_eres_noisy.tif and /dev/null differ diff --git a/_site/image_data/xy_calibrated_16bit__nuclear_protein_control.tif b/_site/image_data/xy_calibrated_16bit__nuclear_protein_control.tif deleted file mode 100644 index 59d2ead61bbf5e01bce8223cbecc0fe4890aa192..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_calibrated_16bit__nuclear_protein_control.tif and /dev/null differ diff --git a/_site/image_data/xy_calibrated_16bit__nuclear_protein_treated.tif b/_site/image_data/xy_calibrated_16bit__nuclear_protein_treated.tif deleted file mode 100644 index 1fa93f4ca7ae180afaeb120741cea9d1d6120a13..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_calibrated_16bit__nuclear_protein_treated.tif and /dev/null differ diff --git a/_site/image_data/xy_float__h2b_bg_corr.tif b/_site/image_data/xy_float__h2b_bg_corr.tif deleted file mode 100644 index 89c3f40ebe802955acd36f51a284db3d51dfff43..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_float__h2b_bg_corr.tif and /dev/null differ diff --git a/_site/image_data/xy_float__nuclei_probability.tif b/_site/image_data/xy_float__nuclei_probability.tif deleted file mode 100644 index 9bcb98c1a9fdf25c28301cb07a4cd06b054e3511..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_float__nuclei_probability.tif and /dev/null differ diff --git a/_site/image_data/xy_rgb__funny_2d_vs_3d.jpg b/_site/image_data/xy_rgb__funny_2d_vs_3d.jpg deleted file mode 100644 index 06ef40e908ea06a90980978458b230fa91ca9989..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xy_rgb__funny_2d_vs_3d.jpg and /dev/null differ diff --git a/_site/image_data/xyt_8bit__em_fly_eye.tif b/_site/image_data/xyt_8bit__em_fly_eye.tif deleted file mode 100644 index 393929bcf0967620500bc468214bd6199be6f9e7..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xyt_8bit__em_fly_eye.tif and /dev/null differ diff --git a/_site/image_data/xyt_calibrated_16bit__golgi_bfa_sum_projection.tif b/_site/image_data/xyt_calibrated_16bit__golgi_bfa_sum_projection.tif deleted file mode 100644 index b0486e3dd273e9167d15735bd3e27525820ae0b0..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xyt_calibrated_16bit__golgi_bfa_sum_projection.tif and /dev/null differ diff --git a/_site/image_data/xyz_8bit_binary__spots.tif b/_site/image_data/xyz_8bit_binary__spots.tif deleted file mode 100644 index 0946126854e5479d702a428ac2c0c2e62fa70727..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xyz_8bit_binary__spots.tif and /dev/null differ diff --git a/_site/image_data/xyzt_calibrated_16bit__golgi_bfa.zip b/_site/image_data/xyzt_calibrated_16bit__golgi_bfa.zip deleted file mode 100644 index a9693ce32365b04922705b0c3d8a4e0df7cae82e..0000000000000000000000000000000000000000 Binary files a/_site/image_data/xyzt_calibrated_16bit__golgi_bfa.zip and /dev/null differ diff --git a/_site/index.html b/_site/index.html deleted file mode 100644 index 886f897d552fca85373813380c1d5255972002f6..0000000000000000000000000000000000000000 --- a/_site/index.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - Image Analysis Training Material - - - - - - - - - - - - - - - -
-
-
- -
-

Image Analysis Training Material

-
- -
-

This is a resource for image analysis training material, with a focus on research in the life sciences.

-

Currently, this resource is mainly meant to serve image analysis trainers, helping them to design courses. -However, we might add more text (or videos) to the material such that it could also be used by students for self-directed study.

-

The material is divided into small modules, where the teaching of each module should take about 10-20 minutes. Each module covers a specific aspect of image analysis. At the beginning of each module there is a list of modules containing prerequiste topics. At the end of each module there are suggestions of what could be taught next. This provides trainers guidance on how to combine modules into a longer workshop.

-

The modules are designed based on current research in the psychology of learning. For example, concept maps with a limited number of items ensure that the new information in each module is well defined, well structured and limited, respecting the maximal cognitive load that students can bear with.

-

The modules are meant to be taught hands-on, i.e. following the teacher's guidance, students execute the relevant steps in an image analysis software on their computers. The modules provide those steps for several major image analysis platforms, such as ImageJ (either GUI or Macro scripting), ImageJ Jython scripting, imglib2 java programming, MATLAB, and Python (please note that currently this is more of a wish list rather than reality, and help is very much appreciated).

-

Happy teaching and learning!

-

How to contribute to this resource

-

Please see CONTRIBUTING.md

-

How to teach using this resource

-

Please see TEACHING.md

- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/automated_object_filtering.md b/_site/modules/automated_object_filtering.md deleted file mode 100644 index f955e5120149f4c38d4e0a5333bbb85540a70fe8..0000000000000000000000000000000000000000 --- a/_site/modules/automated_object_filtering.md +++ /dev/null @@ -1,22 +0,0 @@ -# Image analysis automation - -## Automated object filtering - - - -### Activity: Automatically remove objects from label image - -- Open image: `xy_8bit_labels__four_objects.tif` -- Devise code to automatically remove objects from the label image, e.g. - - Remove all cells larger than N pixels in area - -### Formative assessment - - diff --git a/_site/modules/basic_image_analysis_workflow.html b/_site/modules/basic_image_analysis_workflow.html deleted file mode 100644 index 5979ca504d68c786fcd525feef98d39b4585aa2d..0000000000000000000000000000000000000000 --- a/_site/modules/basic_image_analysis_workflow.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - Basic image analysis workflow - - - - - - - - - - - - - - - -
-
-
- -
-

Basic image analysis workflow

-
- -
-

Typical image analysis workflow

-

image

- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/binarization.html b/_site/modules/binarization.html deleted file mode 100644 index ece13f706ab6c679712d3d60356daa87690d687d..0000000000000000000000000000000000000000 --- a/_site/modules/binarization.html +++ /dev/null @@ -1,618 +0,0 @@ - - - - - - - - - Image binarization - - - - - - - - - - - - - - - -
-
-
- - - - - - -
-

Image binarization

-
- -
-
-
-

Prerequisites

- Before starting this lesson, you should be familiar with:
-
- -
- -
-
-
-

Learning Objectives

- After completing this lesson, learners should be able to:
-
-
    - -
  • Describe the relationship between an intensity image and a derived binary image

    -
  • - -
  • Apply a threshold to distinguish foreground and background pixels

    -
  • - -
-
- -
-
-

Motivation

- -

Very often, one wants to detect objects or specific regions in images. Typically, the first step to achieve this aim is to distinguish so-called background pixels, which do not contain objects or interesting regions, from foreground pixels, which mark the areas of interest. The foreground regions can than be further processed, e.g to detect objects or perform measurements.

- - -
-
-

Concept map

-
-graph TD - PV(Pixel values) --> |>= threshold| FG(Foreground 1,255) - PV(Pixel values) --> |< threshold| BG(Background 0) - BG --> BPV(Binarized pixel values) - FG --> BPV(Binarized pixel values) - -
- -
-
-

Example

- -
- - -
An image before and after applying a threshold. Can you see what the treshold value was?
- -
- -
- -
- -
-
-

Activity

- - -

Open an image and binarize it by applying a threshold.

- - - - -Show activity for: - - - -

-

ImageJ GUI

- - -
    -
  • [ Open... ] "/image-analysis-training-resources/image_data/xy_8bit__two_cells.tif"
  • -
  • [ Threshold... ]
  • -
- -
- -

-

ImageJ Macro

- - -
open("/image-analysis-training-resources/image_data/xy_8bit__two_cells.tif");
-setThreshold(30, 255);
-setOption("BlackBackground", true);
-run("Convert to Mask");
-
- -
- -

-

Jython

- - -
from ij import IJ, ImagePlus
-from ij.plugin import Thresholder
-
-inputImage=IJ.getImage()
-IJ.setRawThreshold(inputImage, 60, 255, None)
-binaryImage=ImagePlus('Binary image',Thresholder.createMask(inputImage))
-binaryImage.show()
-
- -
- -

-

MATLAB

- - -
function src_binarize_image()
-%This function illustrates separating foreground from background using a
-%fixed threshold value
-
-threshold = 50; %example hreshold value
-%Read input image
-in_image = imread(['image_data' filesep 'xy_8bit__two_cells.tif']);
-figure; imagesc(in_image); %display input image
-%Binarized input image with the threshold value;
-bin_image = uint8(in_image>= threshold);
-figure; imagesc(bin_image) % display binary image
-end
-
- -
- - - - -
-
-

Formative assessment

- - - -

Fill in the blanks

-
    -
  • Pixels in a binary image can have maximally ___ different values.
  • -
  • If the threshold is larger than the maximal pixel value in the intensity image, all pixels in the binary image have a value of ___.
  • -
- - - - -Perform additional excercises for: - - -

-

ImageJ GUI

- - -

This file should contain language-specific exercises, written in Markdown

-

...but probably with some HTML mixed in, so that you can add expandable Solution boxes.

-

Exercise 1

-

What is the solution to the first exercise?

-
-Solution -This is the solution to the first exercise. -
-

Exercise 2

-

What is the solution to the second exercise?

-
-Solution -This is the solution to the second exercise. -
- -
- -

-

ImageJ Macro

- - -

This file should contain language-specific exercises, written in Markdown

-

...but probably with some HTML mixed in, so that you can add expandable Solution boxes.

-

Exercise 1

-

What is the solution to the first exercise?

-
-Solution -This is the solution to the first exercise. -
-

Exercise 2

-

What is the solution to the second exercise?

-
-Solution -This is the solution to the second exercise. -
- -
- -

-

Jython

- - -

This file should contain language-specific exercises, written in Markdown

-

...but probably with some HTML mixed in, so that you can add expandable Solution boxes.

-

Exercise 1

-

What is the solution to the first exercise?

-
-Solution -This is the solution to the first exercise. -
-

Exercise 2

-

What is the solution to the second exercise?

-
-Solution -This is the solution to the second exercise. -
- -
- -

-

MATLAB

- - -

This file should contain language-specific exercises, written in Markdown

-

...but probably with some HTML mixed in, so that you can add expandable Solution boxes.

-

Exercise 1

-

What is the solution to the first exercise?

-
-Solution -This is the solution to the first exercise. -
-

Exercise 2

-

What is the solution to the second exercise?

-
-Solution -This is the solution to the second exercise. -
- -
- - -
-
-

Follow-up material

- - - -
-
-

Learn more

- - - -
- -
-
- - - - - - - diff --git a/_site/modules/calibration.html b/_site/modules/calibration.html deleted file mode 100644 index 4d559ba92264e16ad13d24a54cbd98b1948dbd4f..0000000000000000000000000000000000000000 --- a/_site/modules/calibration.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - Image calibration - - - - - - - - - - - - - - - -
-
-
- -
-

Image calibration

-
- -
-

Image calibration

-

-

Activity: Explore image calibration

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Add image calibration
  • -
  • Explore whether and how this affects image display and measurements (e.g. distance between two points)
  • -
-

Activity: Explore anisotropic 3D image data

-
    -
  • Open image: xy_8bit_calibrated_anisotropic__mri_stack.tif -* Appreciate that the pixels are anisotropic
  • -
-

Formative assessment

-

True or false?

-
    -
  • Changing the image calibration changes the pixel values.
  • -
  • Pixel coordinates depend on image calibration.
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/connected_components.html b/_site/modules/connected_components.html deleted file mode 100644 index a1775ca784b9b7657757ece971252d8239eb89ee..0000000000000000000000000000000000000000 --- a/_site/modules/connected_components.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - - - Connected components - - - - - - - - - - - - - - - -
-
-
- -
-

Connected components

-
- -
-

Connected components analysis

-

-

Activity: 2D connected components analysis

-
    -
  • Open image: xy_8bit_binary__nuclei.tif
  • -
  • Perform connected components analysis
  • -
  • Explore multi-color LUTs for object labelling
  • -
  • Explore removing and joining labels
  • -
-

Activity: 3D connected components analysis

-

Repeat above activity but use a 3D image:

-
    -
  • Open image: xyz_8bit_binary__spots.tif
  • -
-

Formative assessment

-

Fill in the blanks, using these words: less, more, 8, 255, 4, more.

-
    -
  1. In 3D, pixels have _____ neighbors than in 2D.
  2. -
  3. 8-connected connectivity results in _____ objects than 4-connected connectivity.
  4. -
  5. In 3D, pixels have ____ non-diagonal neighbors.
  6. -
  7. In 2D, pixels have ____ non-diagonal neighbors.
  8. -
  9. A 8-bit label image can maximally have _____ objects.
  10. -
  11. The maximum value in a label image is equal to or _____ than the number of objects.
  12. -
-

Learn next

-
    -
  • shape_measurements.md
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/course_recap.md b/_site/modules/course_recap.md deleted file mode 100644 index d92ff64ae014437ed0135e3aa388c52cc407b1d5..0000000000000000000000000000000000000000 --- a/_site/modules/course_recap.md +++ /dev/null @@ -1,18 +0,0 @@ -## Recap - -Take few sheets of empty (A4) paper. -Work in pairs of two or three. - -* Draw a typical image analysis workflow: From intensity image to objects shape table. - -* Write down a few (e.g., two) noteworthy facts about: - * Pixel data types - * Label images - * Intensity measurements - * Object shape measurements - -* Write down answers to below questions (there can be multiple answers for some questions): - * How can you split touching objects? - * What can you use a distance map for? - * What can you do to segment spots in prescence of uneven background signal? - * What can you do to remove small objects from a binary image? diff --git a/_site/modules/display.html b/_site/modules/display.html deleted file mode 100644 index 3569f7fd89149469685db2f84699587f0d8fbdb7..0000000000000000000000000000000000000000 --- a/_site/modules/display.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - Image display - - - - - - - - - - - - - - - -
-
-
- -
-

Image display

-
- -
-

Image display

-

-
brightness = ( value - min ) / ( max - min )
-
-0 <= brightness <= 1
-
-contrast = max - min
-
-

Activity

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Explore different LUTs and LUT settings -* Appreciate that LUT settings do not affect image content.
  • -
-

Formative Assessment

-

Fill in the blanks, using those words: decrease, larger than, increase, smaller than

-
    -
  1. Pixels with values _____ max will appear saturated.
  2. -
  3. Decreasing max while keeping min constant will _____ the contrast.
  4. -
  5. Decreasing both max and min will _____ the overall brightness.
  6. -
  7. Pixels with values _____ the min will appear black, when using a grayscale LUT.
  8. -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/distance_transform.md b/_site/modules/distance_transform.md deleted file mode 100644 index a87d5de878cff9546640ff61e8700c8cdf6b681f..0000000000000000000000000000000000000000 --- a/_site/modules/distance_transform.md +++ /dev/null @@ -1,40 +0,0 @@ -# Distance transform - - - -## Activity: Explore distance transform - -- Open image: xy_8bit_binary__two_objects.tif -- Learn: - - It matters what is foreground and what is background. - - The image data type limits the possible distance values. - - There is a difference between calibrated vs. pixel-based distance transforms. - - -## Actvity: Use distance map for automated distance measurements - -- Open reference object image: xy_8bit_binary__single_object.tif -- Compute distance map -- Open label image: xy_8bit_labels__two_spots.tif -- Measure "intensity" of label image objects in distance map - - intensity is distance - -## Activity: Use distance map for automated region selection - -- Open reference object image: xy_8bit_binary__single_object.tif -- Compute distance map -- Threshold distance map to select regions - -### Formative Assessment - -TODO - -### Learn more - -TODO diff --git a/_site/modules/enhance_image_features.md b/_site/modules/enhance_image_features.md deleted file mode 100644 index 9f3fcae082871985cc923dce864f62fa45d4f36c..0000000000000000000000000000000000000000 --- a/_site/modules/enhance_image_features.md +++ /dev/null @@ -1,21 +0,0 @@ -# Image feature enhancement - - - -## Examples - -- Difference of Gaussian filter enhances spots -- ... - -## Learn next - -- filter_difference_of_gaussian.md diff --git a/_site/modules/filter_convolution.html b/_site/modules/filter_convolution.html deleted file mode 100644 index 1df32d85d9b7c4a723de98db4d2b99260de45162..0000000000000000000000000000000000000000 --- a/_site/modules/filter_convolution.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - Image math - - - - - - - - - - - - - - - -
-
-
- -
-

Image math

-
- -
-

Convolution filters

-

-

Activity: Explore convolution filters

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Try the result of different convolution filters, e.g. -* https://en.wikipedia.org/wiki/Kernel_(image_processing) -* Mean filter -* Gaussian blur -* Edge detection
  • -
  • Appreciate that the results are (slightly) wrong within the 8-bit range of the input image.
  • -
-

Activity: Use mean filter to facilitate image segmentation

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Appreciate that you cannot readily threshold the image
  • -
  • Apply a mean filter
  • -
  • Threshold the filtered image
  • -
-

Formative assessment

-
    -
  • Draw the kernel of a 3x3 mean filter.
  • -
  • Draw three different kernels that enhance edges.
  • -
-

Learn more

-
    -
  • https://en.wikipedia.org/wiki/Kernel_(image_processing)
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/filter_difference_of_gaussian.html b/_site/modules/filter_difference_of_gaussian.html deleted file mode 100644 index 9350096459d254d199d32911f4e7a522748a62b7..0000000000000000000000000000000000000000 --- a/_site/modules/filter_difference_of_gaussian.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - Difference of Gaussian - - - - - - - - - - - - - - - -
-
-
- -
-

Difference of Gaussian

-
- -
-

Difference of Gaussian (DoG)

-

-

Activity: Enhance spots in noisy image with uneven background

-
    -
  • Open image: xy_8bit__two_spots_noisy_uneven_background.tif
  • -
  • Appreciate that you cannot readily threshold the spots
  • -
  • Compute DoG: -- Copy image and blur with a Gaussian of small sigma -> Gs -- Copy image and blur with a Gaussian of bigger sigma -> Gb -- For the official DoG: rb = sqrt(2) * rs -- Create DoG = Gs - Gb
  • -
  • Appreciate that now it is possible to threshold the spots in the DoG image
  • -
-

Learn more

-
    -
  • https://imagescience.org/meijering/software/featurej/
  • -
  • https://en.wikipedia.org/wiki/Difference_of_Gaussians
  • -
  • https://github.com/CellProfiler/CellProfiler/blob/master/cellprofiler/modules/enhanceorsuppressfeatures.py#L4
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/filter_rank.md b/_site/modules/filter_rank.md deleted file mode 100644 index 62c952e66ed20519c37dfbdf58b8735caeecc9a7..0000000000000000000000000000000000000000 --- a/_site/modules/filter_rank.md +++ /dev/null @@ -1,195 +0,0 @@ -# Neighborhood filters - - - - -| | | | | | | | | -|---|---|---|---|---|---|---|---| -| NC | NC | NC | | | | | | -| NC | C, NC | NC | | | | | | -| NC | NC | NC | | | | | | -| | | | | NB | NB | NB | | -| | | | | NB | B, NB| NB | | -| | | | | NB | NB | NB | | -| | | | | | | | | - - - - - -# Rank filters - -## Basic rank filters - - - - -### Activity: Explore rank filters on binary images - -- Open image: xy_8bit_binary__two_spots_different_size.tif -- Explore how structures grow and shrink, using erosion and dilation - -### Activity: Explore rank filters on grayscale images - -- Open image: xy_8bit__two_noisy_squares_different_size.tif -- Explore how a median filter - - removes noise - - removes small structures - - preserves egdes -- Compare median filter to mean filter of same radius - - -### Formative assessment - -True or false? Discuss with your neighbour! - -1. Median filter is just another name for mean filter. -2. Small structures can completely disappear from an image when applying a median filter. - -Fill in the blanks, using those words: shrinks, increases, decreases, enlarges. - -1. An erosion _____ objects in a binary image. -2. An erosion in a binary image _____ the number of foreground pixels. -3. A dilation in a grayscale image _____ the average intensity in the image. -4. A dilation _____ objects in a binary image. - - -## Morphological opening and closing - - - -``` -opening( image, r ) = dilation( erosion( image, r ), r ) -``` - -``` -closing( image, r ) = erosion( dilation( image, r ), r ) -``` - - -### Activity: Explore opening and closing on binary images - -- Open image: xy_8bit_binary__for_open_and_close.tif -- Explore effects of morphological closing and opening: - - closing can fill holes - - closing can connect gaps - - opening can remove thin structures - - -### Formative assessment - -True of false? Discuss with your neighbour! - -1. Morphological openings on binary images can decrease the number of foreground pixels. -2. Morphological closings on binary images never decreases the number of foreground pixels. -3. Performing a morphological closing a twice in a row does not make sense, because the second closing does not further change the image. - -## Top hat filter for local background subtraction - - - - -``` -tophat( image ) = image - opening( image, r ) = image - dilation( erosion( image, r), r ) -``` - - -### Activity: Explore tophat filter - -- Open image: xy_8bit__spots_local_background.tif -- Use a tophat filter to remove local background - -## Activity: Implement a tophat filter - -- Devise code implementing a tophat filter, using minimum and maximum filters - -## Activity: Explore tophat filter on biological data - -- Open image: xy_16bit__autophagosomes.tif -- Appreciate that you cannot readliy segment the spots. -- Use a tophat filter to remove local background. -- Threshold the spots in the tophat filtered image. - -## Activity: Explore tophat filter on noisy data - -- Open image: xy_8bit__spots_local_background_with_noise.tif -- Use topHat filter to remove local background -- Appreciate that noise poses a challenge to the tophat filter - -## Median filter for local background subtraction - - - - -``` -median_based_background_correction = image - median( image, r) -``` - -### Activity: Implement median based background subtraction - -- Write code to implement a median based background subtraction - - -### Activity: Explore median filter for local background subtraction - -- Open images: - - xy_8bit__spots_local_background.tif - - xy_8bit__spots_local_background_with_noise.tif -- Use tophat filter to remove local background -- Devise code to implement a tophat filter using basic functions - -### Formative assessment - -Answer below questions. Discuss with your neighbour! - -1. What could one do to close small gaps in a binary image? -2. What could one do to remove small objects in a image? -3. What could you use for local background subtraction in a very noisy image? - -## Learn more - -- https://imagej.net/MorphoLibJ#Grayscale_morphological_filters - - - diff --git a/_site/modules/image_integrity.md b/_site/modules/image_integrity.md deleted file mode 100644 index 3b2e543f12f7dbf37ae29df9977725ffee12a32e..0000000000000000000000000000000000000000 --- a/_site/modules/image_integrity.md +++ /dev/null @@ -1,266 +0,0 @@ -# Image data integrity - -#### Prerequisites - -- A computer with an image analysis software (e.g. [Fiji](www.fiji.sc)) already installed. -- Basic knowledge of how to use above software, e.g. - - open and save images - - change image display settings - - subtract a value from every pixel in an image -- Please download the training [material](https://git.embl.de/grp-bio-it/image-analysis-training-resources/-/archive/master/image-analysis-training-resources-master.zip) -- Please make sure you can access to this [document](https://git.embl.de/grp-bio-it/image-analysis-training-resources/blob/master/workshops/image-ethics-and-data-integrity.md#image-ethics-and-data-integrity). - -#### Duration - -1.5 hours - -#### Learn more about image data integrity - -- http://www.imagedataintegrity.com/about.html -- http://jcb.rupress.org/content/166/1/11.full -- Douglas W. Cromey - - Digital Images Are Data: And Should be Treated as Such - - ...and follow up publications... - -## Image data integrity - - - - -## Image data saving - - - -### Motivation - -Sometimes it can be necessary to save your images in a different formats. -It needs some training to know how to do this properly. - -What could be good reasons to resave your data in a different format (multiple answers)? - -1. I want to share my scientific findings on twitter, thus I need to convert an image to a twitter compatible format. -2. I want to import images in PowerPoint, only some formats will work. -3. I need to save disk space, thus I need to find a format that makes the images smaller. -4. I want to use a special software that only accepts certain image data formats. -5. The journal I want to publish in, only accepts certain image formats. -6. I want to have everything in Tiff format, because this is the standard. -7. My boss says that (s)he cannot open .lif (Leica) or .czi (Zeiss) images, thus I should save them in a different format. - - -### Activity: Save an image - -- Open image: `xy_calibrated_16bit__cells_eres_noisy.tif` -- Note down the value and coordinate of the pixel at [218, 332] -- Save the image in **jpg** format -- Reopen the image -- Compare the value and coordinate of the pixel at [218, 332] to your notes, did it change? - -Repeat above workflow, but - -- adjust the image display before saving -- save as **png** -- open `xy_float__nuclei_probability.tif` and save as **png** - -### Formative assessment - -What can I do to preserve image integrity during image saving (multiple answers)? - -1. I always save in Tiff format, this is safe. -2. I always check pixel values and coordinates before and after saving. -3. I ask my colleagues in the lab and do what they recommend.. -4. I keep a copy of the raw data. - - -## Image display adjustment - -### Motivation - -Images are a collection of numbers. To visualise those numbers one needs to decide how to map them onto a color and a brightness. There is no default way of doing this. Thus one has be educated and thoughful about this topic. In fact, it is one of the great responsibilties of a microscopist to ajust the image display settings proplery. - -### Image display concept map - - - - - -### Activity: Quantitative image display - -- Open image: `xy_calibrated_16bit__nuclear_protein_control.tif` - - This image shows a nuclear protein in control cells. -- Open image: `xy_calibrated_16bit__nuclear_protein_treated.tif` - - The cells in this image have been subjected to a drug. -- Inspect the images: - - Did the drug affect the amount of the nuclear protein? -- Adjust the lookup-tables (LUTs) of both images to be the same -- Add a LUT calibration to both images - -### Formative Assessment - -What helps to scientifically convey image intensity information (multiple answers)? - -1. Adjust the LUT to the image's full bit-depth. -2. Add a LUT calibration bar. -3. Use the same LUT for images acquired with same settings.. -4. Never change the LUT of images! Always keep as in raw data. - -## High dynamic range image display - - - -### Motivation - -The number range in images of biological samples can cover large ranges. -For example, a GFP tagged protein could occur in the same cell at different locations either 1 or 10000 times. This means that the dynamic range can be 10^4 or more. Due to limitations of image display and image preception such large dynamics ranges are difficult to display. - - -### Activity: High dynamic range image display - -- Open image: `xy_16bit__nuclei_high_dynamic_range.tif` -- Try to adjust the grayscale LUT such that everything can be seen... -- Try finding other LUTs that help showing all data -- Add LUT calibration to image - -### Formative Assessment - -What can you do to show images with a high dynamic range (multiple answers)? - -1. Adjust the LUT such that only the scientifically relevant information can be seen. -2. Adjust the LUT such that only the scientifically relevant information can be seen - * and state that the LUT has been adjusted in the figure legend - * and show the same image with other LUT settings in the supplemental material. -3. Try to find a LUT that shows all data. -4. Never use multi color LUTs, they are confusing. -5. Already on the microscope change the settings such that only relevant structures are visible, e.g. lower the gain such that dark irrelevant objects have zero pixel values. -6. Adjust LUT settings such that background noise is not visible, because this is distracting. -7. Add a LUT calibration to the image, such that readers can see that not all information might be visible. - - -## Image math - - - -### Motivation - -It sometimes is necessary to change numberic content of images. It is important to understand how to do this properly in order to avoid uncontrolled artifacts. - -What are good reasons to change the pixel values in an image? - -1. For intensity measurements, the image background (e.g. camera based offset) should be subtracted from all pixels. -2. For threshold based image segmentation (object detection), it helps to first filter noise in the image. -3. For intensity measurements, it helps to filter noise in the image. -4. The image appears to dark, multiplication of all pixels by a constant number is a means to make it brighter. -5. For uneven illumination (e.g. occuring in wide-field microscopy with large camera chips), one should do flat-field correction, which makes the intensity values even across the image. -6. Our microscope was broken. We took images on a replacement microscope. The pixel values were consistently higher than on our usual microscope. We multiplied the pixels on all images from the replacement microscope by a constant factor to make them comparable to our usual data. - - -### Activity: Perform pixel based background subtraction - -- Open image: `xy_8bit__nuclei_noisy_different_intensity.tif` -- Appreciate the significant background intensity -- Measure pixel value at `[ 28, 35 ]` and `[ 28, 39 ]` -- Measure background intensity in below region: - - upper left corner at `[ 20, 35 ]` - - width = 10 - - height = 10 -- Subtract the measured background intensity from each pixel -- Measure pixel values again at above coordinates ( `[ 28, 35 ]` and `[ 28, 39 ]` ) -- Discuss how the pixel values changed during background subtraction - -Repeat above activity, but: - -- After opening the image, convert its pixel data type to floating point - -### Formative Assessment - -Considering image math operations, which of below statements is correct -(multiple answers)? - -1. Never change the pixel data type, because it violates image integrity. -2. Changing the pixel data type does not change pixel values. -3. It is scientifically unethical to perform mathematical operations on images, because it changes the pixel values. -4. When performing mathematical operations on images, it should be documented (e.g. by a script of code) - - -## Display of 3-D images - -Biological images are often 3D. However paper and monitors can only show 2D images. It is thus important to understand how to show 3D images in 2D without compromising the scientific message. - - - - - - - -### Activity: Explore 3D visualisations - -- Open image: `xyzt_calibrated_16bit__golgi_bfa.zip` -- Explore and discuss different options how to present this data - - slice gallery - - sum projection - - max projection - - slice animation - -### Formative Assessment - -Which statements about visualisation and quantification of 3D images are correct (multiple answers)? - -1. Always use maximum intensity projection, it is by far the most commonly used. -2. Any visualisation can make sense, you just have scientifically justify it. -3. Intensity quanitifcations ideally should be done in 3D, not in projections. -4. It is impossible to quantify intensities in projections. - diff --git a/_site/modules/machine_learning_semantic_segmentation.md b/_site/modules/machine_learning_semantic_segmentation.md deleted file mode 100644 index 58203f347c2fb031bbf3fc1b07e985fae02becf1..0000000000000000000000000000000000000000 --- a/_site/modules/machine_learning_semantic_segmentation.md +++ /dev/null @@ -1,67 +0,0 @@ -# Semantic image segmentation using machine learning - - - - -  - -  - -  - -## Decision tree based image segmentation - - - -## Activity: Semantic image segmentation - -- Open image: xy_8bit__em_fly_eye.tif -- Segment three classes: background, eye, other - - Choose image filters - - Draw few labels in the blurry image background => class00 - - Draw few labels on the eye => class01 - - Draw few labels on other parts of the animal => class02 - - While( not happy): - - Train the classifier - - Inspect the predictions - - Add more labels where the predictions are wrong - -TODO: use multiple files to demo that a classifier can be applied on other images. - -## Formative assessment - -True or false? Discuss with your neighbour! - -- In contrast to simple thresholding, using machine learning for pixel classification, one always has more than 2 classes. -- If one wants to learn 4 different classes one has to, at least, add 4 annotations on the training image. -- One cannot classify an image where one did not put any training annotations. - diff --git a/_site/modules/measure_intensities.html b/_site/modules/measure_intensities.html deleted file mode 100644 index 5e4cef663300e699160d1aa54d2a98be9f0e658b..0000000000000000000000000000000000000000 --- a/_site/modules/measure_intensities.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - Intensity measurements - - - - - - - - - - - - - - - -
-
-
- -
-

Intensity measurements

-
- -
-

Intensity measurements

-

Activity: Measure intensities in image regions

-
    -
  • Open image: xy_float__h2b_bg_corr.tif
  • -
  • Measure for both nuclei: -* Maximum intensity -* Average intensity -* Median intensity -* Sum intensity
  • -
  • Discuss the interpretation!
  • -
  • Discuss where to measure!
  • -
-

Activity: Intensity measurements without pixel based background correction

-

Motivation

-

There are several good reasons not to subtract the background from each pixel in an image:

-
    -
  • It is a bit tricky to do it right, because one has to convert to float to accomodate floting point and negative values.
  • -
  • If one has really big image data (TB) one would need (at least) another TB storage for the background corrected version of the image.
  • -
-

Workflow

-
    -
  • Open image: xy_calibrated_8bit__two_nuclei_high_background.tif
  • -
  • Measure for both nuclei and a background region: -* Maximum intensity -* Average intensity -* Median intensity -* Sum intensity
  • -
  • Discuss how to correct the intensities for the background -* Appreciate that you also need the region areas for this task -* Measure the region areas -* Watch out: the image is calibrated! -* Use the area for the correction.
  • -
-

Formative assessment: Intensity measurements

-

Fill in the blanks, using these words: integrated, mean, number_of_pixels, decrease, increase, sum

-
    -
  1. Average intensity is just another word for _____ intensity.
  2. -
  3. The _____ intensity is equal to the mean intensity times the _____ in the measured region.
  4. -
  5. In an 8-bit image, increasing the size of the measurement region can only _____ the sum intensity.
  6. -
  7. In a float image, increasing the size of the measurement region can _____ the sum intensity.
  8. -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/measure_shapes.html b/_site/modules/measure_shapes.html deleted file mode 100644 index deba3f9696b55e50541d205369c32837a837208d..0000000000000000000000000000000000000000 --- a/_site/modules/measure_shapes.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - Object shape measurements - - - - - - - - - - - - - - - -
-
-
- -
-

Object shape measurements

-
- -
-

Shape measurements

-

-

Activity: Measure object shape parameters

-
    -
  • Open image: xy_8bit_labels__four_objects.tif
  • -
  • Perform shape measurements and discuss their meanings.
  • -
  • Explore results visualisation -* Color objects by their measurement values.
  • -
  • Add a calibration to the image and check which shape measurements are affected.
  • -
  • Draw a test image to understand the shape measurements even better.
  • -
-

Activity: Explore sampling limits

-
    -
  • Draw a square (=circle) of 2x2 pixels (paper, whiteboard, ...) -* Measure area, perimeter and circularity -* Discuss the results
  • -
  • Discuss the England's coastline paradox
  • -
-

Formative assessment

-

True or false? Discuss with your neighbour!

-
    -
  • Circularity is independent of image calibration.
  • -
  • Area is independent of image calibration.
  • -
  • Perimeter can strongly depend on spatial sampling.
  • -
  • Volume can strongly depend on spatial sampling.
  • -
  • Drawing test images to check how certain shape parameters behave is a good idea.
  • -
-

Learn more

-
    -
  • Especially surface and perimeter measurements are affected by sampling and resolution, see for example: -* https://en.wikipedia.org/wiki/Coastline_paradox).
  • -
  • Results visualisation: -* https://imagej.net/MorphoLibJ#Grayscale_morphological_filters: Label visualization in 3D viewer
  • -
-

Learn next

-
    -
  • object_shape_measurement_workflow.md
  • -
  • intensity_measurements.md
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/object_splitting.html b/_site/modules/object_splitting.html deleted file mode 100644 index fe9e070fc4430505ac4ceb76ed06448b6c726009..0000000000000000000000000000000000000000 --- a/_site/modules/object_splitting.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - Object splitting - - - - - - - - - - - - - - - -
-
-
- -
-

Object splitting

-
- -
-

Object splitting

-

Requirements

-
    -
  • binarisation.md
  • -
  • distance_transform.md
  • -
-

"Intensity based" watershed

-

-

Activity: Explore intensity based watershed

-
    -
  • Open image: xy_8bit__touching_objects.tif
  • -
  • Invert image for watershed
  • -
  • Apply watershed
  • -
-

Activity: Use intensity based watershed for object segmentation

-
    -
  • Open intensity image: xy_8bit__touching_objects.tif
  • -
  • Threshold intensity image => binary image (aka "mask")
  • -
  • Invert intensity image for watershed
  • -
  • Apply watershed, using the mask
  • -
-

"Shape based" watershed

-

-

Activity: Explore shape based watershed

-
    -
  • Open image: xy_8bit__touching_objects_same_intensity.tif
  • -
  • Threshold -> Binary image -
      -
    • Copy binary image (we'll need it as mask later...)
    • -
    -
  • -
  • Binary image -> Distance map
  • -
  • Distance map -> Watershed
  • -
-

Learn more

-

TODO

-

Formative Assessment

-

TODO

- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/pixel_data_types.html b/_site/modules/pixel_data_types.html deleted file mode 100644 index c1140fca1c9bc4f57093041090489dc347833fdb..0000000000000000000000000000000000000000 --- a/_site/modules/pixel_data_types.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - Pixel data types - - - - - - - - - - - - - - - -
-
-
- -
-

Pixel data types

-
- -
-

Pixel data types

-

-

Pixel data type conversions

-

-

Activity: 16-bit to 8-bit conversion

-
    -
  • Open image: xy_16bit__two_values.tif
  • -
  • Convert to 8-bit
  • -
  • Understand the mathematics underlying the conversion from 16-bit to 8-bit.
  • -
-

Activity: 16-bit to float conversion

-
    -
  • Open image: xy_16bit__two_values.tif
  • -
  • Convert to float
  • -
-

Formative Assessment

-

True or false? Discuss with your neighbor!

-
    -
  1. Changing pixel data type never changes pixel values.
  2. -
  3. Converting from 16-bit unsigned integer to float never changes the pixel values.
  4. -
  5. Changing from float to 16-bit unsigned integer never changes the pixel values.
  6. -
  7. There is only one correct way to convert from 16-bit to 8-bit.
  8. -
- -
- -
- -
-
- - - - - - - diff --git a/_site/modules/pixel_math.html b/_site/modules/pixel_math.html deleted file mode 100644 index 1eedb5cca07d33a86e3dbee4e1bc669e804834b5..0000000000000000000000000000000000000000 --- a/_site/modules/pixel_math.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - Image math - - - - - - - - - - - - - - - -
-
-
- -
-

Image math

-
- -
-

Image math

-

-

Activity: Pixel based background subtraction

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Appreciate the significant background intensity
  • -
  • Measure pixel values at [ 28, 35 ] and [ 28, 39 ]
  • -
  • Measure the image background intensity in this region: -
      -
    • upper left corner at [ 20, 35 ]
    • -
    • width = 10
    • -
    • height = 10
    • -
    -
  • -
  • Subtract the measured background intensity from each pixel.
  • -
  • Measure the pixel values again.
  • -
  • Observe that the resuls are incorrect.
  • -
-

Repeat above activity, but:

-
    -
  • After opening the image, convert its data type to floating point.
  • -
-

Activity: Explore the limitations of float data type

-
    -
  • Create an empty image
  • -
  • Set all pixel values to 1000000000.0
  • -
  • Add 1.0 to all pixel values
  • -
  • Be shocked...
  • -
-

...it turns out that from 16777216 on you cannot represent all integers anymore within a float.

-

Formative Assessment

-

True or false?

-
    -
  • Subtracting 100 from 50 in a 8-bit image will result in -50.
  • -
  • Adding 1 to 255 in a 8-bit image will result in 256.
  • -
  • Subtracting 10.1 from 10.0 in a float image will result in -0.1
  • -
  • Adding 1.0 to 255.0 in a float image will result in 256.0
  • -
  • Adding 1000.0 to 1000000000.0 in a float image will result in 1000001000.0
  • -
-

Learn more

- - -
- -
- -
-
- - - - - - - diff --git a/_site/modules/pixels.html b/_site/modules/pixels.html deleted file mode 100644 index 11d1fc8680f17b71fc42dc65c46af7343db151a5..0000000000000000000000000000000000000000 --- a/_site/modules/pixels.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - Pixels - - - - - - - - - - - - - - - -
-
-
- -
-

Pixels

-
- -
-

Pixels

-

Concept map

-

-

Activity: Explore pixel values and indices

-
    -
  • Open image: xy_8bit__nuclei_noisy_different_intensity.tif
  • -
  • Explore different ways to inspect pixel values and indices
  • -
  • Check where the lowest pixel indices are in the displayed image: -* Most commonly: Upper left corner, which is different to conventional coordinate systems.
  • -
-

Formative assessment

-

True or false?

-
    -
  • The lowest pixel index of a 2D image always is [1,1].
  • -
  • When looking at a 2D image, the lowest pixel indices are always in the lower left corner.
  • -
-

Learn next

-
    -
  • display.md
  • -
- -
- -
- -
-
- - - - - - - diff --git a/_site/src/imagej-macro/CellAndSpotDetection.ijm b/_site/src/imagej-macro/CellAndSpotDetection.ijm deleted file mode 100644 index 5eecdba1b78f60bd89cb502e4167ce25aae52df1..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/CellAndSpotDetection.ijm +++ /dev/null @@ -1,24 +0,0 @@ -open("/Users/tischi/Dropbox/Presentations_Courses/2015--Tischi--Kopenhagen/0000--PracticalImagej/data/autophagosomes/autophagosomes_raw.tif"); -run("Gaussian Blur...", "sigma=15"); -run("Find Maxima...", "noise=50 output=[Segmented Particles]"); -run("Analyze Particles...", "exclude add"); -open("/Users/tischi/Dropbox/Presentations_Courses/2015--Tischi--Kopenhagen/0000--PracticalImagej/data/autophagosomes/autophagosomes_raw.tif"); -rename("raw"); -run("Duplicate...", "title=median_bg"); -run("Median...", "radius=5"); -imageCalculator("Subtract", "raw","median_bg"); -run("Find Maxima...", "noise=50 output=[Single Points]"); -run("Divide...", "value=255"); -rename("spots.tif") -selectWindow("spots.tif"); -roiManager("Measure"); -saveAs("Results", "/Users/tischi/Dropbox/Presentations_Courses/2015--Tischi--Kopenhagen/0000--PracticalImagej/data/autophagosomes/spot_count.csv"); - -close("*"); - -list = getList("window.titles"); -for (i=0; i maxArea ) - { - run("Replace/Remove Label(s)", "label(s)="+label+" final=0"); - } -} - -// TODO (Optional): Relabel the filtered label image such that labels start from 1 and none are missing - - - - diff --git a/_site/src/imagej-macro/median-subtraction.ijm b/_site/src/imagej-macro/median-subtraction.ijm deleted file mode 100644 index b38dd6dc803033f5b8c40ea94e39918323630c34..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/median-subtraction.ijm +++ /dev/null @@ -1,14 +0,0 @@ -#@File image -#@Integer radius - -// open -run("Close All"); -open(image); -rename("input"); - -// median filter -run("Duplicate...", "title=median"); -run("Median...", "radius=31"); - -// image subtraction -imageCalculator("Subtract create 32-bit", "input","median"); diff --git a/_site/src/imagej-macro/object-intensity-splitting-workflow.ijm b/_site/src/imagej-macro/object-intensity-splitting-workflow.ijm deleted file mode 100644 index c1526afa200cc7df39626589368f34b548dd2fbd..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/object-intensity-splitting-workflow.ijm +++ /dev/null @@ -1,24 +0,0 @@ -#@File image -#@Integer threshold -#@Double blurHalfWidth - -// Notes -// - this only works for 8-bit images, because of 'max = 255 - threshold' - -// open image -run("Close All"); -open(image); - -// smooth -run("Duplicate...", "title=blur"); -run("Gaussian Blur...", "sigma="+blurHalfWidth); - -// invert -run("Duplicate...", "title=invert"); -run("Invert"); -run("Enhance Contrast", "saturated=0.35"); - -// watershed -max = 255 - threshold; // this is because we inverted the 8-bit input image -run("Classic Watershed", "input=invert mask=None use min=0 max="+max); -run("16_colors"); diff --git a/_site/src/imagej-macro/object-segmentation.ijm b/_site/src/imagej-macro/object-segmentation.ijm deleted file mode 100644 index feb6c80dd12e490eb37df22285319d9f5fd3c100..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/object-segmentation.ijm +++ /dev/null @@ -1,32 +0,0 @@ -run("Close All"); // close all images - -// get file from user (see: https://imagej.net/Script_Parameters) -#@File (label="Please select file") file - -// open file -open(file); -rename("input"); - -// threshold -run("Duplicate...", "duplicate title=binary"); -setThreshold(21, 255); -run("Convert to Mask", "method=Default background=Dark black"); - -// connected components labeling -run("Connected Components Labeling", "type=[8 bits]"); -rename("labels"); - -// TODO: remove very small objects -// Hint: Record [ Plugins > MorphoLibJ > Label images > Label Size Opening ] - -// TODO: remove objects touching image boundary -// Hint: Record [ Plugins > MorphoLibJ > Label images > Remove Border Labels ] - -// display labels on input -run("Merge Channels...", "c2=labels c4=input create ignore keep"); -run("glasbey_inverted"); // change LUT -rename("overlay"); - -// clean up -selectWindow("binary"); -close(); diff --git a/_site/src/imagej-macro/object-shape-measurement.ijm b/_site/src/imagej-macro/object-shape-measurement.ijm deleted file mode 100644 index 723c5b16a1b34f0040c850f28d3ea1047dc7c192..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/object-shape-measurement.ijm +++ /dev/null @@ -1,25 +0,0 @@ -// Get input from user -#@File image (label="input image") -#@File (style="directory", label="output directory") outputDirectory - -// Open image -run("Close All"); -open(image); - -// Binarize (Threshold) -setThreshold(24, 255); -setOption("BlackBackground", true); -run("Convert to Mask"); - -// Connected components -run("Connected Components Labeling", "connectivity=4 type=[16 bits]"); - -// Measure shape -run("Region Morphometry"); - -// Export results -saveAs("Results", outputDirectory + "/" + Table.title + ".csv"); - -// Clean up -run("Close All"); -// TODO: close table diff --git a/_site/src/imagej-macro/object-splitting-by-intensity-watershed.ijm b/_site/src/imagej-macro/object-splitting-by-intensity-watershed.ijm deleted file mode 100644 index 31ac54af5d84c15feef6fc7f6b402d27403620e1..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/object-splitting-by-intensity-watershed.ijm +++ /dev/null @@ -1,15 +0,0 @@ -#@File image -#@Integer threshold - -// open image -run("Close All"); -open(image); - -// invert -run("Duplicate...", "title=invert"); -run("Invert"); -run("Enhance Contrast", "saturated=0.35"); - -// watershed -max = 255 - threshold; // this is because we inverted the 8-bit input image -run("Classic Watershed", "input=invert mask=None use min=0 max="+max); diff --git a/_site/src/imagej-macro/opening-2d.ijm b/_site/src/imagej-macro/opening-2d.ijm deleted file mode 100644 index e51521a06b7cc597b0fadece1422b812c2b4c3cb..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/opening-2d.ijm +++ /dev/null @@ -1,6 +0,0 @@ -radius = 3; -rename("input"); -run("Duplicate...", "title=opened"); -run("Minimum...", "radius="+radius); -run("Maximum...", "radius="+radius); - diff --git a/_site/src/imagej-macro/results_visualisation/color-objects-by-measurement.ijm b/_site/src/imagej-macro/results_visualisation/color-objects-by-measurement.ijm deleted file mode 100644 index 93f93327b98f3700130064bf462b925fc4140830..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/results_visualisation/color-objects-by-measurement.ijm +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: add comments -run("Region Morphometry"); -run("Assign Measure to Label"); -run("Calibration Bar...", "location=[Upper Right] fill=Black label=White number=5 decimal=0 font=12 zoom=1 overlay"); - -// TODO: create empty image with calibration bar diff --git a/_site/src/imagej-macro/results_visualisation/measurements-text-overlay.ijm b/_site/src/imagej-macro/results_visualisation/measurements-text-overlay.ijm deleted file mode 100644 index 531217a46428b46e138846b37752974f598035e2..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/results_visualisation/measurements-text-overlay.ijm +++ /dev/null @@ -1,30 +0,0 @@ -#@File labelImage - -// open image -run("Close All"); -open(labelImage); - -// perform measurements -run("Particle Analysis 3D", "volume inertia surface_0=[Crofton (13 dirs.)] euler_0=C26"); - -// TODO: change font size: setFont -setFont("SansSerif", 4); - -for ( i = 0; i < Table.size; ++i ) -{ - volume = Table.get( "Volume", i ); - x = Table.get( "Elli.Center.X", i ); - y = Table.get( "Elli.Center.Y", i ); - z = Table.get( "Elli.Center.Z", i ); - - toUnscaled(x, y, z); - - Overlay.drawString( volume, x, y ); - Overlay.setPosition( z ); -} - -Overlay.show(); - - - - diff --git a/_site/src/imagej-macro/runAsBatch.ijm b/_site/src/imagej-macro/runAsBatch.ijm deleted file mode 100644 index bcd7760819def40976ceccfaf8cf31c268eb886f..0000000000000000000000000000000000000000 --- a/_site/src/imagej-macro/runAsBatch.ijm +++ /dev/null @@ -1,48 +0,0 @@ -dirIn = getDirectory("Choose input directory!"); -imFileExtension = getString("What is the ending of your image files?",".tif"); -files = getFileList(dirIn); - -setBatchMode(true); - -for(i=0; i= threshold); -figure; imagesc(bin_image) % display binary image -end - diff --git a/_site/workshops/2019-June-Tischi-Turku.md b/_site/workshops/2019-June-Tischi-Turku.md deleted file mode 100644 index c3b8514b7e7ea437b94fad7848d6fa5d1dad3cdf..0000000000000000000000000000000000000000 --- a/_site/workshops/2019-June-Tischi-Turku.md +++ /dev/null @@ -1,66 +0,0 @@ -# 2018 May 7th-9th: Basics of Image Analysis using ImageJ - -## Location: - -ATC Computer Training Lab - -## Computers - -Computers with ImageJ and course data will be installed. Thus, you do not need to bring your laptop. - -If you prefer to work on your own computer, please: - -- Install Fiji: https://imagej.net/Fiji/Downloads -- Download course material: https://github.com/tischi/imagej-courses/archive/master.zip - - Please download again on Monday morning as there will most likely be some last minute changes! - -## Prerequisites - -In order to save some time, and since many of you took part in the ALMF Basics in Microscopy courses, we will not repeat what has been taught there already. If you did not attend it would be good if you could have a look at the material: - -- Basic handling of the [ImageJ](https://fiji.sc/) software -- [Image inspection and handling](https://github.com/tischi/imagej-courses/blob/master/practicals/basic-image-inspection-and-handling.md) -- [3D image inspection](https://github.com/tischi/imagej-courses/blob/master/practicals/3D-image-inspection.md) - -But, don't worry, even if you don't know above material you'll be able to follow the course. - -## Schedule - -### Monday May 7th - -| Time | Topic | -|------|-------| -| 09:30 - 10:00 | Welcome and self-introduction | -| 10:00 - 12:30 | Practical: [Basics of intensity measurements](https://github.com/tischi/imagej-courses/blob/master/practicals/intensity-quantification.md) | -| 12:30 - 13:30 | Lunch break | -| 13:30 - 15:00 | Practical: [Image segmentation: Manual thresholding, Signal to noise, Image filtering](https://github.com/tischi/imagej-courses/blob/master/practicals/image-segmentation.md) | -| 15:30 - 16:30 | Practical: [Image segmentation: Automated local background subtraction](https://github.com/tischi/imagej-courses/blob/master/practicals/workflow-2d-intracellular-spot-detection.md#local-background-subtraction-) | -| 16:30 - 17:30 | Practical: [Image segmentation: Automated global thresholding](https://github.com/tischi/imagej-courses/blob/master/practicals/image-segmentation.md#automated-global-thresholding)| -| 00:00 - 00:00 | Recommended home-work: [Intensity quantification: Automated local background subtraction](https://github.com/tischi/imagej-courses/blob/master/practicals/automated-local-background-subtraction-for-intensity-quantifications.md#intensity-measurements-with-automated-local-background-subtraction--) | - -### Tuesday May 8th - -| Time | Topic | -|------|-------| -| 09:30 - 12:30 | Practical: [Workflow for intracellular object quantification](https://github.com/tischi/imagej-courses/blob/master/practicals/workflow-2d-intracellular-spot-detection.md#workflow-autophagosome-quantification) | -| 12:30 - 13:30 | Lunch break | -| 13:30 - 14:30 | Practical: [3D image analysis](https://github.com/tischi/imagej-courses/blob/master/practicals/3D-analysis.md) | -| 14:30 - 15:30 | Brief lectures & demonstrations: [Supervised pixel classification](https://github.com/tischi/imagej-courses/blob/master/practicals/supervised-pixel-classification.md#supervised-pixel-classification), [Supervised object classification](https://github.com/tischi/imagej-courses/blob/master/practicals/supervised-object-classification.md#supervised-object-classification), [Registration](https://github.com/tischi/imagej-courses/blob/master/practicals/image-registration.md), Stitching, Dealing with complex data formats | -| 15:30 - 16:15 | Practical: [Colocalization](https://github.com/tischi/imagej-courses/blob/master/practicals/colocalisation.md#colocalisation) | -| 16:15 - 17:30 | Practical: [Tracking using TrackMate](https://github.com/tischi/imagej-courses/blob/master/practicals/tracking-with-trackmate.md) | - -### Wednesday May 9th - -| Time | Topic | -|------|-------| -| 09:30 - 11:30 | Practical: [Macro recording and scripting in ImageJ](https://github.com/tischi/imagej-courses/blob/master/practicals/macro-recording.md) | -| 11:30 - 12:30 | Brief mentionings: [CellProfiler](http://cellprofiler.org/tutorials/), [Imaris](http://www.bitplane.com/learning), [KNIME](https://www.knime.com/community/image-processing), [shinyHTM](https://github.com/hmbotelho/shinyHTM#shinyhtm) | -| 12:30 - 13:30 | Lunch break | -| 13:30 - 17:00 | Practical: Work on own data (optional session) | - -### Further information - -Don't worry, there will be coffee breaks, one in the morning and one in the afternoon, even though they are not explicitly scheduled :-) - - - diff --git a/_site/workshops/concepts-mlj--workflows-ij-macro.md b/_site/workshops/concepts-mlj--workflows-ij-macro.md deleted file mode 100644 index 11d7ebc603c964c9f1379049df3e296e0b4a641d..0000000000000000000000000000000000000000 --- a/_site/workshops/concepts-mlj--workflows-ij-macro.md +++ /dev/null @@ -1 +0,0 @@ -# Basics of Image Analysis: Concepts and Workflows diff --git a/_site/workshops/concepts-mlj--workflows-knime.md b/_site/workshops/concepts-mlj--workflows-knime.md deleted file mode 100644 index f7ec36f3c7e92a8689660b4df73621234e63d762..0000000000000000000000000000000000000000 --- a/_site/workshops/concepts-mlj--workflows-knime.md +++ /dev/null @@ -1,52 +0,0 @@ -# Basics of Bioimage Analysis: Concepts (MorpholibJ) and Workflows (KNIME) - -## Duration - -2-4 days - -## Schedule - -1-2 days: Learn concepts of bioimage analysis, using MorphoLibJ (ImageJ Plugin) -1-2 days: Build bioimage analysis workflows, using KNIME. - -## Why is this workshop very useful? - -Using ImageJ to teach bioimage analysis concepts has the great advantage that most people are already familiar with the ImageJ user interface. Thus, one can fully focus on bioimage analysis concepts and is not distracted by other technical hurdles that naturally arise when using a new software (or even a new programming language). - -The ImageJ user interface is very minimal, maximally focussing the attention on interactive exploration of the currently active image, and many image processing operations have an interactive preview functionality. Taken together these features also help to teach and learn image analysis concepts without much distraction. - -Using the MorpholibJ ImageJ plugin has the advantage that basic important concepts like "connected components analysis" are explicitely executed as one single step (and not hidden inside some convenience meta-functionality that combine many concepts in one step). Moreover, MorpholibJ works both in 2D and 3D, has great documentation, and also offers many advanced functionalities that can be explored further on. - -Following up the above conceptual teaching with bioimage analysis workflow building in KNIME is a very natural fit. The reason is that KNIME's image analysis nodes often literally have the same names as the menu entries in ImageJ and specificially as in MorphoLibJ. Thus, course participants will see the same concepts occuring a second time, which helps memorizing important concepts. Moreover, KNIME is a great tool for data science in general and thus definitely worth learning. - - -## Topics taught - -The number of topics can be variied, depending on whether this course should be taught in 2,3, or 4 days. - -- Image data types -- Image segmentation by thresholding - - Manual - - Automated? -- Binary images -- Connected component analysis -- Label masks -- Object shape measurements -- Object intensity measurements -- Convolutional filters -- Rank filters - - Applied on binary images - - Applied on grayscale images -- Local background subtraction algorithms -- Distance transform -- Object splitting by watershed - - Intensity based watershed - - Distance map based watershed -- Machine learning based image segmentation - - -## Notes - -- Running this workshop it is useful to fine-tune what exactly is taught in the two parts, in order to maximise the overlap of bioimage analysis concepts. -- ImageJ macro programming is on purpose not taught, because it would dilute the teaching of image analysis concepts with (very distracting) programming tasks. - diff --git a/_site/workshops/macro-recording-workshop/batch-folder-measure-cell-number-and-size.ijm b/_site/workshops/macro-recording-workshop/batch-folder-measure-cell-number-and-size.ijm deleted file mode 100644 index edcd20f6b5f6e822f16a0e326378c1d314a55922..0000000000000000000000000000000000000000 --- a/_site/workshops/macro-recording-workshop/batch-folder-measure-cell-number-and-size.ijm +++ /dev/null @@ -1,52 +0,0 @@ -directory = getDirectory("Choose Input Directory"); -outputDirectory = getDirectory("Choose Output Directory"); -threshold = getNumber("Please enter threshold", 10); - -// clean up -run("Close All"); -close("*.csv"); - - -// configure output -outputTablePath = outputDirectory + "results_threshold=" + threshold + ".csv"; - -fileList = getFileList(directory); - -setBatchMode( true ); - -for (i = 0; i < fileList.length; i = i + 1) { - - if ( endsWith(fileList[i], ".tif") ) { - - filePath = directory + fileList[i]; - - // clean up - run("Close All"); - - // open data - open( filePath ); - - // segment nuclei - segmentNuclei( threshold ); - - // measure nuclei properties - run("Set Measurements...", "area display redirect=None decimal=3"); - run("Analyze Particles...", "summarize"); - } -} - - -// save results table -print( "Saving: " + outputTablePath ); -saveAs("Results", outputTablePath ); -close("*.csv"); - -setBatchMode( true ); - -// FUNCTIONS - -function segmentNuclei( threshold ) { - setThreshold( threshold, 255); - setOption("BlackBackground", true); - run("Convert to Mask"); -} diff --git a/_site/workshops/macro-recording.md b/_site/workshops/macro-recording.md deleted file mode 100644 index af865b194dfbd954b53bac715bf7035f5b0eee89..0000000000000000000000000000000000000000 --- a/_site/workshops/macro-recording.md +++ /dev/null @@ -1,753 +0,0 @@ -# Batch analysis using IJ macro programming - -References: -- https://imagej.nih.gov/ij/developer/macro/functions.html -- https://imagej.nih.gov/ij/developer/macro/macros.html - -## Introduction - -Software can often be ran by either - -- Graphical User Interface (GUI) -- Scripting - -Have you done scripting before? - -[ Script ] --- is ---> [ Executable text ] - -Think about pros and cons of GUI vs scripting. - -### Pros of scripts - -- Copy and paste -- Search for help -- Publish -- Share -- Review - -### Cons of scripts - -- Blinking cursor intimedation -- Need to remember commands - -## Script recording concept - -[ GUI actions ] --- record as ---> [ Script ] - -## Smoothing an image - -Let's record our first macro! - -- Turn on the macro recorder: - - [Plugins > Macros > Record] -- Execute below UI commands - - [ File > Open... ] - - "xy_8bit__nuclei_noisy_different_intensity.tif" - - [ Process > Filters > Mean... ] - - Radius: 2 - - [ OK ] - -You should now see below text in the **Recorder** window: - -``` -open("../xy_8bit__nuclei_noisy_different_intensity.tif"); -run("Mean...", "radius=2"); -``` - -In order to run the code we have to -- [Create] the macro - - This opens up the **Script** editor window -- Now you can [Run] it! - - -## Recorder window - -- [ Recorder window ] -> ( Records code ) -- [ Recorder window ] -> ( Choose language ) - -## Script editor window - -- [ Script editor window ] -> ( Run code ) -- [ Script editor window ] -> ( Edit code ) -- [ Script editor window ] -> ( Save code ) -- [ Script editor window ] -> ( Open code ) - - -Let's examine the code that we recorded... - -## Functions - -open( ... ); -- [ open ] -> [ Function ] -- [ open ] --- has ---> [ Parameter ] - - -Function -- [ Function ] --- has ---> [ Name ] -- [ Function ] --- can have ---> [ Parameters ] - - -Parameter -[ Parameter(s) ] --- configure ---> [ Function ] - - -run( ... ); -- [ run ] -> [ Function ] -- [ run ] --- has ---> [ 2 text parameters ] - 1. Name of menu command - 2. Command parameter(s) as a "key value" pair(s) - - -## Key-value pairs - -radius=2 -- [ Key value pair ] --- has ---> [ Key (name) ] -- [ Key value pair ] --- has ---> [ Value ] --- can be ---> [ Number ] -- [ = ] -> [ Operator ] -- [ = ] --- assigns ---> Value to key - - -"radius=2" -- [ Text parameters ] --- enclosed by ---> [ Quotation marks " " ] - - -; -- [ ; ] -> indicates the end of one "block of code" - - - -## Automated counting of all cells in an image stack using a macro - -As our first really useful example of a macro we will automatically count the number of cells in an image. - -Turn on macro recorder: - -- [Plugins > Macros > Record] - -Record workflow for cell counting: - -- Open the first time-point of the time-series: - - [ File > Open ] - - '../mitocheck_movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif' -- Threshold - - [Image > Adjust Threshold] - - [X] Dark background - - [Apply] -- Set measurements, keeping tracking of the file-name - - [Analyze > Set measurements] - - [X] Area - - [X] Display label - - this will keep track of the filename -- Find and measure the cells - - [Analyze > Analyze Particles...] - - [X] Summarize - - This will give you for a given image the average results of all objects - - Show: Nothing - -Your recorded macro should look somewhat similar to the text shown below: - -``` -open("H:\\imagej-courses-master\\data\\mitocheck-movie\\EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif"); -run("Set Measurements...", "area display redirect=None decimal=3"); -setAutoThreshold("Default dark"); -//run("Threshold..."); -//setThreshold(18, 255); -setOption("BlackBackground", false); -run("Convert to Mask"); -run("Analyze Particles...", " show=Outlines summarize"); -``` - -### Comment concept - -- [ // ] --- starts a ---> [ Comment ] -- [ Comment ] --- is ---> [ Not executed text ] - - -Before we can run the code we have to: - -- Remove the "//" before the line starting with 'setTreshold', because we actually want to execute it. - - We do not know why this is commented, weird behaviour of macro recorder -- [Create] the macro -- Save it [ File > Save as .. ]. -- Now you can [Run] it and it should do the job :-) - -### Cleaning up and adding comments - -In fact there a number of lines recorded that are not really needed, below code is sufficient. - -In addition, it is good style to add comments '//' and visually separate code belonging together. - -``` -// close all images -run("Close All"); - -// open file -open("C:/Users/teach/Desktop/imagej-courses-master/data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif"); - -// threshold -setThreshold(18, 255); -run("Convert to Mask"); - -// configure measurements -run("Set Measurements...", "area display redirect=None decimal=3"); - -// perform particle analysis -run("Analyze Particles...", " show=Nothing summarize"); -``` - -### Activity: Automatically save the results table - -Above code does not automatically save the results table, try to add this, using macro recording. - -  - -  - -#### Solution: - -``` -saveAs("Results", "C:\\Users\\teach\\Desktop\\Summary.csv"); -``` - -## Using variables - -Reusing a macro for different data set might require adapting some parameters. -It is good style to put all the things that can change at the top of the code, such that it is easy to modify. For this we need so-called "variables". - -### Variable concept - -- [ Variable ] --- is ---> [ Key Value Pair ] -- [ Variable ] --- has ---> [ Name ] -- [ Variable ] --- has ---> [ Value ] -- [ Variable ] --- is assigned ---> [ Value ] -- [ Content ] --- can be ---> [ Text ] --- has ---> [ Quotation marks ] -- [ Content ] --- can be ---> [ Numeric ] -- [ Name ] --- must only contain ---> [ Letter Numbers _ ] -- [ Name ] --- must not start with ---> [ Number ] -- [ Name ] --- follows ---> [ Conventions ] -- [ Name ] --- should --> Start with lower case -- [ Name ] --- example ---> [ cellCount ] -- [ Name ] --- example ---> [ cell_count ] -- [ String ] --- is another name for ---> [ Text ] - -### Activity: Interactive practical on variables: assignment, numbers, strings, adding, concatenating. - -### Combining variables concept - -- [ + ] --- combines ---> [ Variables ] -- [ + ] --- adds ---> [ Numeric variables ] -- [ + ] --- concatenates ---> [ Text variables ] - - -#### Some examples - -##### Variable values are mutable - -``` -a=1; -a=2; -``` - -##### Some special ways to increment and add variables - -``` -a=1;print(a++);print(a); -b=2;print(++b);print(b); -x=2;x+=10;x*=2; -``` - -##### Variables can be used within assignments - -``` -a=1; -b=2; -a=a+1; -``` - -### Formative assessment: Variable assignments and manipulations - -What are the values of below variables at the end of each line is executed? - -1. `a=1; b=1; c=a+2*b; c++` -1. `foo=1; bar=10; bar=bar+foo;` -1. `x=10; x=10*x;` -1. `y=5.5; y=y+y+y;` -1. `x="10"; x=x+x;` -1. `mmk=5; y="10"; y=y+mmk;` - -Write down three different ways to add 1 to the variable i: - -``` -i = 1; -``` - -### Variable naming conventions - -In different languages there are different conventions, e.g. - -- Java and R: cellCount -- Python: cell_count - -It is good to stick to those conventions in order not to irritate other people reading your code. - -### Formative assessment: Variable names - -Which of the following are valid variable names? - -1. Cell Count -2. cell-count -3. cellCount -4. CellCount -5. Cell,Count -5. cell____co__unt -6. 10cellCoun_t -7. ___CeLLCoooount - - -## Spaces - -Spaces are often ignored by the computer when it is interpreting your code. Thus is often is a matter of style where to put spaces. -You have to develop your own style and see what is most readable for you and your coworkers. - -All examples below are working: - -``` -a=1; -a = 1; - a = 1 ; -``` - -### Activity: Add filePath and threshold variables - -In below code, the directory with the images is already a variable (note how string-concatentation was used to paste it into the command). - -- Copy below code into Fiji's script editor [ File > New > Script ] -- Adapt the content of the `filePath` **variable**. -- Also make the lower threshold (`18`) a **variable**, with - - name: `threshold` - - content: `18` - -``` -// variables -filePath = "../mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif"; - -// close all images -run("Close All"); - -// open file -open( filePath ); - -// threshold -setThreshold( 18, 255 ); -run( "Convert to Mask" ); - -// configure measurements -run("Set Measurements...", "area display redirect=None decimal=3"); - -// perform particle analysis -run("Analyze Particles...", " show=Nothing summarize"); - -// save results table -saveAs("Results", "C:\\Users\\teach\\Desktop\\Summary.csv"); - -``` - -  - -  - -#### Solution - -``` -threshold = 18; -... -setThreshold( threshold, 255 ); -``` - -### Activity: Name results table after input image - -In above macro, try to make the filename of the results table resemble the image name, using "String concantenation". - -Hints: -- imageFileName = "image.tif"; -- tableFileName = imageFileName + ".csv"; - -  - -  - - -#### Solution - -``` -tableFilePath = filePath + ".csv"; - -saveAs( "Results", tableFilePath + ".csv" ); -``` - -### Combined solutions - -``` -// user input -filePath = "C:/Users/teach/Desktop/imagej-courses-master/data/mitocheck-movie/EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif"; -threshold = 18; -tableFilePath = filePath + ".csv"; - -// close all images -run("Close All"); - -// open file -open( filePath ); - -// threshold -setThreshold( threshold, 255 ); -run( "Convert to Mask" ); - -// configure measurements -run("Set Measurements...", "area display redirect=None decimal=3"); - -// perform particle analysis -run("Analyze Particles...", " show=Nothing summarize"); - -// save results table -saveAs( "Results", tableFilePath ); -``` - -##### Note - -It might not be ideal to have the results in the same folder as the input image. -To avoid this we would have to split the filePath into a directory and filename... - -## Adding graphical user interface (GUI) for variables - - -### Pros of fetching variables via a GUI - -- E.g., for file paths is is good because one avoids tyops -- In general one can limit the choices and thus prevent wrong inputs - -### Cons of fetching variables via a GUI - -- Can be lots of clicking -- It is not stored in the script what the user chose => reproducibility issues - -### Concept - -[ GUI element ] --- fetches content for ---> [ Variable ] - -### Hints - -Typically, on uses internet search to find out how to do something related to programming: - -- Search the internet: `imagej macro get variable from user` - - You should find: - - http://imagej.1557.x6.nabble.com/Having-a-macro-prompt-for-variable-input-td3694090.html - - getNumber("prompt", defaultValue); - -### Activity: Fetching a number via a GUI element - -Interactive activity: fetching a number via a GUI element and print it - -### Activity: Fetching a file path via a GUI element - -In below code, the threshold variable already has its GUI. - -- Try to also **obtain the filePath from a GUI element**. - -Hint: -- https://imagej.nih.gov/ij/macros/OpenDialogDemo.txt - -``` -// User input -filePath = "H:\\imagej-courses-master\\data\\mitocheck-movie\\EMBO_2012_Group3--empty--empty--W0002--P001--T00000--Z000--C.tif"; -threshold = getNumber("Enter threshold", 29); - -// General code -run("Image Sequence...", "open=["+directory+"] sort"); -run("Set Measurements...", "area display redirect=None decimal=4"); -setAutoThreshold("Default dark"); -setThreshold(threshold, 255); -setOption("BlackBackground", false); -run("Convert to Mask", "method=Default background=Dark"); -run("Analyze Particles...", " show=Nothing summarize stack"); -``` - -  - -  - - - -#### Solution - -``` -filePath = File.openDialog( "Select a File" ); -``` - -### Activity: Saving the results table at a good place and with a good name - -Now that we have the input file as a variable, we can automatically save the results table with a name related to this file. -Try to do this on your own. - -Hints: -- Google: ImageJ Macro save results table -- http://imagej.1557.x6.nabble.com/save-results-table-as-csv-with-custom-name-td5003427.html -- Google: ImageJ Macro create new folder -- https://stackoverflow.com/questions/36144914/imagej-macro-make-new-folder-and-save-output-in-new-folder - -#### Solution - -... - -## Functions - -It is very good for ithe readability and for reusing parts of our code to refactor it into small parts that belong together, so-called "functions". - -### Function concept - -- [ Function ] --- has ---> [ Name ] -- [ Function ] --- contains ---> [ Code ] -- [ Code ] -> [ Executable via name ] -- [ Function ] --- can have ---> [ Parameters ] -- [ Parameters ] --- are ---> [ Variables ] - -### Activity - -- Copy below code into Fiji. -- Note how everything related to measure the cells was wrapped into a function. -- Try to also make a function for the thresholding. - -``` -// User input -// - -filePath = File.openDialog("Select a File"); -threshold = getNumber("Enter threshold", 29); - -// Main -// - -open( filePath ); - -// TODO: put into a function... -setAutoThreshold("Default dark"); -setThreshold(threshold, 255); -setOption("BlackBackground", false); -run("Convert to Mask", "method=Default background=Dark"); - -// a function -measureCells(); - -// Functions -// - -function measureCells() { - run("Set Measurements...", "area display redirect=None decimal=4"); - run("Analyze Particles...", " show=Nothing summarize stack"); -} -``` - -Solution: -- ../macros/CountCells-Functions.ijm - -## Indentations - -Indentations (by multiple spaces are tabs) are very important for code readability! -In python they are even mandatory, your code will not run if you do not get the indentations right! - -Below code will run, but it really is not readable! - -``` -s = "Hello" - function printString( s ) - { -print ( s ); - } -``` - -This is much better: - -``` -s = "Hello" - -function printString( s ) -{ - print( s ); -} -``` - - -## Analyzing multiple images in one folder - -``` -dir = getDirectory("Choose a Directory "); - -files = getFileList( dir ); - -for ( i = 0; i < files.length; i=i+1 ) -{ - path = dir + files[i]; - processFile( filePath ); -} - -function processFile( filePath ) -{ - print( "Processing file: " + path ); - open( path ); - - // - // LATER: ADD OWN CODE HERE - // -} -``` - -- Copy above code into the Script editor -- ...and run it! - - -### Concepts - -#### Arrays (Lists) - -- [ Array ] --- has ---> [ Name ] -- [ Array ] --- contains ---> [ Values ] -- [ Array ] --- has ---> [ Length ] -- [ Name[index] ] --- retrieves ---> [ Values ] - -### Activity: Explore arrays - -Copy and paste below code in your script editor (a new window) and run it: - -``` -a = newArray("a","b","c"); -print( a.length ); -print( a[0] ); -a[0] = "Hello World"; -print( a[0] ); -//print( a[ 3 ] ); -``` - -1. Run above code and try to understand each line (discuss with your neighbor). -1. What happens if you uncomment the last line in above code? -1. Make a new script with a array, with name `foo`, containing the numbers: `1, 3, 5, 8` - - Print the array length and each array entry - -### Concept - -Function --- returns ---> array -getFileList( dir ) --- returns ---> array (list) of files - - -#### For loop - -- [ For loop ] --- iterates ---> [ Numeric variable ] -- [ For loop ] --- has ---> [ Start ] -- [ For loop ] --- has ---> [ Ending condition ] -- [ For loop ] --- has ---> [ Increment ] - -### Activity: Explore for loops - -Copy and paste below code in your script editor (a new window) and run it: - -``` -for ( i=0; i<10; i=i+1 ) -{ - print( i ); -} -``` - -1. Change above code to print all numbers from 1 to 20 -1. Change above code to print the numbers: 0, -2, -4, -6 -1. Change above code to print the numbers: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 -1. Instead of using `i` as a flow variable name use `index` - - -### Activity: Combine arrays and for-loops - -1. Make an array (`names`), containing the names: `Luise, Frank, Muzamil, Berta` -1. Print all names using a for-loop - -### Activity - -Add your own cell counting code to above template and run it. - -## Batch mode - -Execute code much faster by suppressing any output. - -``` -setBatchMode( true ); -``` - -# Advanced topics - -## Analyzing multiple images in one folder, including sub-folders - -Sometimes you have your image files distributed in sub-folders. Below code deals with this. - -``` -dir = getDirectory("Choose a Directory "); - -function processFiles( dir ) -{ - list = getFileList(dir); - - for ( i = 0; i < list.length; i++) - { - if ( endsWith( list[i], "/" ) ) { - // recursively go into sub-folders - processFiles( "" + dir + list[i] ); - } - else - { - // analyze the file - path = dir + list[i]; - processFile( path ); - } - } -} - -function processFile( path ) -{ - print( "Processing file: " + path ); - - open( path ); - - // - // ADD OWN CODE HERE - // - } -} -``` - -### If-else statement - -Conditional code execution - -#### Activity: Interactively explore if-else statements - -``` -a = 10; - -if ( a > 100 ) -{ - print( "Yeah!" ); -} -else -{ - print( "Nah..." ); -} - -``` - - - -### Recursion - -A function calling itself - - -## ImageJ2 way of retrieving parameters via graphical user interface (GUI) - -... - diff --git a/_site/workshops/schedules/2019-EMBL-Basics.txt b/_site/workshops/schedules/2019-EMBL-Basics.txt deleted file mode 100644 index 896a0ec9de946136c330b29b0e2306a630f22ebb..0000000000000000000000000000000000000000 --- a/_site/workshops/schedules/2019-EMBL-Basics.txt +++ /dev/null @@ -1,11 +0,0 @@ -Monday: Basic concepts (Fiji) -Tuesday: Basic concepts (Fiji) -Wednesday: Repeat basic concepts (Workflows in KNIME) - -9:30 - 16:30 -lunch: 12:30 - 13:30 - -Communication: -chat.embl.org - -https://chat.embl.org/embl/channels/image-analysis \ No newline at end of file