Rectification.cpp
Go to the documentation of this file.
00001 // ****************************************************************************
00002 // This file is part of the Integrating Vision Toolkit (IVT).
00003 //
00004 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT)
00005 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de).
00006 //
00007 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT).
00008 // All rights reserved.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are met:
00012 //
00013 // 1. Redistributions of source code must retain the above copyright
00014 //    notice, this list of conditions and the following disclaimer.
00015 //
00016 // 2. Redistributions in binary form must reproduce the above copyright
00017 //    notice, this list of conditions and the following disclaimer in the
00018 //    documentation and/or other materials provided with the distribution.
00019 //
00020 // 3. Neither the name of the KIT nor the names of its contributors may be
00021 //    used to endorse or promote products derived from this software
00022 //    without specific prior written permission.
00023 //
00024 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY
00025 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY
00028 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00029 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00031 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00033 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034 // ****************************************************************************
00035 // ****************************************************************************
00036 // Filename:  Rectification.cpp
00037 // Author:    Pedram Azad
00038 // Date:      04.10.2008
00039 // ****************************************************************************
00040 
00041 
00042 // ****************************************************************************
00043 // Includes
00044 // ****************************************************************************
00045 
00046 #include <new> // for explicitly using correct new/delete operators on VC DSPs
00047 
00048 #include "Rectification.h"
00049 
00050 #include "Image/ByteImage.h"
00051 #include "Calibration/Calibration.h"
00052 #include "Calibration/StereoCalibration.h"
00053 
00054 #include <stdio.h>
00055 
00056 
00057 
00058 // ****************************************************************************
00059 // class CRectification::CRectificationMapper
00060 // ****************************************************************************
00061 
00062 void CRectification::CRectificationMapper::Init(const Mat3d &homography, const CCalibration *pCalibration)
00063 {
00064         m_pCalibration = pCalibration;
00065         Math3d::SetMat(m_homography, homography);
00066 
00067         ComputeMap(m_pCalibration->GetCameraParameters().width, m_pCalibration->GetCameraParameters().height);
00068 }
00069 
00070 void CRectification::CRectificationMapper::ComputeOriginalCoordinates(const Vec2d &newCoordinates, Vec2d &originalCoordinates)
00071 {
00072         Math2d::ApplyHomography(m_homography, newCoordinates, originalCoordinates);
00073 
00074         if (m_bUndistort)
00075         {
00076                 // this is not a bug to distort; mapping needs inverse function!
00077                 m_pCalibration->DistortImageCoordinates(originalCoordinates, originalCoordinates);
00078         }
00079 }
00080 
00081 
00082 
00083 // ****************************************************************************
00084 // Constructor / Destructor
00085 // ****************************************************************************
00086 
00087 CRectification::CRectification(bool bInterpolate, bool bUndistort)
00088 {
00089         m_pStereoCalibration = new CStereoCalibration();
00090         m_pUsedStereoCalibration = 0;
00091 
00092         m_pRectificationMapperLeft = new CRectificationMapper(bInterpolate, bUndistort);
00093         m_pRectificationMapperRight = new CRectificationMapper(bInterpolate, bUndistort);
00094 }
00095 
00096 CRectification::~CRectification()
00097 {
00098         delete m_pStereoCalibration;
00099 
00100         delete m_pRectificationMapperLeft;
00101         delete m_pRectificationMapperRight;
00102 }
00103 
00104 
00105 // ****************************************************************************
00106 // methods
00107 // ****************************************************************************
00108 
00109 bool CRectification::Init(const char *pCameraParameterFileName)
00110 {
00111         if (m_pStereoCalibration->LoadCameraParameters(pCameraParameterFileName))
00112         {
00113                 m_pUsedStereoCalibration = m_pStereoCalibration;
00114 
00115                 UpdateMaps();
00116 
00117                 return true;
00118         }
00119         
00120         return false;
00121 }
00122 
00123 void CRectification::Init(const CStereoCalibration *pStereoCalibration)
00124 {
00125         m_pUsedStereoCalibration = pStereoCalibration;
00126 
00127         UpdateMaps();
00128 }
00129 
00130 
00131 void CRectification::UpdateMaps()
00132 {
00133         if (!m_pUsedStereoCalibration)
00134         {
00135                 printf("error: CRectification object has not been initialized for CRectification::UpdateMaps\n");
00136                 return;
00137         }
00138         
00139         m_pRectificationMapperLeft->Init(m_pUsedStereoCalibration->rectificationHomographyLeft, m_pUsedStereoCalibration->GetLeftCalibration());
00140         m_pRectificationMapperRight->Init(m_pUsedStereoCalibration->rectificationHomographyRight, m_pUsedStereoCalibration->GetRightCalibration());
00141 }
00142 
00143 void CRectification::Rectify(const CByteImage * const *ppInputImages, CByteImage **ppOutputImages)
00144 {
00145         m_pRectificationMapperLeft->PerformMapping(ppInputImages[0], ppOutputImages[0]);
00146         m_pRectificationMapperRight->PerformMapping(ppInputImages[1], ppOutputImages[1]);
00147 }


asr_ivt
Author(s): Allgeyer Tobias, Hutmacher Robin, Kleinert Daniel, Meißner Pascal, Scholz Jonas, Stöckle Patrick
autogenerated on Thu Jun 6 2019 21:46:58