gusucode.com > vision工具箱matlab源码程序 > vision/cameraCalibrationErrors.m

    classdef cameraCalibrationErrors
% cameraCalibrationErrors Object for storing standard errors of estimated camera parameters    
%
%   cameraCalibrationErrors methods:
%   displayErrors - Print standard errors of camera parameters estimates
%
%   cameraCalibrationErrors properties:
%   IntrinsicsErrors - Standard errors of estimated camera intrinsics and 
%                      distortion coefficients
%   ExtrinsicsErrors - Standard errors of estimated camera extrinsics
%
% Example - Display single camera calibration errors
% --------------------------------------------
% % Create a set of calibration images.
% images = imageDatastore(fullfile(toolboxdir('vision'), 'visiondata', ...
%    'calibration', 'fishEye'));
%  
% % Detect calibration pattern.
% [imagePoints, boardSize] = detectCheckerboardPoints(images.Files);
%  
% % Generate world coordinates of the corners of the squares.
% squareSize = 29; % in millimeters
% worldPoints = generateCheckerboardPoints(boardSize, squareSize);
%  
% % Calibrate the camera.
% [params, ~, errors] = estimateCameraParameters(imagePoints, worldPoints);
%
% % Display the standard errors.
% displayErrors(errors, params);
%
% See also cameraParameters, cameraCalibrator, estimateCameraParameters,
%   intrinsicsEstimationErrors, extrinsicsEstimationErrors

%   Copyright 2013 MathWorks, Inc.

% References:
% [1] Draper, Norman R., and Smith, Harry. Applied Regression Analysis, 
% Third Edition. New York: Wiley-Interscience, 1998.
%
% [2] Seber, G.A.F., and Wild, C.J. Nonlinear Regression, 
% New York: Wiley-Interscience, 2003.
  
    properties(GetAccess=public, SetAccess=private)
        % IntrinsicsErrors A cameraCalibrationIntrinsicsErrors object 
        %   containing the standard error of the estimated camera intrinsics
        %   and distortion coefficients.
        IntrinsicsErrors;
        
        % ExtrinsicsErrors A cameraCalibrationExtrinsicsErrors object 
        %   containing the standard error for the estimated camera rotations
        %   and translations relative to the calibration pattern.
        ExtrinsicsErrors;
    end
    
    properties (Access=private, Hidden)
        Version = ver('vision');
    end
    
    methods
        function this = cameraCalibrationErrors(errors)
            this.IntrinsicsErrors = intrinsicsEstimationErrors(errors);
            this.ExtrinsicsErrors = extrinsicsEstimationErrors(errors);
        end
        
        %------------------------------------------------------------------
        function displayErrors(this, cameraParams)
            % displayErrors Print standard errors of camera parameters estimates
            %
            %  displayErrors(estimationErrors, cameraParams) prints the values
            %  of camera parameters together with the corresponding standard 
            %  errors to the screen. estimationErrors is a cameraCalibrationErrors 
            %  object. cameraParams is a cameraParameters object.
            
            checkDisplayErrorsInputs(this, cameraParams);
            
            displayMainHeading();
            
            % Intrinsics
            displayIntrinsicsHeading();           
            displayErrors(this.IntrinsicsErrors, cameraParams);
            
            % Extrinsics
            displayExtrinsicsHeading();            
            displayErrors(this.ExtrinsicsErrors, cameraParams);
        end
    end
    
    methods(Access=private)
        %------------------------------------------------------------------
        function checkDisplayErrorsInputs(this, cameraParams)
            
            checkCameraParamsDataType(this, cameraParams);
            checkSkew(this, cameraParams);
            checkRadialDistortion(this, cameraParams);
            checkTangentialDistortion(this, cameraParams);                                                
        end
        
        %------------------------------------------------------------------
        function checkCameraParamsDataType(~, cameraParams)
            % Check data type
            validateattributes(cameraParams, {'cameraParameters'}, {}, ...
                'displayErrors', 'cameraParams');
        end
        
        %------------------------------------------------------------------
        function checkSkew(this, cameraParams)
            if ~cameraParams.EstimateSkew && this.IntrinsicsErrors.SkewError ~= 0
                error(message(...
                    'vision:cameraCalibrationErrors:errorsParametersMismatch'));
            end
        end
        
        %------------------------------------------------------------------
        function checkRadialDistortion(this, cameraParams)
            % Check that the number of radial distortion coefficients is the
            % same as the number of radial distortion errors
            if cameraParams.NumRadialDistortionCoefficients ~= ...
                    numel(this.IntrinsicsErrors.RadialDistortionError)
                
                error(message(...
                    'vision:cameraCalibrationErrors:errorsParametersMismatch'));
            end
        end
        
        %------------------------------------------------------------------
        function checkTangentialDistortion(this, cameraParams)
            % Check that if tangential distortion is not estimated,
            % tangential distortion errors are set to 0
            if ~cameraParams.EstimateTangentialDistortion && ...
                    any(this.IntrinsicsErrors.TangentialDistortionError ~= 0)
                 error(message(...
                    'vision:cameraCalibrationErrors:errorsParametersMismatch'));
            end
        end
            
    end
    
    %----------------------------------------------------------------------
    % saveobj and loadobj are implemented to ensure compatibility across
    % releases even if architecture of this class changes
    methods (Hidden)
        
        function that = saveobj(this)
            % version
            that.version = this.Version;
            
            % intrinsics
            that.skew = this.IntrinsicsErrors.SkewError;
            that.focalLength = this.IntrinsicsErrors.FocalLengthError;
            that.principalPoint = this.IntrinsicsErrors.PrincipalPointError;
            that.radialDistortion = this.IntrinsicsErrors.RadialDistortionError;
            that.tangentialDistortion = this.IntrinsicsErrors.TangentialDistortionError;
           
            % extrinsics
            that.rotationVectors = this.ExtrinsicsErrors.RotationVectorsError;
            that.translationVectors = this.ExtrinsicsErrors.TranslationVectorsError;
        end
        
    end
    
    %----------------------------------------------------------------------
    methods (Static, Hidden)
        
        function this = loadobj(that)            
            this = cameraCalibrationErrors(that);
            this.Version = that.version;            
        end
        
    end
end

%--------------------------------------------------------------------------
function displayMainHeading()
headingFormat = '\n\t\t\t%s\n\t\t\t%s\n';
mainHeading = vision.getMessage(...
    'vision:cameraCalibrationErrors:singleCameraHeading');
headingUnderline = getUnderlineString(mainHeading);
fprintf(headingFormat, mainHeading, headingUnderline);
end

%--------------------------------------------------------------------------
function displayIntrinsicsHeading()
heading = vision.getMessage('vision:cameraCalibrationErrors:intrinsicsHeading');
fprintf('\n%s\n%s\n', heading, getUnderlineString(heading));
end

%--------------------------------------------------------------------------
function displayExtrinsicsHeading()
heading = vision.getMessage('vision:cameraCalibrationErrors:extrinsicsHeading');
fprintf('\n%s\n%s\n', heading, getUnderlineString(heading));
end

%--------------------------------------------------------------------------
function underline = getUnderlineString(header)
underline = repmat('-', [1, numel(header)]);
end