ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
00001 /*========================================================================= 00002 * 00003 * Copyright Insight Software Consortium 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0.txt 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 *=========================================================================*/ 00018 /*========================================================================= 00019 * 00020 * Portions of this file are subject to the VTK Toolkit Version 3 copyright. 00021 * 00022 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00023 * 00024 * For complete copyright, license and disclaimer of warranty information 00025 * please refer to the NOTICE file at the top of the ITK source tree. 00026 * 00027 *=========================================================================*/ 00028 #ifndef __itkSpatialOrientation_h 00029 #define __itkSpatialOrientation_h 00030 00031 namespace itk 00032 { 00033 namespace SpatialOrientation 00034 { 00035 // Coordinate orientation codes have a place-value organization such that 00036 // an ImageDimension-al sequence of subcodes says both which varies fastest 00037 // through which varies slowest, but also which end of the frame of 00038 // reference 00039 // is considered zero for each of the coordinates. For example, 'RIP' 00040 // means 00041 // Right to Left varies fastest, then Inferior to Superior, and Posterior 00042 // to 00043 // Anterior varies the slowest. 00044 typedef enum { 00045 ITK_COORDINATE_UNKNOWN = 0, 00046 ITK_COORDINATE_Right = 2, 00047 ITK_COORDINATE_Left = 3, 00048 ITK_COORDINATE_Posterior = 4, //back 00049 ITK_COORDINATE_Anterior = 5, //front 00050 ITK_COORDINATE_Inferior = 8, //below 00051 ITK_COORDINATE_Superior = 9 //above 00052 // ITK_COORDINATE_Historical=16, 00053 // ITK_COORDINATE_Future=17 00054 } CoordinateTerms; 00055 00056 typedef enum { 00057 // These code place values have to be far enough apart to 00058 // separate the CoordinateTerms above. 00059 // However, if we added History/Future direction in time, 00060 // we would need at least 5 bits per. 00061 ITK_COORDINATE_PrimaryMinor = 0, 00062 ITK_COORDINATE_SecondaryMinor = 8, 00063 ITK_COORDINATE_TertiaryMinor = 16 00064 // Majorness is in terms of rank-minor because 00065 // a 00066 // fourth dimension, time, would be even More 00067 // major than the 00068 // PrimaryMajor==TertiaryMinor. 00069 // ITK_COORDINATE_QuaternaryMinor=24 00070 } CoordinateMajornessTerms; 00071 // Adding time IN GENERAL would make these 8 x 6 = 48 triples into 16 00072 // x 24 = 384 4-tuples. 00073 // A general fourth dimension would need a unique pair of letters to 00074 // add to the code; 00075 // Maybe use H and F, from History to Future? Maybe use 48 x 2 with 00076 // time ALWAYS highest 00077 // order, or 48 x 2 x 2, with 3-space always highest or lowest order? 00078 // Multispectra might be 00079 // co-registered and pieced together.... PD-T2 interleaving of 00080 // slices is handled with choosing 00081 // which spectrum to load via the prototypical file name. 00082 typedef enum { 00083 ITK_COORDINATE_ORIENTATION_INVALID = ITK_COORDINATE_UNKNOWN, 00084 ITK_COORDINATE_ORIENTATION_RIP = ( ITK_COORDINATE_Right 00085 << ITK_COORDINATE_PrimaryMinor ) 00086 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00087 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00088 ITK_COORDINATE_ORIENTATION_LIP = ( ITK_COORDINATE_Left 00089 << ITK_COORDINATE_PrimaryMinor ) 00090 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00091 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00092 ITK_COORDINATE_ORIENTATION_RSP = ( ITK_COORDINATE_Right 00093 << ITK_COORDINATE_PrimaryMinor ) 00094 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00095 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00096 ITK_COORDINATE_ORIENTATION_LSP = ( ITK_COORDINATE_Left 00097 << ITK_COORDINATE_PrimaryMinor ) 00098 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00099 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00100 ITK_COORDINATE_ORIENTATION_RIA = ( ITK_COORDINATE_Right 00101 << ITK_COORDINATE_PrimaryMinor ) 00102 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00103 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00104 ITK_COORDINATE_ORIENTATION_LIA = ( ITK_COORDINATE_Left 00105 << ITK_COORDINATE_PrimaryMinor ) 00106 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00107 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00108 ITK_COORDINATE_ORIENTATION_RSA = ( ITK_COORDINATE_Right 00109 << ITK_COORDINATE_PrimaryMinor ) 00110 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00111 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00112 ITK_COORDINATE_ORIENTATION_LSA = ( ITK_COORDINATE_Left 00113 << ITK_COORDINATE_PrimaryMinor ) 00114 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00115 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00116 00117 ITK_COORDINATE_ORIENTATION_IRP = ( ITK_COORDINATE_Inferior 00118 << ITK_COORDINATE_PrimaryMinor ) 00119 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00120 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00121 ITK_COORDINATE_ORIENTATION_ILP = ( ITK_COORDINATE_Inferior 00122 << ITK_COORDINATE_PrimaryMinor ) 00123 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00124 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00125 ITK_COORDINATE_ORIENTATION_SRP = ( ITK_COORDINATE_Superior 00126 << ITK_COORDINATE_PrimaryMinor ) 00127 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00128 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00129 ITK_COORDINATE_ORIENTATION_SLP = ( ITK_COORDINATE_Superior 00130 << ITK_COORDINATE_PrimaryMinor ) 00131 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00132 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_TertiaryMinor ), 00133 ITK_COORDINATE_ORIENTATION_IRA = ( ITK_COORDINATE_Inferior 00134 << ITK_COORDINATE_PrimaryMinor ) 00135 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00136 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00137 ITK_COORDINATE_ORIENTATION_ILA = ( ITK_COORDINATE_Inferior 00138 << ITK_COORDINATE_PrimaryMinor ) 00139 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00140 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00141 ITK_COORDINATE_ORIENTATION_SRA = ( ITK_COORDINATE_Superior 00142 << ITK_COORDINATE_PrimaryMinor ) 00143 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00144 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00145 ITK_COORDINATE_ORIENTATION_SLA = ( ITK_COORDINATE_Superior 00146 << ITK_COORDINATE_PrimaryMinor ) 00147 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00148 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_TertiaryMinor ), 00149 00150 ITK_COORDINATE_ORIENTATION_RPI = ( ITK_COORDINATE_Right 00151 << ITK_COORDINATE_PrimaryMinor ) 00152 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00153 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00154 ITK_COORDINATE_ORIENTATION_LPI = ( ITK_COORDINATE_Left 00155 << ITK_COORDINATE_PrimaryMinor ) 00156 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00157 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00158 ITK_COORDINATE_ORIENTATION_RAI = ( ITK_COORDINATE_Right 00159 << ITK_COORDINATE_PrimaryMinor ) 00160 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00161 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00162 ITK_COORDINATE_ORIENTATION_LAI = ( ITK_COORDINATE_Left 00163 << ITK_COORDINATE_PrimaryMinor ) 00164 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00165 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00166 ITK_COORDINATE_ORIENTATION_RPS = ( ITK_COORDINATE_Right 00167 << ITK_COORDINATE_PrimaryMinor ) 00168 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00169 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00170 ITK_COORDINATE_ORIENTATION_LPS = ( ITK_COORDINATE_Left 00171 << ITK_COORDINATE_PrimaryMinor ) 00172 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00173 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00174 ITK_COORDINATE_ORIENTATION_RAS = ( ITK_COORDINATE_Right 00175 << ITK_COORDINATE_PrimaryMinor ) 00176 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00177 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00178 ITK_COORDINATE_ORIENTATION_LAS = ( ITK_COORDINATE_Left 00179 << ITK_COORDINATE_PrimaryMinor ) 00180 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00181 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00182 00183 ITK_COORDINATE_ORIENTATION_PRI = ( ITK_COORDINATE_Posterior 00184 << ITK_COORDINATE_PrimaryMinor ) 00185 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00186 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00187 ITK_COORDINATE_ORIENTATION_PLI = ( ITK_COORDINATE_Posterior 00188 << ITK_COORDINATE_PrimaryMinor ) 00189 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00190 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00191 ITK_COORDINATE_ORIENTATION_ARI = ( ITK_COORDINATE_Anterior 00192 << ITK_COORDINATE_PrimaryMinor ) 00193 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00194 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00195 ITK_COORDINATE_ORIENTATION_ALI = ( ITK_COORDINATE_Anterior 00196 << ITK_COORDINATE_PrimaryMinor ) 00197 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00198 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_TertiaryMinor ), 00199 ITK_COORDINATE_ORIENTATION_PRS = ( ITK_COORDINATE_Posterior 00200 << ITK_COORDINATE_PrimaryMinor ) 00201 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00202 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00203 ITK_COORDINATE_ORIENTATION_PLS = ( ITK_COORDINATE_Posterior 00204 << ITK_COORDINATE_PrimaryMinor ) 00205 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00206 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00207 ITK_COORDINATE_ORIENTATION_ARS = ( ITK_COORDINATE_Anterior 00208 << ITK_COORDINATE_PrimaryMinor ) 00209 + ( ITK_COORDINATE_Right << ITK_COORDINATE_SecondaryMinor ) 00210 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00211 ITK_COORDINATE_ORIENTATION_ALS = ( ITK_COORDINATE_Anterior 00212 << ITK_COORDINATE_PrimaryMinor ) 00213 + ( ITK_COORDINATE_Left << ITK_COORDINATE_SecondaryMinor ) 00214 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_TertiaryMinor ), 00215 00216 ITK_COORDINATE_ORIENTATION_IPR = ( ITK_COORDINATE_Inferior 00217 << ITK_COORDINATE_PrimaryMinor ) 00218 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00219 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00220 ITK_COORDINATE_ORIENTATION_SPR = ( ITK_COORDINATE_Superior 00221 << ITK_COORDINATE_PrimaryMinor ) 00222 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00223 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00224 ITK_COORDINATE_ORIENTATION_IAR = ( ITK_COORDINATE_Inferior 00225 << ITK_COORDINATE_PrimaryMinor ) 00226 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00227 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00228 ITK_COORDINATE_ORIENTATION_SAR = ( ITK_COORDINATE_Superior 00229 << ITK_COORDINATE_PrimaryMinor ) 00230 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00231 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00232 ITK_COORDINATE_ORIENTATION_IPL = ( ITK_COORDINATE_Inferior 00233 << ITK_COORDINATE_PrimaryMinor ) 00234 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00235 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00236 ITK_COORDINATE_ORIENTATION_SPL = ( ITK_COORDINATE_Superior 00237 << ITK_COORDINATE_PrimaryMinor ) 00238 + ( ITK_COORDINATE_Posterior << ITK_COORDINATE_SecondaryMinor ) 00239 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00240 ITK_COORDINATE_ORIENTATION_IAL = ( ITK_COORDINATE_Inferior 00241 << ITK_COORDINATE_PrimaryMinor ) 00242 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00243 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00244 ITK_COORDINATE_ORIENTATION_SAL = ( ITK_COORDINATE_Superior 00245 << ITK_COORDINATE_PrimaryMinor ) 00246 + ( ITK_COORDINATE_Anterior << ITK_COORDINATE_SecondaryMinor ) 00247 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00248 00249 ITK_COORDINATE_ORIENTATION_PIR = ( ITK_COORDINATE_Posterior 00250 << ITK_COORDINATE_PrimaryMinor ) 00251 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00252 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00253 ITK_COORDINATE_ORIENTATION_PSR = ( ITK_COORDINATE_Posterior 00254 << ITK_COORDINATE_PrimaryMinor ) 00255 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00256 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00257 ITK_COORDINATE_ORIENTATION_AIR = ( ITK_COORDINATE_Anterior 00258 << ITK_COORDINATE_PrimaryMinor ) 00259 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00260 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00261 ITK_COORDINATE_ORIENTATION_ASR = ( ITK_COORDINATE_Anterior 00262 << ITK_COORDINATE_PrimaryMinor ) 00263 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00264 + ( ITK_COORDINATE_Right << ITK_COORDINATE_TertiaryMinor ), 00265 ITK_COORDINATE_ORIENTATION_PIL = ( ITK_COORDINATE_Posterior 00266 << ITK_COORDINATE_PrimaryMinor ) 00267 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00268 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00269 ITK_COORDINATE_ORIENTATION_PSL = ( ITK_COORDINATE_Posterior 00270 << ITK_COORDINATE_PrimaryMinor ) 00271 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00272 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00273 ITK_COORDINATE_ORIENTATION_AIL = ( ITK_COORDINATE_Anterior 00274 << ITK_COORDINATE_PrimaryMinor ) 00275 + ( ITK_COORDINATE_Inferior << ITK_COORDINATE_SecondaryMinor ) 00276 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ), 00277 ITK_COORDINATE_ORIENTATION_ASL = ( ITK_COORDINATE_Anterior 00278 << ITK_COORDINATE_PrimaryMinor ) 00279 + ( ITK_COORDINATE_Superior << ITK_COORDINATE_SecondaryMinor ) 00280 + ( ITK_COORDINATE_Left << ITK_COORDINATE_TertiaryMinor ) 00281 } ValidCoordinateOrientationFlags; 00282 // ^^^ 00283 // ||| 00284 // ||\Sequential indexes are separated by (planes=rows*columns) memory 00285 // locations 00286 // |\Sequential indexes are separated by rows memory locations (sweep out 00287 // a plane) 00288 // \Sequential indexes are adjacent memory locations (sweep out a row) 00289 00290 #ifndef __TEMPORARILY_INCLUDED_IN_COMPILATIONS__ 00291 typedef enum { 00293 /* is Inferior Right Posterior */ 00294 00296 /* is Inferior Right Anterior */ 00297 00299 /* is Inferior Left Posterior */ 00300 00302 /* is Inferior Left Anterior */ 00303 00305 /* is Superior Right Posterior */ 00306 00308 /* is Superior Right Anterior */ 00309 00311 /* is Superior Left Posterior */ 00312 00314 /* is Superior Left Anterior */ 00315 } ValidOriginFlags; 00316 #endif 00317 } // end of namespace SpatialOrientation 00318 } // end namespace itk 00319 00320 #endif 00321