|
| 1 | +<!-- HTML header for doxygen 1.8.17--> |
| 2 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| 3 | +<html xmlns="http://www.w3.org/1999/xhtml"> |
| 4 | +<head> |
| 5 | +<!-- Google Tag Manager --> |
| 6 | +<script> |
| 7 | + (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push( |
| 8 | + {'gtm.start': new Date().getTime(),event:'gtm.js'} |
| 9 | + );var f=d.getElementsByTagName(s)[0], |
| 10 | + j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= |
| 11 | + 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); |
| 12 | + })(window,document,'script','dataLayer','GTM-N38XC8T'); |
| 13 | +</script> |
| 14 | +<!-- End Google Tag Manager --> |
| 15 | +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
| 16 | +<meta http-equiv="X-UA-Compatible" content="IE=9"/> |
| 17 | +<meta name="generator" content="Doxygen 1.13.2"/> |
| 18 | +<meta name="viewport" content="width=device-width, initial-scale=1"/> |
| 19 | +<title>SimpleITK: ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.R</title> |
| 20 | +<link href="tabs.css" rel="stylesheet" type="text/css"/> |
| 21 | +<script type="text/javascript" src="jquery.js"></script> |
| 22 | +<script type="text/javascript" src="dynsections.js"></script> |
| 23 | +<link href="navtree.css" rel="stylesheet" type="text/css"/> |
| 24 | +<script type="text/javascript" src="resize.js"></script> |
| 25 | +<script type="text/x-mathjax-config"> |
| 26 | +MathJax.Hub.Config({ |
| 27 | + extensions: ["tex2jax.js"], |
| 28 | + jax: ["input/TeX","output/HTML-CSS"], |
| 29 | +}); |
| 30 | +</script> |
| 31 | +<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js"></script> |
| 32 | +<link href="doxygen.css" rel="stylesheet" type="text/css" /> |
| 33 | +<link href="customdoxygen.css" rel="stylesheet" type="text/css"/> |
| 34 | +</head> |
| 35 | +<body> |
| 36 | +<!-- Google Tag Manager (noscript) --> |
| 37 | +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N38XC8T" |
| 38 | + height="0" width="0" style="display:none;visibility:hidden"></iframe> |
| 39 | +</noscript> |
| 40 | +<!-- End Google Tag Manager (noscript) --> |
| 41 | +<script type="text/javascript" src="build_text.js"></script> |
| 42 | +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> |
| 43 | +<div id="titlearea"> |
| 44 | +<table cellspacing="0" cellpadding="0"> |
| 45 | + <tbody> |
| 46 | + <tr style="height: 56px;"> |
| 47 | + <td id="projectalign" style="padding-left: 0.5em;"> |
| 48 | + <div id="projectname">SimpleITK |
| 49 | +  <span id="projectnumber"></span> |
| 50 | + </div> |
| 51 | + </td> |
| 52 | + </tr> |
| 53 | + </tbody> |
| 54 | +</table> |
| 55 | +</div> |
| 56 | +<!-- end header part --> |
| 57 | +<!-- Generated by Doxygen 1.13.2 --> |
| 58 | +<script type="text/javascript"> |
| 59 | +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| 60 | +$(function() { codefold.init(0); }); |
| 61 | +/* @license-end */ |
| 62 | +</script> |
| 63 | +<script type="text/javascript" src="menudata.js"></script> |
| 64 | +<script type="text/javascript" src="menu.js"></script> |
| 65 | +<script type="text/javascript"> |
| 66 | +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| 67 | +$(function() { |
| 68 | + initMenu('',false,false,'search.php','Search',false); |
| 69 | +}); |
| 70 | +/* @license-end */ |
| 71 | +</script> |
| 72 | +<div id="main-nav"></div> |
| 73 | +</div><!-- top --> |
| 74 | +<div id="doc-content"> |
| 75 | +<script type="text/javascript"> |
| 76 | +/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */ |
| 77 | +$(function(){ initResizable(false); }); |
| 78 | +/* @license-end */ |
| 79 | +</script> |
| 80 | +<div class="header"> |
| 81 | + <div class="headertitle"><div class="title">ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.R</div></div> |
| 82 | +</div><!--header--> |
| 83 | +<div class="contents"> |
| 84 | +<div class="fragment"><div class="line">#=========================================================================</div> |
| 85 | +<div class="line">#</div> |
| 86 | +<div class="line"># Copyright NumFOCUS</div> |
| 87 | +<div class="line">#</div> |
| 88 | +<div class="line"># Licensed under the Apache License, Version 2.0 (the "License");</div> |
| 89 | +<div class="line"># you may not use this file except in compliance with the License.</div> |
| 90 | +<div class="line"># You may obtain a copy of the License at</div> |
| 91 | +<div class="line">#</div> |
| 92 | +<div class="line"># http://www.apache.org/licenses/LICENSE-2.0.txt</div> |
| 93 | +<div class="line">#</div> |
| 94 | +<div class="line"># Unless required by applicable law or agreed to in writing, software</div> |
| 95 | +<div class="line"># distributed under the License is distributed on an "AS IS" BASIS,</div> |
| 96 | +<div class="line"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</div> |
| 97 | +<div class="line"># See the License for the specific language governing permissions and</div> |
| 98 | +<div class="line"># limitations under the License.</div> |
| 99 | +<div class="line">#</div> |
| 100 | +<div class="line">#=========================================================================</div> |
| 101 | +<div class="line"># Run with:</div> |
| 102 | +<div class="line">#</div> |
| 103 | +<div class="line"># Rscript --vanilla ImageRegistrationMethodBSpline3.R fixedImageFilter movingImageFile outputTransformFile</div> |
| 104 | +<div class="line"> </div> |
| 105 | +<div class="line">library(SimpleITK)</div> |
| 106 | +<div class="line"> </div> |
| 107 | +<div class="line"># Callback invoked each iteration</div> |
| 108 | +<div class="line">command_iteration <- function(method, bspline_transform) {</div> |
| 109 | +<div class="line"> if (method$GetOptimizerIteration() == 0) {</div> |
| 110 | +<div class="line"> # The BSpline is resized before the first optimizer</div> |
| 111 | +<div class="line"> # iteration is completed per level. Print the transform object</div> |
| 112 | +<div class="line"> # to show the adapted BSpline transform.</div> |
| 113 | +<div class="line"> cat(bspline_transform$ToString(), "\n")</div> |
| 114 | +<div class="line"> }</div> |
| 115 | +<div class="line"> </div> |
| 116 | +<div class="line"> cat(sprintf("%3d = %10.5f\n",</div> |
| 117 | +<div class="line"> method$GetOptimizerIteration(),</div> |
| 118 | +<div class="line"> method$GetMetricValue()))</div> |
| 119 | +<div class="line">}</div> |
| 120 | +<div class="line"> </div> |
| 121 | +<div class="line"># Callback invoked before starting a multi-resolution level.</div> |
| 122 | +<div class="line">command_multi_iteration <- function(method) {</div> |
| 123 | +<div class="line"> if (method$GetCurrentLevel() > 0) {</div> |
| 124 | +<div class="line"> cat(sprintf("Optimizer stop condition: %s\n",</div> |
| 125 | +<div class="line"> method$GetOptimizerStopConditionDescription()))</div> |
| 126 | +<div class="line"> cat(sprintf(" Iteration: %d\n", method$GetOptimizerIteration()))</div> |
| 127 | +<div class="line"> cat(sprintf(" Metric value: %f\n", method$GetMetricValue()))</div> |
| 128 | +<div class="line"> }</div> |
| 129 | +<div class="line"> </div> |
| 130 | +<div class="line"> cat("--------- Resolution Changing ---------\n")</div> |
| 131 | +<div class="line">}</div> |
| 132 | +<div class="line"> </div> |
| 133 | +<div class="line">args <- commandArgs( TRUE )</div> |
| 134 | +<div class="line"> </div> |
| 135 | +<div class="line">if (length(args) < 3) {</div> |
| 136 | +<div class="line"> stop("Usage: fixedImageFilter movingImageFile outputTransformFile")</div> |
| 137 | +<div class="line">}</div> |
| 138 | +<div class="line"> </div> |
| 139 | +<div class="line">fixed <- ReadImage(args[1], 'sitkFloat32')</div> |
| 140 | +<div class="line">moving <- ReadImage(args[2], 'sitkFloat32')</div> |
| 141 | +<div class="line"> </div> |
| 142 | +<div class="line">transformDomainMeshSize <- rep(2, fixed$GetDimension())</div> |
| 143 | +<div class="line">tx <- BSplineTransformInitializer(fixed, transformDomainMeshSize)</div> |
| 144 | +<div class="line"> </div> |
| 145 | +<div class="line">cat(sprintf("Initial Number of Parameters: %d\n", tx$GetNumberOfParameters()))</div> |
| 146 | +<div class="line"> </div> |
| 147 | +<div class="line">R <- ImageRegistrationMethod()</div> |
| 148 | +<div class="line">R$SetMetricAsJointHistogramMutualInformation()</div> |
| 149 | +<div class="line"> </div> |
| 150 | +<div class="line">learningRate <- 5.0</div> |
| 151 | +<div class="line">numberOfIterations <- 100</div> |
| 152 | +<div class="line">convergenceMinimumValue <- 1e-4</div> |
| 153 | +<div class="line">convergenceWindowSize <- 5</div> |
| 154 | +<div class="line">R$SetOptimizerAsGradientDescentLineSearch(learningRate, numberOfIterations,</div> |
| 155 | +<div class="line"> convergenceMinimumValue, convergenceWindowSize)</div> |
| 156 | +<div class="line"> </div> |
| 157 | +<div class="line">R$SetInterpolator('sitkLinear')</div> |
| 158 | +<div class="line"> </div> |
| 159 | +<div class="line">R$SetInitialTransformAsBSpline(tx, inPlace=TRUE, scaleFactors=c(1, 2, 5))</div> |
| 160 | +<div class="line">R$SetShrinkFactorsPerLevel(c(4, 2, 1))</div> |
| 161 | +<div class="line">R$SetSmoothingSigmasPerLevel(c(4, 2, 1))</div> |
| 162 | +<div class="line"> </div> |
| 163 | +<div class="line">R$AddCommand('sitkIterationEvent', function() command_iteration(R, tx))</div> |
| 164 | +<div class="line">R$AddCommand('sitkMultiResolutionIterationEvent', function() command_multi_iteration(R))</div> |
| 165 | +<div class="line"> </div> |
| 166 | +<div class="line">outTx <- R$Execute(fixed, moving)</div> |
| 167 | +<div class="line"> </div> |
| 168 | +<div class="line">cat("-------\n")</div> |
| 169 | +<div class="line">cat(tx$ToString(), "\n")</div> |
| 170 | +<div class="line">cat(outTx$ToString(), "\n")</div> |
| 171 | +<div class="line">cat(sprintf("Optimizer stop condition: %s\n", R$GetOptimizerStopConditionDescription()))</div> |
| 172 | +<div class="line">cat(sprintf(" Iteration: %d\n", R$GetOptimizerIteration()))</div> |
| 173 | +<div class="line">cat(sprintf(" Metric value: %f\n", R$GetMetricValue()))</div> |
| 174 | +<div class="line"> </div> |
| 175 | +<div class="line">WriteTransform(outTx, args[3])</div> |
| 176 | +<div class="line"> </div> |
| 177 | +<div class="line">if (Sys.getenv("SITK_NOSHOW") == "") {</div> |
| 178 | +<div class="line"> resampler <- ResampleImageFilter()</div> |
| 179 | +<div class="line"> resampler$SetReferenceImage(fixed)</div> |
| 180 | +<div class="line"> resampler$SetInterpolator('sitkLinear')</div> |
| 181 | +<div class="line"> resampler$SetDefaultPixelValue(100)</div> |
| 182 | +<div class="line"> resampler$SetTransform(outTx)</div> |
| 183 | +<div class="line"> </div> |
| 184 | +<div class="line"> out <- resampler$Execute(moving)</div> |
| 185 | +<div class="line"> simg1 <- Cast(RescaleIntensity(fixed), 'sitkUInt8')</div> |
| 186 | +<div class="line"> simg2 <- Cast(RescaleIntensity(out), 'sitkUInt8')</div> |
| 187 | +<div class="line"> cimg <- Compose(simg1, simg2, simg1 %/% 2.0 + simg2 %/% 2.0)</div> |
| 188 | +<div class="line"> Show(cimg, "Image Registration Composition")</div> |
| 189 | +<div class="line">}</div> |
| 190 | +</div><!-- fragment --> </div><!-- contents --> |
| 191 | +<!-- HTML footer for doxygen 1.8.17--> |
| 192 | +<!-- start footer part --> |
| 193 | +<hr class="footer"/><address class="footer"><small> |
| 194 | + Generated on <span id="datetime">unknown</span> for SimpleITK by   |
| 195 | + <a href="http://www.doxygen.org/index.html"> |
| 196 | +<img class="footer" src="doxygen.png" alt="doxygen"/> |
| 197 | +</a> 1.13.2 | <a href="https://simpleitk.org/privacy_policy.html"> |
| 198 | + Privacy Policy</a> |
| 199 | +</small></address> |
| 200 | +</body> |
| 201 | +</html> |
0 commit comments