-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathW6.html
165 lines (145 loc) · 7.44 KB
/
W6.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Image Analysis with Fiji</title>
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/cci.css">
<link href="https://fonts.googleapis.com/css?family=Poppins" rel="stylesheet">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div class="reveal">
<!-- Header logo -->
<!--img style="position:fixed;top:1em;right:1em;" src="img/logo_cci.png" width="15%"-->
<!-- Slide Title -->
<header style="position: absolute;top: 1em; left: 1em; z-index:10;"></header>
<!-- ---------------------- START OF SLIDES -------------------------- -->
<div class="slides">
<section data-menu-title="Title">
<h1>Validation and More Batch Processing</h1>
<h3>Laura Cooper<br>Research Fellow, CAMDU</h3>
<br>
<p>Navigation:
<ul><li> Left/right arrow keys for previous/next slide</li><li>'m' key to get to navigation menu</li><li>Escape for slide overview</li></ul>
</p>
</section>
<section data-menu-title="Validation" data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Validation</h1>
<h4>Does the macro work? Are the measurements correct?</h4>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Validation</h1>
<p>After designing an image analysis workflow it is important to validate it, especially if you are planning to use the same process on multiple images. The validation strategies used will depend on they type of problem.</p>
<p>
<ul>
<li>Measurement</li>
<li>Classification</li>
<li>Segmentation</li>
</ul>
</p>
<p>
Your final workflow may contain some or all of these problems. In the following slides there are some examples of quantitative measurements that can be used to evaluate the performance for each problem.
</p>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Example Validation of Measurement Problem</h1>
<p>Aim: Estimate a scalar or vector quantity</p>
<p>Method: Calculate the mean relative error<br>
\[ mean\ relative\ error = {measured\ value - true\ value \over true\ value} \]</p>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Example Validation of Classification Problem</h1>
<p>Aim: Decide if something is present in an image</p>
<p>Method: Calculate the sensitivity and specificity</p>
<p class="left half">\[ sensitivity = {TPs \over TPs+FNs} \]
The fraction of present things that are correctly detected, 0 none detected to 1 all detected
\[ specificity = {TNs \over TNs+FPs} \]
The fraction of correct detection when the thing is not present, 0 all falsely detected to 1 none falsely detected</p>
<img class="right half" src="img-lc/TPFNtable.png"/>
<img class="right half" src="img-lc/falsepositivecutoff.png"/>
<p>Image from <a href=https://www.genomenon.com/blog/machine-learning-enhances-specificity-of-variant-search/>www.genomenon.com</a></p>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Example Validation of Segmentation Problem</h1>
<p>Aim: Estimate the boundary regions of an image</p>
<p class="left twothirds">Method: Calculate the difference between the segmented and ground truth boundaries
\[ root\ mean\ square\ error = \sqrt{{\displaystyle\sum\limits_{i=1}^{N}(\boldsymbol{x}^s_i-\boldsymbol{x}^g_i)^2 \over N}}\]
where \( N\) is the number of points, \(\boldsymbol{x}^s_i\) are the points that make up the segmented boundary (green) and \(\boldsymbol{x}^g_i\) are the points that make up the ground truth boundary (magenta)</p>
<img class="right third" src="img-lc/GTboundcomp.png"/>
<p>Different metrics can be used, e.g. Hausdorff distance</p>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>What's true?</h1>
<ul>
<li>The true value or ground truth should be evaluated independently from the image analysis</li>
<li>The method may depend on the area of study. There is often a method that is considered the "gold standard" in the community.</li>
</ul>
</section>
<section data-state="res1"><style>.res1 header:after { content: ""; }</style>
<h1>Training and Testing</h1>
<ul>
<li>Let's assume you have some ground truth data for your images that has been obtained using the "gold standard" method</li>
<li>You also have the original dataset, on which no analysis has been performed</li>
<li>When developing an algorithm, a portion of the data will be used for training the algorithm and a portion will be used for testing</li>
<li>More data is always better!</li>
</ul>
<p>For more information on validation see Chapter 10 of <a href=https://doi.org/10.1117/3.831079.ch10>Handbook of Medical Imaging, Volume 2. Medical Image Processing and Analysis (K. Bowyer, 2000)</a></p>
</section>
<section data-menu-title="More Batch Processing" data-state="bat1"><style>.bat1 header:after { content: ""; }</style>
<h1>More Batch Processing</h1>
<p>Previously, we tried out <code>Process > Batch > Macro...</code>.<br> There are other ways to do Batch processing in ImageJ:</p>
<ul>
<li>Use <code>Process > Batch > Macro...</code> but run it from a macro command </li>
<li>In the macro editor go to <code>Templates > ImageJ 1.x > Batch > Process Folder (IJ1 Macro)</code> and use the template to process all the files in a folder</li>
<li>Use <a href=https://imagej.nih.gov/ij/developer/macro/functions.html#getDir>getDir</a> to request the directory from the user and then write your own loop to process all the files in the folder</li>
<li>Use <a href=https://imagej.nih.gov/ij/developer/macro/functions.html#setBatchMode>setBatchMode</a> to do the processing in the background</li>
</ul>
</section>
</div> <!-- ---------------------- END OF SLIDES -------------------------- -->
</div>
<!-- Footer -->
<img style="position:fixed;bottom:1em;right:1em;" src="img/logo_WMS.jpg" width="10%">
<!--img style="position:fixed;bottom:1em;left:1em;" src="img/logo_tw.png" width="20%"-->
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: false,
slideNumber: true, //-- Added for development
dependencies: [
{ src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/menu/menu.js' }
],
menu: {
hideMissingTitles: true,
themes: false,
transitions: false,
//markers: true,
numbers: true,
openButton: false,
titleSelector: 'span.menu-title'
}
});
</script>
</body>
</html>