triclops3d.h
Go to the documentation of this file.
00001 /**************************************************************************************************
00002  Software License Agreement (BSD License)
00003 
00004  Copyright (c) 2011-2013, LAR toolkit developers - University of Aveiro - http://lars.mec.ua.pt
00005  All rights reserved.
00006 
00007  Redistribution and use in source and binary forms, with or without modification, are permitted
00008  provided that the following conditions are met:
00009 
00010   *Redistributions of source code must retain the above copyright notice, this list of
00011    conditions and the following disclaimer.
00012   *Redistributions in binary form must reproduce the above copyright notice, this list of
00013    conditions and the following disclaimer in the documentation and/or other materials provided
00014    with the distribution.
00015   *Neither the name of the University of Aveiro nor the names of its contributors may be used to
00016    endorse or promote products derived from this software without specific prior written permission.
00017  
00018  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
00019  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
00020  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
00021  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00022  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
00024  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00025  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 ***************************************************************************************************/
00032 //=============================================================================
00033 // Copyright © 2004 Point Grey Research, Inc. All Rights Reserved.
00034 // 
00035 // This software is the confidential and proprietary information of Point
00036 // Grey Research, Inc. ("Confidential Information").  You shall not
00037 // disclose such Confidential Information and shall use it only in
00038 // accordance with the terms of the license agreement you entered into
00039 // with Point Grey Research, Inc. (PGR).
00040 // 
00041 // PGR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
00042 // SOFTWARE, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
00043 // IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
00044 // PURPOSE, OR NON-INFRINGEMENT. PGR SHALL NOT BE LIABLE FOR ANY DAMAGES
00045 // SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
00046 // THIS SOFTWARE OR ITS DERIVATIVES.
00047 //
00048 //=============================================================================
00049 //=============================================================================
00050 // $Id: triclops3d.h,v 2.2 2007/11/30 00:43:03 soowei Exp $
00051 //=============================================================================
00052 #ifndef TRICLOPS3D_H
00053 #define TRICLOPS3D_H
00054 
00055 //=============================================================================
00056 //
00057 // This file defines the API for 3D extraction and manipulation for the
00058 // Triclops Stereo Vision SDK.
00059 //
00060 //=============================================================================
00061 
00062 
00063 //=============================================================================
00064 // Defines
00065 //=============================================================================
00066 
00067 //=============================================================================
00068 // System Includes  
00069 //=============================================================================
00070 
00071 #include <triclops.h>
00072 
00073 #ifdef __cplusplus
00074 extern "C"
00075 {
00076 #endif
00077    
00078 //=============================================================================
00079 // Macros  
00080 //=============================================================================
00081 
00082 
00083 //=============================================================================
00084 // Enumerations  
00085 //=============================================================================
00086 
00087 //=============================================================================
00088 // Types 
00089 //=============================================================================
00090 //
00091 // Group = Types 
00092 
00093 //
00094 // Name: TriclopsPoint3d
00095 //
00096 // Description:
00097 //  This structure defines a single 3d pixel.  It is only used in the 
00098 //  TriclopsImage3d structure.
00099 //
00100 typedef struct TriclopsPoint3d
00101 {
00102    // The 3 values for the (x,y,z) point in order x = 0, y = 1, z = 2.
00103    float point[3];
00104    
00105 } TriclopsPoint3d;
00106 
00107 //
00108 // Name: TriclopsImage3d
00109 //
00110 // Description:
00111 //  This structure defines the format of an image consisting of 3d points.
00112 //
00113 typedef struct TriclopsImage3d
00114 {
00115    // The number of rows in the image. 
00116    int nrows;
00117    // The number of columns in the image. 
00118    int ncols;
00119    // The number of bytes between the beginning of a row and the beginning
00120    // of the following row
00121    int rowinc;
00122    // The area for the pixel data.  This must be numRows * numCols bytes 
00123    // large. 
00124    TriclopsPoint3d*     points; 
00125    
00126 } TriclopsImage3d;
00127 
00128 //
00129 // Name: TriclopsTransform 
00130 //
00131 // Description: 
00132 //  A transformation matrix.
00133 //
00134 //
00135 typedef struct 
00136 {
00137    double       matrix[4][4];
00138 
00139 } TriclopsTransform;
00140 
00141 //=============================================================================
00142 // Function Prototypes  
00143 //=============================================================================
00144 //
00145 // Group = 3D
00146 
00147 //
00148 // Name: triclopsRCDToXYZ
00149 //
00150 // Synopsis:
00151 //  Converts image coordinates with disparity values that have been mapped 
00152 //  using the disparity mapping function into true 3D points.
00153 //
00154 // Input:
00155 //  context - The stereo context.
00156 //  row     - The row of the input pixel.
00157 //  col     - The column of the input pixel.
00158 //  disp    - The disparity value of the input pixel.   
00159 //
00160 // Output:
00161 //  x - The x coordinate of the point represented by the input row column 
00162 //      disparity in the camera coordinate system.
00163 //  y - The y coordinate of the point represented by the input row column
00164 //      disparity in the camera coordinate system.
00165 //  z - The z coordinate of the point represented by the input row
00166 //      column disparity in the camera coordinate system.
00167 //
00168 // Returns:
00169 //  TriclopsErrorOk  - The operation succeeded.
00170 //  InvalidContext   - The input context was invalid.   
00171 //
00172 // Description:
00173 //  This function takes disparity values that have been scaled by the disparity 
00174 //  mapping feature.  
00175 //
00176 // Remarks:
00177 //  If you do not have the disparity mapping values set to 
00178 //  the same as the disparity values, you should use this function.  However, 
00179 //  it is less efficient than the other XYZ conversion functions and may have 
00180 //  some round-off errors.  It is preferable to set the disparity mapping range 
00181 //  to the same as the disparity range and use one of the other conversion 
00182 //  functions.
00183 //
00184 //  It is up to the user to supply valid pixel locations.  Pixels that have 
00185 //  been invalidated may give negative results.
00186 // 
00187 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00188 //  way, users can step through a disparity image calling this function
00189 //  and passing image disparity values straight in with no changes.
00190 //
00191 // See Also:
00192 //  triclopsRCDFloatToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ()
00193 //
00194 TriclopsError
00195 triclopsRCDToXYZ( TriclopsContext       context,
00196                   float                 row, 
00197                   float                 col, 
00198                   float                 disp,
00199                   float*                x,  
00200                   float*                y,  
00201                   float*                z );
00202 
00203 //
00204 // Name: triclopsRCDMappedToXYZ
00205 //
00206 // Synopsis:
00207 //  Converts image coordinates with disparity values that have been mapped 
00208 //  using the disparity mapping function into true 3D points.
00209 //
00210 // Input:
00211 //  context - The stereo context.
00212 //  row     - The row of the input pixel.
00213 //  col     - The column of the input pixel.
00214 //  disp    - The disparity value of the input pixel.   
00215 //
00216 // Output:
00217 //  x - The x coordinate of the point represented by the input row
00218 //      column disparity in the camera coordinate system.
00219 //  y - The y coordinate of the point represented by the input row
00220 //      column disparity in the camera coordinate system.
00221 //  z - The z coordinate of the point represented by the input row 
00222 //      column disparity in the camera coordinate system.
00223 //
00224 // Returns:
00225 //  TriclopsErrorOk             - The operation succeeded.
00226 //  InvalidContext - The input context was invalid.
00227 //
00228 // Description:
00229 //  This function takes disparity values that have been scaled by the disparity 
00230 //  mapping feature.
00231 //
00232 // Remarks:
00233 //  If you do not have the disparity mapping values set to the same as the
00234 //  disparity values, you should use this function.  However, it is less
00235 //  efficient than the other XYZ conversion functions and may have some
00236 //  round-off errors.  It is preferable to set the disparity mapping range
00237 //  to the same as the disparity range and use one of the other conversion 
00238 //  functions.
00239 //
00240 //  It is up to the user to supply valid pixel locations.  Pixels that have
00241 //  been invalidated may give negative results.
00242 //
00243 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00244 //  way, users can step through a disparity image calling this function
00245 //  and passing image disparity values straight in with no changes.
00246 //
00247 // See Also:
00248 //  triclopsRCDFloatToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ()
00249 //
00250 TriclopsError
00251 triclopsRCDMappedToXYZ( TriclopsContext context, 
00252                         int             row, 
00253                         int             col, 
00254                         unsigned char   disp,
00255                         float*          x, 
00256                         float*          y, 
00257                         float*          z );
00258 
00259 //
00260 // Name: triclopsRCDFloatToXYZ
00261 //
00262 // Synopsis:
00263 //  Converts image coordinates and a floating-point disparity value into true 
00264 //  3D points.
00265 //
00266 // Input:
00267 //  context - The stereo context.
00268 //  row     - The row of the input pixel.
00269 //  col     - The column of the input pixel.
00270 //  disp    - The disparity value of the input pixel.   
00271 //
00272 // Output:
00273 //  x - The x coordinate of the point represented by the input row
00274 //      column disparity in the camera coordinate system.
00275 //  y - The y coordinate of the point represented by the input row
00276 //      column disparity in the camera coordinate system.
00277 //  z - The z coordinate of the point represented by the input row 
00278 //      column disparity in the camera coordinate system.
00279 //
00280 // Returns:
00281 //  TriclopsErrorOk  - The operation succeeded.
00282 //  InvalidContext   - The input context was invalid.   
00283 //
00284 // Description:
00285 //  This function takes a floating-point disparity value and converts it to 
00286 //  XYZ coordinates.
00287 //
00288 // Remarks:
00289 //  It is up to the user to supply valid pixel locations.  Pixels which 
00290 //  have been invalidated may give negative results.
00291 //
00292 //  Disparity offset MUST be applied to input disp values, if offset != 0,
00293 //  in order to produce valid XYZ values.
00294 //
00295 // See Also:
00296 //  triclopsRCDMappedToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ(),
00297 //  triclopsGetDisparityOffset()
00298 //
00299 TriclopsError
00300 triclopsRCDFloatToXYZ( TriclopsContext  context, 
00301                        float            row, 
00302                        float            col, 
00303                        float            disp,
00304                        float*           x, 
00305                        float*           y, 
00306                        float*           z );
00307 
00308 //
00309 // Name: triclopsRCD8ToXYZ
00310 //
00311 // Synopsis:
00312 //  Converts image coordinates and an *-bit disparity into true 3D points.
00313 //
00314 // Input:
00315 //  context - The stereo context.
00316 //  row     - The row of the input pixel.
00317 //  col     - The column of the input pixel.
00318 //  disp    - The disparity value of the input pixel.   
00319 //
00320 // Output:
00321 //  x - The x coordinate of the point represented by the input row
00322 //      column disparity in the camera coordinate system.
00323 //  y - The y coordinate of the point represented by the input row
00324 //      column disparity in the camera coordinate system.
00325 //  z - The z coordinate of the point represented by the input row 
00326 //      column disparity in the camera coordinate system.
00327 //
00328 // Returns:
00329 //  TriclopsErrorOk             - The operation succeeded.
00330 //  InvalidContext - The input context was invalid.     
00331 //
00332 // Description:
00333 //  When using this function, you should ensure that the values for the 
00334 //  Triclops disparity mapping feature are the same as the disparity range.
00335 //
00336 // Remarks:
00337 //  It is up to the user to supply valid pixel locations.  Pixels that have
00338 //  been invalidated may give negative results.
00339 //
00340 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00341 //  way, users can step through a disparity image calling this function
00342 //  and passing image disparity values straight in with no changes.
00343 //
00344 // See Also:
00345 //  triclopsRCDFloatToXYZ(), triclopsRCDMappedToXYZ(), triclopsRCD16ToXYZ(), 
00346 //  triclopsSetDisparity(), triclopsSetDisparityMapping(), 
00347 //  triclopsGetDisparityOffset()
00348 //
00349 TriclopsError
00350 triclopsRCD8ToXYZ( TriclopsContext      context, 
00351                    int                  row, 
00352                    int                  col, 
00353                    unsigned char        disp,
00354                    float*               x, 
00355                    float*               y, 
00356                    float*               z );
00357 
00358 //
00359 // Name: triclopsRCD16ToXYZ
00360 //
00361 // Synopsis:
00362 //  Converts image coordinates and a 16-bit disparity into true 3D points.
00363 //
00364 // Input:
00365 //  context - The stereo context.
00366 //  row     - The row of the input pixel.
00367 //  col     - The column of the input pixel.
00368 //  disp    - The disparity value of the input pixel.   
00369 //
00370 // Output:
00371 //  x - The x coordinate of the point represented by the input 
00372 //      row column disparity in the camera coordinate system.
00373 //  y - The y coordinate of the point represented by the input 
00374 //      row column disparity in the camera coordinate system.
00375 //  z - The z coordinate of the point represented by the input 
00376 //      row column disparity in the camera coordinate system.
00377 //
00378 // Returns:
00379 //  TriclopsErrorOk             - The operation succeeded.
00380 //  InvalidContext - The input context was invalid.     
00381 //
00382 // Description:
00383 //  When using this function, you should ensure that the values for the 
00384 //  Triclops disparity mapping feature are the same as the disparity range.
00385 //
00386 // Remarks:
00387 //  It is up to the user to supply valid pixel locations.  Pixels that have
00388 //  been invalidated may give negative results.
00389 //
00390 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00391 //  way, users can step through a disparity image calling this function
00392 //  and passing image disparity values straight in with no changes.
00393 //
00394 // See Also:
00395 //  triclopsRCDFloatToXYZ(), triclopsRCDMappedToXYZ(), triclopsRCD8ToXYZ(), 
00396 //  triclopsSetDisparity(), triclopsSetDisparityMapping()
00397 //  triclopsGetDisparityOffset()
00398 //
00399 //
00400 TriclopsError
00401 triclopsRCD16ToXYZ( TriclopsContext     context, 
00402                     int                 row, 
00403                     int                 col, 
00404                     unsigned short      disp,
00405                     float*              x, 
00406                     float*              y, 
00407                     float*              z );
00408 
00409 //
00410 // Name: triclopsXYZToRCD
00411 //
00412 // Synopsis:
00413 //  Converts true 3D points into image coordinates. 
00414 //
00415 // Input:
00416 //  context - TriclopsContext set up for desired resolution.
00417 //  x       - X value of a point in the Triclops coordinate system.
00418 //  y       - Y value of a point in the Triclops coordinate system.
00419 //  z       - Z value of a point in the Triclops coordinate system.
00420 //
00421 // Output:
00422 //  row  - The row in a disparity image.
00423 //  col  - The column in a disparity image.
00424 //  disp - The disparity value that would match the point specified in XYZ.
00425 //
00426 // Returns:
00427 //  TriclopsErrorOk              - The Operation succeeded.
00428 //  TriclopsErrorInvalidContext  - Context is not valid TriclopsContext.
00429 //  TriclopsErrorInvalidRequest  - An impossible XYZ value has been provided
00430 //                                 (ie: negative Z).
00431 //
00432 // Description:
00433 //  This function takes as input the XYZ position of a point in the Triclops 
00434 //  coordinate system, and determines what row, column, and disparity value 
00435 //  would result from a sensed point at XYZ.
00436 //
00437 TriclopsError
00438 triclopsXYZToRCD( TriclopsContext context,
00439                   float           x,   
00440                   float           y,   
00441                   float           z,
00442                   float*          row, 
00443                   float*          col, 
00444                   float*          disp );
00445 
00446 //
00447 // Name: triclopsRCDToWorldXYZ
00448 //
00449 // Synopsis:
00450 //  Converts image coordinates and disparity values to world 3D points.
00451 //
00452 // Input:
00453 //  context - The stereo context.
00454 //  row     - The row of the input pixel.
00455 //  col     - The column of the input pixel.
00456 //  disp    - The disparity value of the input pixel.   
00457 //
00458 // Output:
00459 //  x - The x coordinate of the corresponding 3D point in the world
00460 //      coordinate system
00461 //  y - The y coordinate of the corresponding 3D point in the world
00462 //      coordinate system
00463 //  z - The z coordinate of the corresponding 3D point in the world
00464 //      coordinate system
00465 //
00466 // Returns:
00467 //  TriclopsErrorOk             - The operation succeeded.
00468 //  InvalidContext - The input context was invalid.     
00469 //
00470 // Description:
00471 //  This function takes a pixel location and matching disparity value and
00472 //  calculates the 3D position that this combination represents.  The 
00473 //  position is calculated in the "world" coordinate system.  That is to say,
00474 //  the position is calculated in the Triclops coordinate system and then
00475 //  transformed by the TriclopsContext transform to a new coordinate system.
00476 //
00477 // Remarks: 
00478 //  It is up to the user to supply valid disparity values.  Values
00479 //  taken from invalid pixels in the disparity image give negative 
00480 //  results.
00481 //
00482 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00483 //  way, users can step through a disparity image calling this function
00484 //  and passing image disparity values straight in with no changes.
00485 //
00486 // See Also:
00487 //  triclopsRCDFloatToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ(),
00488 //  triclopsRCDFloatToWorldXYZ(), triclopsRCD8ToWorldXYZ(), 
00489 //  triclopsRCD16ToWorldXYZ(), triclopsSetTriclopsToWorldTransform(), 
00490 //  triclopsGetTriclopsToWorldTransform(),  triclopsGetDisparityOffset()
00491 //
00492 TriclopsError
00493 triclopsRCDToWorldXYZ( TriclopsContext  context,
00494                        float            row, 
00495                        float            col, 
00496                        float            disp,
00497                        float*           x,  
00498                        float*           y,  
00499                        float*           z );
00500 
00501 //
00502 // Name: triclopsRCDMappedToWorldXYZ
00503 //
00504 // Synopsis:
00505 //  Converts image coordinates with disparity values that have been mapped 
00506 //  using the disparity mapping function into world 3D points.
00507 //
00508 // Input:
00509 //  context - The stereo context.
00510 //  row     - The row of the input pixel.
00511 //  col     - The column of the input pixel.
00512 //  disp    - The disparity value of the input pixel.   
00513 //
00514 // Output:
00515 //  x - The x coordinate of the point represented by the input row
00516 //      column disparity in the camera coordinate system.
00517 //  y - The y coordinate of the point represented by the input row
00518 //      column disparity in the camera coordinate system.
00519 //  z - The z coordinate of the point represented by the input row 
00520 //      column disparity in the camera coordinate system.
00521 //
00522 // Returns:
00523 //  TriclopsErrorOk  - The operation succeeded.
00524 //  InvalidContext   - The input context was invalid.
00525 //
00526 // Description:
00527 //  This function takes disparity values that have been scaled by the 
00528 //  disparity mapping feature and transforms them into a "world"
00529 //  coordinate system based on the transform recorded in the TriclopsContext.
00530 // 
00531 // Remarks:
00532 //  If you have set "Disparity Mapping" on you should use this function.
00533 //  However, it is less efficient than the other XYZ conversion functions and 
00534 //  may have some round-off errors. It is preferable to set the disparity
00535 //  mapping off.
00536 //
00537 //  It is up to the user to supply valid disparity values, invalid
00538 //  disparity values (as taken from an invalid pixel in the a disparity
00539 //  image) may give negative results.
00540 //
00541 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00542 //  way, users can step through a disparity image calling this function
00543 //  and passing image disparity values straight in with no changes.
00544 //
00545 // See Also:
00546 //  triclopsRCDFloatToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ()
00547 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00548 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00549 //  triclopsSetTriclopsToWorldTransform(), triclopsGetTriclopsToWorldTransform()
00550 //  triclopsGetDisparityOffset()
00551 //
00552 TriclopsError
00553 triclopsRCDMappedToWorldXYZ( TriclopsContext    context, 
00554                              int                row, 
00555                              int                col, 
00556                              unsigned char      disp,
00557                              float*             x, 
00558                              float*             y, 
00559                              float*             z );
00560 
00561 //
00562 // Name: triclopsRCDFloatToWorldXYZ
00563 //
00564 // Synopsis:
00565 //  Converts an image location and a floating-point disparity value into a 
00566 //  world 3D point.
00567 //
00568 // Input:
00569 //  context - The stereo context.
00570 //  row     - The row of the input pixel.
00571 //  col     - The column of the input pixel.
00572 //  disp    - The disparity value of the input pixel.   
00573 //
00574 // Output:
00575 //  x - The x coordinate of the corresponding 3D point 
00576 //  y - The y coordinate of the corresponding 3D point
00577 //  z - The z coordinate of the corresponding 3D point
00578 //
00579 // Returns:
00580 //  TriclopsErrorOk             - The operation succeeded.
00581 //  InvalidContext - The input context was invalid.     
00582 //
00583 // Description:
00584 //  This function takes a floating-point disparity value and converts it to 
00585 //  XYZ coordinates in world coordinates.  
00586 //
00587 // Remarks:
00588 //  The world coordinates are determined by transforming the point from the 
00589 //  Triclops coordinate system to the world coordinate system based on the 
00590 //  TriclopsContext transform.
00591 //
00592 //  It is up to the user to supply valid disparity values.
00593 //
00594 //  Disparity offset MUST be applied to input disp values, if offset != 0,
00595 //  in order to produce valid XYZ values.
00596 //
00597 // See Also:
00598 //  triclopsRCDMappedToXYZ(), triclopsRCD8ToXYZ(), triclopsRCD16ToXYZ()
00599 //  triclopsRCDToWorldXYZ(), 
00600 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00601 //  triclopsSetTriclopsToWorldTransform(), triclopsGetTriclopsToWorldTransform()
00602 //  triclopsGetDisparityOffset()
00603 //
00604 TriclopsError
00605 triclopsRCDFloatToWorldXYZ( TriclopsContext     context, 
00606                             float               row, 
00607                             float               col, 
00608                             float               disp,
00609                             float*              x, 
00610                             float*              y, 
00611                             float*              z );
00612 
00613 //
00614 // Name: triclopsRCD8ToWorldXYZ
00615 //
00616 // Synopsis:
00617 //  Converts image coordinates and an 8-bit disparity into a world 3D point.
00618 //
00619 // Input:
00620 //  context - The stereo context.
00621 //  row     - The row of the input pixel.
00622 //  col     - The column of the input pixel.
00623 //  disp    - The disparity value of the input pixel.   
00624 //
00625 // Output:
00626 //  x - The x coordinate of the corresponding 3D point 
00627 //  y - The y coordinate of the corresponding 3D point
00628 //  z - The z coordinate of the corresponding 3D point
00629 //
00630 // Returns:
00631 //  TriclopsErrorOk             - The operation succeeded.
00632 //  InvalidContext - The input context was invalid.     
00633 //
00634 // Description:
00635 //  This function takes an 8-bit disparity value and converts it to 
00636 //  XYZ coordinates in world coordinates.  The world coordinates are determined
00637 //  by transforming the point from the Triclops coordinate system to the
00638 //  world coordinate system based on the TriclopsContext transform.
00639 //
00640 // Remarks:
00641 //  It is up to the user to supply valid disparity values 
00642 //
00643 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00644 //  way, users can step through a disparity image calling this function
00645 //  and passing image disparity values straight in with no changes.
00646 //
00647 // See Also:
00648 //  triclopsRCDFloatToXYZ(), triclopsRCDMappedToXYZ(), triclopsRCD16ToXYZ(), 
00649 //  triclopsSetDisparity(), triclopsSetDisparityMapping()
00650 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00651 //  triclopsRCD16ToWorldXYZ(), 
00652 //  triclopsSetTriclopsToWorldTransform(), triclopsGetTriclopsToWorldTransform()
00653 //  triclopsGetDisparityOffset()
00654 //
00655 TriclopsError
00656 triclopsRCD8ToWorldXYZ( TriclopsContext context, 
00657                         int             row, 
00658                         int             col, 
00659                         unsigned char   disp,
00660                         float*          x, 
00661                         float*          y, 
00662                         float*          z );
00663 
00664 //
00665 // Name: triclopsRCD16ToWorldXYZ
00666 //
00667 // Synopsis:
00668 //  Converts image coordinates and a 16-bit disparity into a world 3D point.
00669 //
00670 // Input:
00671 //  context - The stereo context.
00672 //  row     - The row of the input pixel.
00673 //  col     - The column of the input pixel.
00674 //  disp    - The disparity value of the input pixel.   
00675 //
00676 // Output:
00677 //  x - The x coordinate of the corresponding 3D point 
00678 //  y - The y coordinate of the corresponding 3D point
00679 //  z - The z coordinate of the corresponding 3D point
00680 //
00681 // Returns:
00682 //  TriclopsErrorOk             - The operation succeeded.
00683 //  InvalidContext - The input context was invalid.     
00684 //
00685 // Description:
00686 //  This function takes a 16-bit disparity value and converts it to 
00687 //  XYZ coordinates in world coordinates.  The world coordinates are determined
00688 //  by transforming the point from the Triclops coordinate system to the
00689 //  world coordinate system based on the TriclopsContext transform.
00690 //
00691 // Remarks: 
00692 //  It is up to the user to supply valid disparity values 
00693 //
00694 //  Disparity offset SHOULD NOT be applied to input disp values. In this 
00695 //  way, users can step through a disparity image calling this function
00696 //  and passing image disparity values straight in with no changes.
00697 //
00698 // See Also:
00699 //  triclopsRCDFloatToXYZ(), triclopsRCDMappedToXYZ(), triclopsRCD8ToXYZ(), 
00700 //  triclopsRCD16ToXYZ(),
00701 //  triclopsSetDisparity(), triclopsSetDisparityMapping()
00702 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00703 //  triclopsRCD8ToWorldXYZ(), 
00704 //  triclopsSetTriclopsToWorldTransform(), triclopsGetTriclopsToWorldTransform()
00705 //  triclopsGetDisparityOffset()
00706 //
00707 //
00708 TriclopsError
00709 triclopsRCD16ToWorldXYZ( TriclopsContext        context, 
00710                          int                    row, 
00711                          int                    col, 
00712                          unsigned short         disp,
00713                          float*                 x, 
00714                          float*                 y, 
00715                          float*                 z );
00716 
00717 //
00718 // Name: triclopsWorldXYZToRCD
00719 //
00720 // Synopsis:
00721 //  Converts world 3D points into image coordinates. 
00722 //
00723 // Input:
00724 //  context - TriclopsContext set up for desired resolution.
00725 //  x       - X value of a point in the World coordinate system.
00726 //  y       - Y value of a point in the World coordinate system.
00727 //  z       - Z value of a point in the World coordinate system.
00728 //
00729 // Output:
00730 //  row  - The row in a disparity image.
00731 //  col  - The column in a disparity image.
00732 //  disp - The disparity value that would match the point specified in XYZ.
00733 //
00734 // Returns:
00735 //  TriclopsErrorOk                          - The Operation succeeded.
00736 //  TriclopsErrorInvalidContext - Context is not valid TriclopsContext.
00737 //  TriclopsErrorInvalidRequest - An impossible XYZ value has been provided
00738 //                                (ie: negative Z).
00739 //
00740 // Description:
00741 //  This function takes as input the XYZ position of a point in the World 
00742 //  coordinate system, moves the point to the Triclops coordinate system 
00743 //  (as described by the TriclopsContext transform), and determines what 
00744 //  row, column, and disparity value would result from the resulting point.
00745 //
00746 // See Also:
00747 //  triclopsRCDFloatToXYZ(), triclopsRCDMappedToXYZ(), triclopsRCD8ToXYZ(), 
00748 //  triclopsSetDisparity(), triclopsSetDisparityMapping()
00749 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00750 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00751 //  triclopsXYZToRCD(),
00752 //  triclopsSetTriclopsToWorldTransform(), triclopsGetTriclopsToWorldTransform()
00753 //
00754 TriclopsError
00755 triclopsWorldXYZToRCD( TriclopsContext  context,
00756                        float            x,   
00757                        float            y,   
00758                        float            z,
00759                        float*           row, 
00760                        float*           col, 
00761                        float*           disp );
00762 
00763 //
00764 // Name: triclopsSetTriclopsToWorldTransform()
00765 //
00766 // Synopsis:
00767 //  Sets the Triclops to World transform.
00768 //
00769 // Input:
00770 //  context     - the TriclopsContext
00771 //  transform   - the 4x4 homogeneous transform
00772 //
00773 // Output:
00774 //  none
00775 //
00776 // Returns:
00777 //  TriclopsErrorOk                          - The Operation succeeded.
00778 //  TriclopsErrorInvalidContext - Context is not valid TriclopsContext.
00779 //  TriclopsErrorInvalidRequest - The provided transform matrix has
00780 //                                a singular rotation component 
00781 //                               
00782 // Description:
00783 //  This function sets the internal TriclopsContext transform to match the
00784 //  provided transform.  
00785 //
00786 // Remarks:
00787 //  There are several things to note:
00788 //
00789 //  1. The transform is the Triclops-to-World transform. ie: when this
00790 //  transform is applied to a Triclops point, it will change it to a world
00791 //  point.
00792 //
00793 //  2. The transform must be of the approved format.  This means it has a 3x3
00794 //  rotational component that is orthonormal and the bottom row must be of
00795 //  format (0 0 0 n).  This function will try to normalize the rotational
00796 //  component and clean up the bottom row of the matrix.  One can verify 
00797 //  whether modifications to the transform were necessary by obtaining the
00798 //  current transform using triclopsGetTriclopsToWorldTransform() and comparing.
00799 //
00800 // See Also:
00801 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00802 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00803 //  triclopsWorldXYZToRCD(), triclopsGetTriclopsToWorldTransform()
00804 //  triclopsGetTransformFromFile(), triclopsWriteTransformToFile()
00805 //
00806 TriclopsError
00807 triclopsSetTriclopsToWorldTransform( TriclopsContext    context, 
00808                                      TriclopsTransform  transform );
00809 
00810 //
00811 // Name: triclopsGetTriclopsToWorldTransform()
00812 //
00813 // Synopsis:
00814 //  Gets the Triclops to World transform.
00815 //
00816 // Input:
00817 //  context     - the TriclopsContext
00818 //
00819 // Output:
00820 //  transform   - the 4x4 homogeneous transform
00821 //
00822 // Returns:
00823 //  TriclopsErrorOk              - The Operation succeeded.
00824 //  TriclopsErrorInvalidContext  - Context is not valid TriclopsContext.
00825 //                               
00826 // Description:
00827 //  This function fills in the provided TriclopsTransform structure with the
00828 //  current contents of the Triclops to World transform for this 
00829 //  TriclopsContext
00830 //
00831 // See Also:
00832 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00833 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00834 //  triclopsWorldXYZToRCD(), triclopsSetTriclopsToWorldTransform()
00835 //  triclopsGetTransformFromFile(), triclopsWriteTransformToFile()
00836 //
00837 TriclopsError
00838 triclopsGetTriclopsToWorldTransform( TriclopsContext    context, 
00839                                      TriclopsTransform* transform );
00840 
00841 //
00842 // Name: triclopsGetTransformFromFile()
00843 //
00844 // Synopsis:
00845 //  Loads the contents of a TriclopsTransform from the input file.
00846 //
00847 // Input:
00848 //  fileName    - name of the file from which to load the transform
00849 //
00850 // Output:
00851 //  transform   - the 4x4 homogeneous transform
00852 //
00853 // Returns:
00854 //  TriclopsErrorOk                          - The Operation succeeded.
00855 //  CorruptTransformFile - either the file is not found or it contains invalid fields.
00856 //                               
00857 // Description:
00858 //  This function fills in the provided TriclopsTransform structure based on
00859 //  the contents read from the specified file.  If the specified file is not
00860 //  found, contains invalid fields, the value of CorruptTransformFile will be
00861 //  returned.  
00862 //
00863 // See Also:
00864 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00865 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00866 //  triclopsWorldXYZToRCD(), triclopsSetTriclopsToWorldTransform(),
00867 //  triclopsGetTriclopsToWorldTransform(), triclopsWriteTransformToFile
00868 //
00869 TriclopsError
00870 triclopsGetTransformFromFile( char*              fileName, 
00871                               TriclopsTransform* transform );
00872 
00873 //
00874 // Name: triclopsWriteTransformToFile()
00875 //
00876 // Synopsis:
00877 //  Saves the contents of a TriclopsTransform to the output file.
00878 //
00879 // Input:
00880 //  fileName    - name of the file to which to save the transform
00881 //  transform   - the 4x4 homogeneous transform to save
00882 //
00883 // Output:
00884 //
00885 // Returns:
00886 //  TriclopsErrorOk              - The Operation succeeded.
00887 //  TriclopsErrorInvalidContext  - Context is not valid TriclopsContext.
00888 //                               
00889 // Description:
00890 //  This function saves the contents of the specified transform to an
00891 //  external file. 
00892 //
00893 // See Also:
00894 //  triclopsRCDToWorldXYZ(), triclopsRCDFloatToWorldXYZ(), 
00895 //  triclopsRCD8ToWorldXYZ(), triclopsRCD16ToWorldXYZ(), 
00896 //  triclopsWorldXYZToRCD(), triclopsSetTriclopsToWorldTransform(),
00897 //  triclopsGetTriclopsToWorldTransform(), triclopsGetTransformFromFile
00898 //
00899 TriclopsError
00900 triclopsWriteTransformToFile( char*              fileName, 
00901                               TriclopsTransform* transform );
00902 
00903 //
00904 // Name: triclopsCreateImage3d
00905 //
00906 // Description:
00907 //  Allocates a TriclopsImage3d to the correct size as specified by
00908 //  the resolution of the TriclopsContext
00909 //
00910 // Input:
00911 //   context   - The current TriclopsContext.
00912 //   ppimage   - Pointer to the address of the TriclopsImage3d structure to
00913 //               allocate memory for.
00914 //
00915 // Returns:
00916 //  TriclopsErrorOk           - The operation succeeded.
00917 //  TriclopsErrorSystemError  - If there was a problem allocating the memory.
00918 //
00919 // See Also:
00920 //    triclopsDestroyImage3d(), triclopsExtractImage3d(), 
00921 //    triclopsExtractWorldImage3d()
00922 //
00923 TriclopsError  
00924 triclopsCreateImage3d( TriclopsContext   context,
00925                        TriclopsImage3d** ppimage );
00926 
00927 //
00928 // Name: triclopsDestroyImage3d
00929 //
00930 // Description:
00931 //  Deallocates a TriclopsImage3d allocated by triclopsCreateImage3d()
00932 //
00933 // Input:
00934 //   ppimage   - Pointer to the address of the TriclopsImage3d structure to
00935 //               destroy.
00936 //
00937 // See Also:
00938 //    triclopsCreateImage3d(), triclopsExtractImage3d(), 
00939 //    triclopsExtractWorldImage3d()
00940 //
00941 void  
00942 triclopsDestroyImage3d( TriclopsImage3d** ppimage );
00943 
00944 //
00945 // Name: triclopsExtractImage3d
00946 //
00947 // Description:
00948 //  Creates a 3D image given the current disparity result of a TriclopsContext
00949 //
00950 // Input:
00951 //   context   - The current TriclopsContext.
00952 //   pimage    - Pointer to the TriclopsImage3d structure.
00953 //
00954 // Returns:
00955 //  TriclopsErrorOk                 - The operation succeeded.
00956 //  TriclopsErrorInvalidContext     - If the context is invalid.
00957 //  TriclopsErrorInvalidParameter   - If there is a geometry mismatch between
00958 //                                    the context and the TriclopsImage3d.
00959 //  TriclopsErrorInvalidRequest     - If the (subpixel) disparity image does
00960 //                                    not match the current resolution.
00961 //
00962 // Remarks:
00963 //  Invalid points will be assigned the value of (0,0,0) in the returned image.
00964 //
00965 // See Also:
00966 //    triclopsDestroyImage3d(), triclopsCreateImage3d(), 
00967 //    triclopsExtractWorldImage3d()
00968 //
00969 TriclopsError  
00970 triclopsExtractImage3d( TriclopsContext  context,
00971                         TriclopsImage3d* pimage );
00972 
00973 //
00974 // Name: triclopsExtractWorldImage3d
00975 //
00976 // Description:
00977 //  Creates a 3D image given the current disparity result of a TriclopsContext
00978 //  that is transformed to the world coordinate system
00979 //
00980 // Input:
00981 //   context   - The current TriclopsContext.
00982 //   pimage    - Pointer to the TriclopsImage3d structure.
00983 //
00984 // Returns:
00985 //  TriclopsErrorOk                 - The operation succeeded.
00986 //  TriclopsErrorInvalidContext     - If the context is invalid.
00987 //  TriclopsErrorInvalidParameter   - If there is a geometry mismatch between
00988 //                                    the context and the TriclopsImage3d.
00989 //  TriclopsErrorInvalidRequest     - If the (subpixel) disparity image does
00990 //                                    not match the current resolution.
00991 //
00992 // Remarks:
00993 //  Invalid points will be assigned the value of (0,0,0) in the returned image.
00994 //
00995 // See Also:
00996 //    triclopsDestroyImage3d(), triclopsCreateImage3d(), 
00997 //    triclopsExtractImage3d()
00998 //
00999 TriclopsError  
01000 triclopsExtractWorldImage3d( TriclopsContext     context,
01001                              TriclopsImage3d*    pimage );
01002 
01003 
01004 #ifdef __cplusplus
01005 }
01006 #endif
01007 
01008 #endif  // #ifndef TRICLOPS3D_H


xb3
Author(s): Miguel Oliveira, Tiago Talhada
autogenerated on Thu Nov 20 2014 11:36:02