AT_BD


| HOME | BACK |

Overview

AT_BD is a class specially designed to handle Aerial Triangulation (AT) computation using Bundle Block Adjustment, and Bundle Block Adjustment with Self Calibration.  The mathematic model used in the adjustment is Collinearity condition.  This is by far the

most accurate mathematic model used in AT.  All parameters are determined simultaneously by least squares technique.  The mathematic model is non-linear, however, no approximate values of parameters are required from users.

Duplicated point IDs are allowed in the list of photo coordinates, in the list of ground control coordinates and in the list of GPS coordinates.  Each point in the list is considered as an individual observation.  However, unlike AT_2D and AT_3D, single points (point that not tie to any point and not a ground control point) are not permitted in the AT_BD adjustment.

Important Note:

-       Inside Noobeed, the expected unit of Photo coordinate is Millimeter and the unit of Ground coordinate is Meter.

-       The Focal length of each photo has to be known before performing an adjustment, either by setting at the block level, by using the Lfunction FOCAL to set for the default value, or by input it individually in the photo coordinate observation file, by giving the focal length next to the Photo number.

-       In a very rare situation when the calculation does not converge, due to poor estimations of parameters, the user might want to provide a set of approximate parameter (EOP) values in an external file.  This is particular useful when doing a camera calibration and the calculation cannot be made converged.

-       To provide an external approximate value of EOP file, please set L-function "fapprox" to the filename that stores approximate values of EOP.  This is an ASCII file and its format can be seen in class function "fapprox".

-       To let the program determine approximate values of parameters automatically, set the "fapprox" string to a null string, "".

-       Please note that, almost all the time, the automatic determination of approximate parameters, determined inside the function, are good enough to bring the calculation converged, even in big tilted photos, if the A.T. adjustment is a normal one, i.e. not with self calibration. 

-       Thus, due to an observing fact that A.T. without self calibration is almost always converge, but A.T. with self calibration may or may not converge, we may want to separate a camera calibration process into 2 steps.  First perform A.T. as normal, then use the values of the EOP parameters from the result as approximate values for a second AT with self calibration.  In this way, we can make sure that the calculation always converges.

-       We do not recommend to use pixel unit as the unit of the photo coordinate, for this could distort the real world physical model in some case, leading to a divergent of AT solution.  Please always try to stay with the true physical unit for both photo coordinate and ground coordinate.

Noobeed bundle block adjustment program can handle a block of photos that have different values of camera focal length.  In fact each individual photo can have its own focal length, or use the default focal length if omitted.

A user can control the number of iterations by setting the maximum number at which the computation terminates.  However, computation may stop before reaching the maximum number of iterations, if a preset required accuracy is achieved. 

In practice, it is not common that a block adjustment can achieve a good result at the first run, due to human error and large amount of data.  There will be always some editing in data files, and it can be done very easy in Noobeed, by putting a slash sign, "/", in front of a record to turn them into a comment record.  Individual standard deviation can be always put at the end of an observation at will, though a default value is given when omitted.  The results from an adjustment are neat and easy to understand. 

Note:

-       Noobeed does not realy want the user to input photo scale number NUMSCALE0 or flying height Z0, because in the approximation process, the photo scale can be determined using ground control points.  Noobeed then uses the photo scale to determine the approximation of flying height (Z0).  Therefore if the user wants to feed these information into Noobeed, it is recommended to define Z0 rather than NUMSCALE0, or input nothing and leave the job for Noobeed.

-       Unless the approximation of Z0 is defined, otherwise, it will works like this.  NUMSCALE0 is used for the purpose of estimating the approximation of Z0, by multiplying with the given focal length (FOCAL).  However since Noobeed thinks of Focal length UNIT as MILLIMETER and Ground coordinate as METER, therefore, the ACTION in Noobeed is *** the NUMSCALE0 will be divided by 1000 *** so that the Z0 will have a correct unit, i.e. in METER.

-       In a situation that photo coordinate and ground coordinate have the same unit, or the ground coordinate unit is not as  three time as the photo coordinate unit, then this action is irrelevant.  However, still Noobeed will go ahead divide NUMSCALE0 with 1000.  Therefore, to get thing correct, the user SHOULD multiply the NUMSCALE0 with a relevant number (e.g. 1000 in case of the same unit) before entering into Noobeed. For example, in case of the same unit, if the scale number is 275 then you must define NUMSCALE0 as 275000.

 

Member data

Name

Data type

Meaning

focal

double

focal length of photo (this will help estimate initial values of parameters)

no_iterate

int

no of maximum iteration

numscale0

double

photo scale number (this will help estimate initial values of parameters)

z0

double

flying height (this will help estimate initial values of parameters)

fapprox

String

file name containing approx. parameters (EOP)

sd_gcp

double

standard deviation of ground control coordinate

sd_xpyp

double

standard deviation of photo / image rectangular coordinate

 

Operator

no operator provided

 

Construction function

{AT_BD} ret  =  AT_BD()

Example:

->block_3 = AT_BD()

 

Lfunction

object.FOCAL()       =  {double} left-value

object.NO_ITERATE()  =  {int} left-value

object.NUMSCALE0()   =  {double} left-value

object.Z0()          =  {double} left-value

object.FAPPROX()     =  {String} left-value

object.SD_GCP()      =  {double} left-value

object.SD_XPYP()     =  {double} left-value

Example:

->block_3.sd_gcp() = 0.50

->block_3.sd_xpyp() = 0.030

->block_3.numscale0() = 50000

 

Class function

 ADJUST

 ADJUSTGPS

FOCAL

 FAPPROX

 

 LOADGCP

 LOADGPS

LOADOBS

 NO_ITERATE

 

NUMSCALE0

SD_GCP

SD_XPYP

SELFCALIB

Z0

 


| HOME | BACK |