Undistortion.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:  Undistortion.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 "Undistortion.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 CUndistortion::CUndistortionMapper
00060 // ****************************************************************************
00061 
00062 void CUndistortion::CUndistortionMapper::Init(const CCalibration *pCalibration)
00063 {
00064         m_pCalibration = pCalibration;
00065         ComputeMap(m_pCalibration->GetCameraParameters().width, m_pCalibration->GetCameraParameters().height);
00066 }
00067 
00068 void CUndistortion::CUndistortionMapper::ComputeOriginalCoordinates(const Vec2d &newCoordinates, Vec2d &originalCoordinates)
00069 {
00070         m_pCalibration->DistortImageCoordinates(newCoordinates, originalCoordinates);
00071 }
00072 
00073 
00074 
00075 // ****************************************************************************
00076 // Constructor / Destructor
00077 // ****************************************************************************
00078 
00079 CUndistortion::CUndistortion(bool bInterpolate)
00080 {
00081         m_pStereoCalibration = new CStereoCalibration();
00082         m_pCalibration = new CCalibration();
00083 
00084         m_pUndistortionMapperLeft = new CUndistortionMapper(bInterpolate);
00085         m_pUndistortionMapperRight = new CUndistortionMapper(bInterpolate);
00086 }
00087 
00088 CUndistortion::~CUndistortion()
00089 {
00090         delete m_pStereoCalibration;
00091         delete m_pCalibration;
00092 
00093         delete m_pUndistortionMapperLeft;
00094         delete m_pUndistortionMapperRight;
00095 }
00096 
00097 
00098 // ****************************************************************************
00099 // Methods
00100 // ****************************************************************************
00101 
00102 int CUndistortion::Init(const char *pCameraParameterFileName)
00103 {
00104         if (m_pStereoCalibration->LoadCameraParameters(pCameraParameterFileName))
00105         {
00106                 // stereo calibration
00107                 m_pCalibrationLeft = m_pStereoCalibration->GetLeftCalibration();
00108                 m_pCalibrationRight = m_pStereoCalibration->GetRightCalibration();
00109 
00110                 UpdateMaps();
00111 
00112                 return 2;
00113         }
00114         else
00115         {
00116                 // not a stereo calibration
00117                 if (m_pCalibration->LoadCameraParameters(pCameraParameterFileName))
00118                 {
00119                         m_pCalibrationLeft = m_pCalibration;
00120                         m_pCalibrationRight = 0;
00121 
00122                         UpdateMaps();
00123                         
00124                         return 1;
00125                 }
00126         }
00127 
00128         return 0;
00129 }
00130 
00131 void CUndistortion::Init(const CCalibration *pCalibration)
00132 {
00133         m_pCalibrationLeft = pCalibration;
00134         m_pCalibrationRight = 0;
00135 
00136         UpdateMaps();
00137 }
00138 
00139 void CUndistortion::Init(const CStereoCalibration *pStereoCalibration)
00140 {
00141         m_pCalibrationLeft = pStereoCalibration->GetLeftCalibration();
00142         m_pCalibrationRight = pStereoCalibration->GetRightCalibration();
00143 
00144         UpdateMaps();
00145 }
00146 
00147 void CUndistortion::UpdateMaps()
00148 {
00149         if (!m_pCalibrationLeft && !m_pCalibrationRight)
00150         {
00151                 printf("error: CUndistortion object has not been initialized for CUndistortion::UpdateMaps\n");
00152                 return;
00153         }
00154         
00155         if (m_pCalibrationLeft)
00156                 m_pUndistortionMapperLeft->Init(m_pCalibrationLeft);
00157         
00158         if (m_pCalibrationRight)
00159                 m_pUndistortionMapperRight->Init(m_pCalibrationRight);
00160 }
00161 
00162 
00163 void CUndistortion::Undistort(const CByteImage *pInputImage, CByteImage *pOutputImage)
00164 {
00165         m_pUndistortionMapperLeft->PerformMapping(pInputImage, pOutputImage);
00166 }
00167 
00168 
00169 void CUndistortion::Undistort(const CByteImage * const *ppInputImages, CByteImage **ppOutputImages)
00170 {
00171         m_pUndistortionMapperLeft->PerformMapping(ppInputImages[0], ppOutputImages[0]);
00172         m_pUndistortionMapperRight->PerformMapping(ppInputImages[1], ppOutputImages[1]);
00173 }


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