本文整理汇总了C++中Cube::camera方法的典型用法代码示例。如果您正苦于以下问题:C++ Cube::camera方法的具体用法?C++ Cube::camera怎么用?C++ Cube::camera使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Cube
的用法示例。
在下文中一共展示了Cube::camera方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setControlPointLatLon
/**
* Calculates the lat/lon of the ControlNet.
*
* @param incubes The filename of the list of cubes in the ControlNet
* @param cnet The filename of the ControlNet
*/
void setControlPointLatLon(SerialNumberList &snl, ControlNet &cnet) {
CubeManager manager;
manager.SetNumOpenCubes(50); //Should keep memory usage to around 1GB
Progress progress;
progress.SetText("Calculating Lat/Lon");
progress.SetMaximumSteps(cnet.GetNumPoints());
progress.CheckStatus();
for (int cp = 0; cp < cnet.GetNumPoints(); cp++) {
ControlPoint *point = cnet.GetPoint(cp);
ControlMeasure *cm = point->GetRefMeasure();
Cube *cube = manager.OpenCube(snl.FileName(cm->GetCubeSerialNumber()));
try {
cube->camera()->SetImage(cm->GetSample(), cm->GetLine());
g_surfacePoints[point->GetId()] = cube->camera()->GetSurfacePoint();
}
catch (IException &e) {
QString msg = "Unable to create camera for cube file [";
msg += snl.FileName(cm->GetCubeSerialNumber()) + "]";
throw IException(e, IException::Unknown, msg, _FILEINFO_);
}
cube = NULL; //Do not delete, manager still has ownership
progress.CheckStatus();
}
manager.CleanCubes();
}
示例2: LoadCameraRange
//Helper function to load camera range.
void LoadCameraRange() {
UserInterface &ui = Application::GetUserInterface();
QString file = ui.GetFileName("FROM");
// Get the map projection file provided by the user
Pvl userMap;
userMap.read(ui.GetFileName("MAP"));
// Open the input cube, get the camera object, and the cam map projection
Cube c;
c.open(file);
Camera *cam = c.camera();
// Make the target info match the user mapfile
double minrad, maxrad, minaz, maxaz;
cam->ringRange(minrad, maxrad, minaz, maxaz, userMap);
// Set ground range parameters in UI
ui.Clear("MINRINGRAD");
ui.PutDouble("MINRINGRAD", minrad);
ui.Clear("MAXRINGRAD");
ui.PutDouble("MAXRINGRAD", maxrad);
ui.Clear("MINRINGLON");
ui.PutDouble("MINRINGLON", minaz);
ui.Clear("MAXRINGLON");
ui.PutDouble("MAXRINGLON", maxaz);
// Set default ground range param to camera
ui.Clear("DEFAULTRANGE");
ui.PutAsString("DEFAULTRANGE", "CAMERA");
}
示例3: IsisMain
void IsisMain() {
// Set the input image, get the camera model
Process p;
Cube *icube = p.SetInputCube("FROM");
Camera *cam = icube->camera();
// Get the ra/dec range and resolution
double minRa, maxRa, minDec, maxDec;
cam->RaDecRange(minRa, maxRa, minDec, maxDec);
double res = cam->RaDecResolution();
// Get the center ra/dec
cam->SetImage(icube->sampleCount() / 2.0, icube->lineCount() / 2.0);
double centerRa = cam->RightAscension();
double centerDec = cam->Declination();
// Compute the rotation
cam->SetRightAscensionDeclination(centerRa, centerDec + 2.0 * res);
double x = cam->Sample() - icube->sampleCount() / 2.0;
double y = cam->Line() - icube->lineCount() / 2.0;
double rot = atan2(-y, x) * 180.0 / Isis::PI;
rot = 90.0 - rot;
if(rot < 0.0) rot += 360.0;
// Setup and log results
PvlGroup results("Range");
results += PvlKeyword("MinimumRightAscension", toString(minRa), "degrees");
results += PvlKeyword("MaximumRightAscension", toString(maxRa), "degrees");
results += PvlKeyword("MinimumDeclination", toString(minDec), "degrees");
results += PvlKeyword("MaximumDeclination", toString(maxDec), "degrees");
results += PvlKeyword("MinimumRightAscension", Projection::ToHMS(minRa), "hms");
results += PvlKeyword("MaximumRightAscension", Projection::ToHMS(maxRa), "hms");
results += PvlKeyword("MinimumDeclination", Projection::ToDMS(minDec), "dms");
results += PvlKeyword("MaximumDeclination", Projection::ToDMS(maxDec), "dms");
results += PvlKeyword("Resolution", toString(res), "degrees/pixel");
Application::Log(results);
// Setup and log orientation
PvlGroup orient("Orientation");
orient += PvlKeyword("CenterSample", toString(icube->sampleCount() / 2.0));
orient += PvlKeyword("CenterLine", toString(icube->lineCount() / 2.0));
orient += PvlKeyword("CenterRightAscension", toString(centerRa), "degrees");
orient += PvlKeyword("CenterDeclination", toString(centerDec), "degrees");
orient += PvlKeyword("CelestialNorthClockAngle", toString(rot), "degrees");
orient += PvlKeyword("Resolution", toString(res), "degrees/pixel");
Application::Log(orient);
// Write the output file if requested
UserInterface ui = Application::GetUserInterface();
if(ui.WasEntered("TO")) {
Pvl temp;
temp.addGroup(results);
temp.addGroup(orient);
temp.write(ui.GetFileName("TO", "txt"));
}
p.EndProcess();
}
示例4: IsisMain
void IsisMain() {
UserInterface &ui = Application::GetUserInterface();
try {
// Open the cube
Cube cube;
cube.open(ui.GetFileName("FROM"), "rw");
//check for existing polygon, if exists delete it
if(cube.label()->hasObject("Polygon")) {
cube.label()->deleteObject("Polygon");
}
// Get the camera, interpolate to a parabola
Camera *cam = cube.camera();
if(cam->DetectorMap()->LineRate() == 0.0) {
QString msg = "[" + ui.GetFileName("FROM") + "] is not a line scan camera";
throw IException(IException::User, msg, _FILEINFO_);
}
cam->instrumentRotation()->SetPolynomial();
// Get the instrument pointing keyword from the kernels group and update
// its value to table.
Isis::PvlGroup kernels =
cube.label()->findGroup("Kernels", Isis::Pvl::Traverse);
// Save original kernels in keyword before changing to "Table" in the kernels group
PvlKeyword origCk = kernels["InstrumentPointing"];
// Write out the "Table" label to the tabled kernels in the kernels group
kernels["InstrumentPointing"] = "Table";
// And finally write out the original kernels after Table
for (int i = 0; i < origCk.size(); i++) {
kernels["InstrumentPointing"].addValue(origCk[i]);
}
cube.putGroup(kernels);
// Pull out the pointing cache as a table and write it
Table cmatrix = cam->instrumentRotation()->Cache("InstrumentPointing");
cmatrix.Label().addComment("Smoothed using spicefit");
cube.write(cmatrix);
cube.close();
}
catch(IException &e) {
QString msg = "Unable to fit pointing for [" + ui.GetFileName("FROM") + "]";
throw IException(IException::User, msg, _FILEINFO_);
}
}
示例5: LoadInputSummingMode
// Helper function to get output summing mode from input cube (FROM)
void LoadInputSummingMode() {
UserInterface &ui = Application::GetUserInterface();
// Get camera from cube to match
QString file = ui.GetFileName("FROM");
// Open the input cube and get the camera object
Cube c;
c.open(file);
Camera *cam = c.camera();
ui.Clear("SUMMINGMODE");
ui.PutDouble("SUMMINGMODE", cam->DetectorMap()->SampleScaleFactor());
ui.Clear("SOURCE");
ui.PutAsString("SOURCE", "FROMUSER");
}
示例6: init
/**
* @brief Initializes an ISIS cube converting it into a SPICE segment
*
* This method is called to extract the perinent contents of an ISIS cube file
* and accumulate generic information that is used to create the output SPICE
* kernel segment. Other specific kernel types can use this class as its base
* class and add to it additional elements to complete the needed content for
* the NAIF kernel.
*
* @param cube ISIS cube file to accumulate information from
*/
void SpiceSegment::init(Cube &cube) {
_kernels.UnLoad(); // Unload all active, owned kernels
init(); // Init local variables
_fname = cube.fileName();
// Extract ISIS CK blob and transform to CK 3 content
NaifStatus::CheckErrors();
try {
// Order is somewhat important here. The call to initialize Kernels
// object checks the NAIF pool for existance. It logs their NAIF
// status as loaded which may cause trouble from here on...
Pvl *label = cube.label();
_kernels.Init(*label);
Camera *camera = cube.camera();
// Determine segment ID from product ID if it exists, otherwise basename
if ( _name.isEmpty() ) {
_name = getKeyValue(*label, "ProductId");
if (_name.isEmpty() ) {
_name = FileName(_fname).baseName();
}
}
// Get instrument and target ids
QString value("");
value = getKeyValue(*label, "InstrumentId");
if (!value.isEmpty()) { _instId = value; }
value = getKeyValue(*label, "TargetName");
if (!value.isEmpty()) { _target = value; }
// Get default times for sorting purposes
setStartTime(camera->cacheStartTime().Et());
setEndTime(camera->cacheEndTime().Et());
} catch ( IException &ie ) {
ostringstream mess;
mess << "Failed to construct Spice Segment basics from ISIS file " << _fname;
throw IException(ie, IException::User, mess.str(), _FILEINFO_);
}
return;
}
示例7: LoadCameraRes
//Helper function to get camera resolution.
void LoadCameraRes() {
UserInterface &ui = Application::GetUserInterface();
QString file = ui.GetFileName("FROM");
// Open the input cube, get the camera object, and the cam map projection
Cube c;
c.open(file);
Camera *cam = c.camera();
Pvl camMap;
cam->BasicMapping(camMap);
PvlGroup &camGrp = camMap.findGroup("Mapping");
ui.Clear("RESOLUTION");
ui.PutDouble("RESOLUTION", camGrp["PixelResolution"]);
ui.Clear("PIXRES");
ui.PutAsString("PIXRES", "MPP");
}
示例8: LoadMatchSummingMode
// Helper function to get output summing mode from cube to MATCH
void LoadMatchSummingMode() {
QString file;
UserInterface &ui = Application::GetUserInterface();
// Get camera from cube to match
if((ui.GetString("SOURCE") == "FROMMATCH") && (ui.WasEntered("MATCH"))) {
file = ui.GetFileName("MATCH");
}
else {
file = ui.GetFileName("FROM");
}
// Open the input cube and get the camera object
Cube c;
c.open(file);
Camera *cam = c.camera();
ui.Clear("SUMMINGMODE");
ui.PutDouble("SUMMINGMODE", cam->DetectorMap()->SampleScaleFactor());
ui.Clear("SOURCE");
ui.PutAsString("SOURCE", "FROMUSER");
}
示例9: IsisMain
void IsisMain() {
// We will be processing by line
ProcessByBrick p;
UserInterface &ui = Application::GetUserInterface();
// Use the def file for filter constants
Pvl uvvisDef("$clementine1/calibration/uvvis/uvvis.def");
// Setup the input and output cubes
Cube *icube = p.SetInputCube("FROM");
Cube *dccube;
if(ui.WasEntered("DCFILE")) {
dccube = p.SetInputCube("DCFILE");
}
else {
QString dcfileloc = "$clementine1/calibration/uvvis/";
dcfileloc += "dark_5_15_96.cub";
CubeAttributeInput cubeAtt;
dccube = p.SetInputCube(dcfileloc, cubeAtt);
}
QString filter = (QString)(icube->group("BandBin"))["FilterName"];
filter = filter.toLower();
Cube *ffcube;
if(ui.WasEntered("FFFILE")) {
ffcube = p.SetInputCube("FFFILE");
}
else {
// compute default fffile
double compressRatio = (icube->group("Instrument"))["EncodingCompressionRatio"];
// check to see if cube is compressed or uncompressed
if(compressRatio == 1.0) {
QString fffileLoc = "$clementine1/calibration/uvvis/";
fffileLoc += "lu" + filter + "_uncomp_flat_long.cub";
CubeAttributeInput cubeAtt;
ffcube = p.SetInputCube(fffileLoc, cubeAtt);
}
else {
QString fffileLoc = "$clementine1/calibration/uvvis/";
fffileLoc += "lu" + filter + "_comp_flat_long.cub";
CubeAttributeInput cubeAtt;
ffcube = p.SetInputCube(fffileLoc, cubeAtt);
}
}
Cube *ocube = p.SetOutputCube("TO");
avgFF = uvvisDef.findGroup("Filter" + filter.toUpper())["AVGFF"];
cr = uvvisDef.findGroup("Filter" + filter.toUpper())["CO"];
gain = uvvisDef.findGroup(QString("GainModeID") + QString(icube->group("Instrument")["GainModeID"][0]))["GAIN"];
useDcconst = ui.WasEntered("DCCONST");
if(useDcconst) {
dcconst = ui.GetDouble("DCCONST");
}
else {
dcconst = 0.0;
}
conv = ui.GetBoolean("CONV");
exposureDuration = icube->group("Instrument")["ExposureDuration"];
offsetModeID = icube->group("Instrument")["OffsetModeID"];
if(((QString)icube->group("Instrument")["FocalPlaneTemperature"]).compare("UNK") == 0) {
//if FocalPlaneTemp is unknown set it to zero
focalPlaneTemp = 0.0;
}
else {
focalPlaneTemp = icube->group("Instrument")["FocalPlaneTemperature"];
}
Camera *cam = icube->camera();
bool camSuccess = cam->SetImage(icube->sampleCount() / 2, icube->lineCount() / 2);
if(!camSuccess) {
throw IException(IException::Unknown, "Unable to calculate the Solar Distance for this cube.", _FILEINFO_);
}
dist = cam->SolarDistance();
// If temp. correction set to true, or focal plane temp is zero then use temperature correction
if(ui.GetBoolean("TCOR") || abs(focalPlaneTemp) <= DBL_EPSILON) {
// Temperature correction requires the use of the mission phase
// (PRELAUNCH, EARTH, LUNAR) and the product ID.
QString productID = (QString)(icube->group("Archive")["ProductID"]);
QChar missionPhase = ((QString)((icube->group("Archive"))["MissionPhase"])).at(0);
QString n1subQString(productID.mid(productID.indexOf('.') + 1, productID.length() - 1));
QString n2subQString(productID.mid(4, productID.indexOf('.') - 5));
int n1 = toInt(n1subQString);
int n2 = toInt(n2subQString);
int phase = 0;
if(missionPhase == 'L') {
phase = 0;
}
else if(missionPhase == 'E') {
phase = 1;
//.........这里部分代码省略.........
示例10: IsisMain
void IsisMain() {
// Open the match cube and get the camera model on it
ProcessRubberSheet m;
Cube *mcube = m.SetInputCube("MATCH");
Cube *ocube = m.SetOutputCube("TO");
// Set up the default reference band to the middle of the cube
// If we have even bands it will be close to the middle
int referenceBand = ocube->bandCount();
referenceBand += (referenceBand % 2);
referenceBand /= 2;
// See if the user wants to override the reference band
UserInterface &ui = Application::GetUserInterface();
if(ui.WasEntered("REFBAND")) {
referenceBand = ui.GetInteger("REFBAND");
}
// Using the Camera method out of the object opack will not work, because the
// filename required by the Camera is not passed by the process class in this
// case. Use the CameraFactory to create the Camera instead to get around this
// problem.
Camera *outcam = CameraFactory::Create(*(mcube->label()));
// Set the reference band we want to match
PvlGroup instgrp = mcube->group("Instrument");
if(!outcam->IsBandIndependent()) {
PvlKeyword rBand("ReferenceBand", toString(referenceBand));
rBand.addComment("# All bands are aligned to reference band");
instgrp += rBand;
mcube->putGroup(instgrp);
delete outcam;
outcam = NULL;
}
// Only recreate the output camera if it was band dependent
if(outcam == NULL) outcam = CameraFactory::Create(*(mcube->label()));
// We might need the instrument group later, so get a copy before clearing the input
// cubes.
m.ClearInputCubes();
Cube *icube = m.SetInputCube("FROM");
incam = icube->camera();
// Set up the transform object which will simply map
// output line/samps -> output lat/lons -> input line/samps
Transform *transform = new cam2cam(icube->sampleCount(),
icube->lineCount(),
incam,
ocube->sampleCount(),
ocube->lineCount(),
outcam);
// Add the reference band to the output if necessary
ocube->putGroup(instgrp);
// Set up the interpolator
Interpolator *interp = NULL;
if(ui.GetString("INTERP") == "NEARESTNEIGHBOR") {
interp = new Interpolator(Interpolator::NearestNeighborType);
}
else if(ui.GetString("INTERP") == "BILINEAR") {
interp = new Interpolator(Interpolator::BiLinearType);
}
else if(ui.GetString("INTERP") == "CUBICCONVOLUTION") {
interp = new Interpolator(Interpolator::CubicConvolutionType);
}
// See if we need to deal with band dependent camera models
if(!incam->IsBandIndependent()) {
m.BandChange(BandChange);
}
// Warp the cube
m.StartProcess(*transform, *interp);
m.EndProcess();
// Cleanup
delete transform;
delete interp;
}
示例11: RemoveSeam
//! This function corrects the DNs in a given brick.
//! It also stores results in frameletOffsetsForBand every time the
//! band changes so it doesn't have to re-project at every framelet.
//! Equivalent changes are calculated for the next framelet... that is,
//! equivalent pixels. This function both calculates and applies these.
void RemoveSeam(Buffer &out, int framelet, int band,
bool matchIsEven) {
// Apply fixes from last pass. Basically all changes happen in two
// places, because the DNs exist in two cubes, this is the second
// place.
for(int fix = 0; fix < nextFrameletFixes.size(); fix ++) {
QPair<int, int> fixLoc = nextFrameletFixes[fix].first;
double fixDn = nextFrameletFixes[fix].second;
try {
int outIndex = out.Index(fixLoc.first, fixLoc.second, band);
out[outIndex] = fixDn;
}
catch(IException &) {
}
}
nextFrameletFixes.clear();
// Match == goodData. "goodData" is the top of the next framelet.
Cube *goodDataCube = (matchIsEven) ? evenCube : oddCube;
// "badData" is the bottom of the current framelet, what we were given.
Cube *badDataCube = (matchIsEven) ? oddCube : evenCube;
Camera *goodCam = goodDataCube->camera();
Camera *badCam = badDataCube->camera();
// Verify we're at the correct band
goodCam->SetBand(band);
badCam->SetBand(band);
// Absolute line number for top of framelets.
int goodDataStart = frameletSize * (framelet + 1);
int badDataStart = frameletSize * framelet;
// Start corrections to the current brick at this line
int badLineStart = goodDataStart - overlapSize - 1;
// End corrections to the current brick at this line
int badLineEnd = goodDataStart - 1;
int offsetSample = 0;
int offsetLine = 0;
// Loop left to right, top to bottom of problematic area at bottom of framelet
for(int badLine = badLineStart; badLine <= badLineEnd; badLine ++) {
for(int sample = 1; sample <= out.SampleDimension(); sample ++) {
// A fair good data weight is the % across problematic area so fair
double goodDataWeight = (double)(badLine - badLineStart) /
(double)(badLineEnd - badLineStart);
// But good data is good, so let's bias it towards the good data
goodDataWeight *= 2;
if(goodDataWeight > 1) goodDataWeight = 1;
// Bad data weight is the inverse of the good data's weight.
double badDataWeight = 1.0 - goodDataWeight;
int outIndex = out.Index(sample, badLine, band);
// This is the indexing scheme for frameletOffsetsForBand
int optimizeIndex = (badLine - badLineStart) * out.SampleDimension() +
sample - 1;
// Does the optimized (pre-calculated) translation from bad to good
// exist?
if(optimizeIndex < frameletOffsetsForBand.size()) {
// This offset any good? If not then do nothing.
if(!frameletOffsetsForBand[optimizeIndex].Valid())
continue;
// Use optimization!
offsetSample = frameletOffsetsForBand[optimizeIndex].SampleOffset();
offsetLine = frameletOffsetsForBand[optimizeIndex].LineOffset();
ASSERT(frameletOffsetsForBand[optimizeIndex].Sample() == sample);
}
// There is no pre-calculated translation, calculate it
else if(badCam->SetImage(sample, badLine)) {
double lat = badCam->UniversalLatitude();
double lon = badCam->UniversalLongitude();
if(goodCam->SetUniversalGround(lat, lon)) {
double goodSample = goodCam->Sample();
double goodLine = goodCam->Line();
// Set the current offset for correction
offsetSample = (int)(goodSample - sample + 0.5);
offsetLine = (int)(goodLine - badLine + 0.5);
// Remember this calculation for future passes
frameletOffsetsForBand.push_back(Offset(sample, badLine - badDataStart,
offsetSample, offsetLine));
}
else {
// Don't do anything since we failed at this pixel; it will be copied
// from the input directly
//.........这里部分代码省略.........
示例12: IsisMain
/** The ISIS smtk main application */
void IsisMain() {
UserInterface &ui = Application::GetUserInterface();
// Open the first cube. It is the left hand image.
Cube lhImage;
CubeAttributeInput &attLeft = ui.GetInputAttribute("FROM");
vector<QString> bandLeft = attLeft.bands();
lhImage.setVirtualBands(bandLeft);
lhImage.open(ui.GetFileName("FROM"),"r");
// Open the second cube, it is geomertricallty altered. We will be matching the
// first to this one by attempting to compute a sample/line offsets
Cube rhImage;
CubeAttributeInput &attRight = ui.GetInputAttribute("MATCH");
vector<QString> bandRight = attRight.bands();
rhImage.setVirtualBands(bandRight);
rhImage.open(ui.GetFileName("MATCH"),"r");
// Ensure only single bands
if (lhImage.bandCount() != 1 || rhImage.bandCount() != 1) {
QString msg = "Input Cubes must have only one band!";
throw IException(IException::User,msg,_FILEINFO_);
}
// Both images must have a Camera and can also have a Projection. We will
// only deal with a Camera, however as a projected, non-mosaicked image
// uses a Projection internal to the Camera object.
Camera *lhCamera = NULL;
Camera *rhCamera = NULL;
try {
lhCamera = lhImage.camera();
rhCamera = rhImage.camera();
}
catch (IException &ie) {
QString msg = "Both input images must have a camera";
throw IException(ie, IException::User, msg, _FILEINFO_);
}
// Since we are generating a DEM, we must turn off any existing
// DEM that may have been initialized with spiceinit.
lhCamera->IgnoreElevationModel(true);
rhCamera->IgnoreElevationModel(true);
// Get serial number
QString serialLeft = SerialNumber::Compose(lhImage, true);
QString serialRight = SerialNumber::Compose(rhImage, true);
// This still precludes band to band registrations.
if (serialLeft == serialRight) {
QString sLeft = FileName(lhImage.fileName()).name();
QString sRight = FileName(rhImage.fileName()).name();
if (sLeft == sRight) {
QString msg = "Cube Serial Numbers must be unique - FROM=" + serialLeft +
", MATCH=" + serialRight;
throw IException(IException::User,msg,_FILEINFO_);
}
serialLeft = sLeft;
serialRight = sRight;
}
Progress prog;
prog.SetText("Finding Initial Seeds");
int nl = lhImage.lineCount();
int ns = lhImage.sampleCount();
BigInt numAttemptedInitialPoints = 0;
// Declare Gruen matcher
SmtkMatcher matcher(ui.GetFileName("REGDEF"), &lhImage, &rhImage);
// Get line/sample linc/sinc parameters
int space = ui.GetInteger("SPACE");
int linc (space), sinc(space);
// Do we have a seed points from a control net file?
bool useseed = ui.WasEntered("CNET");
// Base points on an input cnet
SmtkQStack gstack;
double lastEigen(0.0);
if (useseed) {
ControlNet cnet(ui.GetFileName("CNET"));
prog.SetMaximumSteps(cnet.GetNumPoints());
prog.CheckStatus();
gstack.reserve(cnet.GetNumPoints());
for (int cpIndex = 0; cpIndex < cnet.GetNumPoints(); cpIndex ++) {
ControlPoint *cp = cnet.GetPoint(cpIndex);
if (!cp->IsIgnored()) {
ControlMeasure *cmLeft(0), *cmRight(0);
for(int cmIndex = 0; cmIndex < cp->GetNumMeasures(); cmIndex ++) {
ControlMeasure *cm = cp->GetMeasure(cmIndex);
if (!cm->IsIgnored()) {
if (cm->GetCubeSerialNumber() == serialLeft)
cmLeft = cp->GetMeasure(cmIndex);
if (cm->GetCubeSerialNumber() == serialRight)
cmRight = cp->GetMeasure(cmIndex);
//.........这里部分代码省略.........
示例13: main
int main() {
Preference::Preferences(true);
QString inputFile = "$mgs/testData/ab102401.lev2.cub";
Cube cube;
cube.open(inputFile);
Camera *c = NULL;
c = cube.camera();
Pvl pvl = *cube.label();
MyCamera cam(cube);
double line = 453.0;
double sample = 534.0;
Latitude lat(18.221, Angle::Degrees);
Longitude lon(226.671, Angle::Degrees);
double ra = 347.016;
double dec = -51.2677;
cout << endl << "Camera* from: " << inputFile << endl;
QList<QPointF> ifovOffsets = c->PixelIfovOffsets();
cout << "Pixel Ifov: " << endl;
foreach (QPointF offset, ifovOffsets) {
cout << offset.x() << " , " << offset.y() << endl;
}
cout << "Line: " << line << ", Sample: " << sample << endl;
cout << "Lat: " << lat.degrees() << ", Lon: " << lon.degrees() << endl;
cout << "RightAscension: " << ra << ", Declination: " << dec << endl << endl;
cout << "SetImage (sample, line): " << c->SetImage(sample, line)
<< endl << endl;
cout << "NorthAzimuth: " << c->NorthAzimuth() << endl;
cout << "SunAzimuth: " << c->SunAzimuth() << endl;
cout << "SpacecraftAzimuth: " << c->SpacecraftAzimuth() << endl;
cout << "OffNadirAngle: " << c->OffNadirAngle() << endl << endl;
cout << "GroundAzimuth in North: " << c->GroundAzimuth(18.221, 226.671, 20.0, 230.0) << endl;
cout << "GroundAzimuth in North: " << c->GroundAzimuth(20.0, 226.671, 20.0, 230.0) << endl;
cout << "GroundAzimuth in North: " << c->GroundAzimuth(18.221, 355.0, 20.0, 6.671) << endl;
cout << "GroundAzimuth in North: " << c->GroundAzimuth(18.221, 6.671, 20.0, 355.0) << endl;
cout << "GroundAzimuth in North: " << c->GroundAzimuth(18.221, 6.671, 20.0, 6.671) << endl;
cout << "GroundAzimuth in South: " << c->GroundAzimuth(-18.221, 226.671, -20.0, 230.0) << endl;
cout << "GroundAzimuth in South: " << c->GroundAzimuth(-20.0, 226.671, -20.0, 230.0) << endl;
cout << "GroundAzimuth in South: " << c->GroundAzimuth(-18.221, 355.0, -20.0, 6.671) << endl;
cout << "GroundAzimuth in South: " << c->GroundAzimuth(-18.221, 6.671, -20.0, 355.0) << endl;
cout << "GroundAzimuth in South: " << c->GroundAzimuth(-18.221, 6.671, -20.0, 6.671) << endl << endl;
cout << "SetUniversalGround(lat, lon): "
<< c->SetGround(lat, lon) << endl;
cout << "SetRightAscensionDeclination(ra, dec): "
<< c->SetRightAscensionDeclination(ra, dec) << endl;
cout << "HasProjection: " << c->HasProjection() << endl;
cam.IsBandIndependent();
cout << "ReferenceBand: " << c->ReferenceBand() << endl;
cout << "HasReferenceBand: " << c->HasReferenceBand() << endl;
cam.SetBand(7);
cout << "Sample: " << setprecision(3) << c->Sample() << endl;
cout << "Line: " << setprecision(3) << c->Line() << endl;
try {
double lat = 0, lon = 0;
cout << "GroundRange: "
<< c->GroundRange(lat, lat, lon, lon, pvl) << endl;
cout << "IntersectsLongitudeDomain: "
<< c->IntersectsLongitudeDomain(pvl) << endl;
}
catch(IException &e) {
cout << "No mapping group found, so GroundRange and " << endl
<< "IntersectsLongitudeDomain cannot run." << endl;
}
cout << "PixelResolution: " << c->PixelResolution() << endl;
cout << "LineResolution: " << c->LineResolution() << endl;
cout << "SampleResolution: " << c->SampleResolution() << endl;
cout << "DetectorResolution: " << c->DetectorResolution() << endl;
cout << "LowestImageResolution: " << setprecision(4)
<< c->LowestImageResolution() << endl;
cout << "HighestImageResolution: " << setprecision(3)
<< c->HighestImageResolution() << endl;
cout << "Calling BasicMapping (pvl)..." << endl;
c->BasicMapping(pvl);
double pixRes2 = pvl.findGroup("Mapping")["PixelResolution"];
pixRes2 *= 10000000;
pixRes2 = round(pixRes2);
pixRes2 /= 10000000;
pvl.findGroup("Mapping")["PixelResolution"] = toString(pixRes2);
cout << "BasicMapping PVL: " << endl << pvl << endl << endl;
cout << "FocalLength: " << c->FocalLength() << endl;
cout << "PixelPitch: " << c->PixelPitch() << endl;
cout << "Samples: " << c->Samples() << endl;
cout << "Lines: " << c->Lines() << endl;
cout << "Bands: " << c->Bands() << endl;
cout << "ParentLines: " << c->ParentLines() << endl;
cout << "ParentSamples: " << c->ParentSamples() << endl;
try {
cout << c->RaDecRange(ra, ra, dec, dec) << endl;
}
//.........这里部分代码省略.........
示例14: IsisMain
//.........这里部分代码省略.........
namfrm_c(naifTarget.toAscii().data(), &frameCode);
if(frameCode == 0) {
QString msg = "Can not find NAIF code for [" + naifTarget + "]";
throw IException(IException::Io, msg, _FILEINFO_);
}
}
spRot = new SpiceRotation(frameCode);
//create a table from starttime to endtime (streched by 3%) with NODES entries
spRot->LoadCache(time0-0.015*(time1-time0), time1+0.015*(time1-time0), NODES);
Table tableTargetRot = spRot->Cache("BodyRotation");
tableTargetRot.Label() += PvlKeyword("Description", "Created by apollopaninit");
panCube.write(tableTargetRot);
//////////////////////////////////////////////////attach a sun position table
spPos = new SpicePosition(10,301); //Position of the sun (10) WRT to the MOON (301)
//create a table from starttime to endtime (stretched by 3%) with NODES entries
spPos->LoadCache(time0-0.015*(time1-time0), time1+0.015*(time1-time0), NODES);
Table tableSunPos = spPos->Cache("SunPosition");
tableSunPos.Label() += PvlKeyword("SpkTableStartTime", toString(time0-0.015*(time1-time0)));
tableSunPos.Label() += PvlKeyword("SpkTablleEndTime", toString(time1+0.015*(time1-time0)));
tableSunPos.Label() += PvlKeyword("Description", "Created by apollopaninit");
panCube.write(tableSunPos); //attach the table to the cube
/////////////Finding the principal scan line position and orientation
//get the radii of the MOON
SpiceInt tempRadii = 0;
bodvcd_c(301,"RADII",3,&tempRadii,R_MOON); //units are km
double omega,phi,kappa;
std::vector<double> posSel; //Seleno centric position
std::vector<double> sunPos; //sunPosition used to transform to J2000
std::vector<double> posJ20; //camera position in J2000
posSel.resize(3);
sunPos.resize(3);
posJ20.resize(3);
double temp,
vel[3] = { 0.0, 0.0, 0.0 }, //the total velocity vector (combined Horizonatal and normal components)
// in km/sec
M[3][3] = { { 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 } }, //rotation matrix
zDir[] = { 0.0, 0.0, 1.0 }, //selenographic Z axis
northPN[3] = { 0.0, 0.0, 0.0 }, //normal to the plane containing all the north/south directions,
// that is plane containing
// the origin, the z axis, and the primary point of intersection
northL[3] = { 0.0, 0.0, 0.0 }, //north direction vector in local horizontal plane
azm[3] = { 0.0, 0.0, 0.0 }, //azm direction of the veclocity vector in selenographic coordinates
azmP[3] = { 0.0, 0.0, 0.0 }, //azm rotated (partially) and projected into the image plane
norm[3] = { 0.0, 0.0, 0.0 }, //normal to the local horizontal plane
look[3] = { 0.0, 0.0, 0.0 }; //unit direction vector in the pincipal cameral look direction,
// parallel to the vector from the center of the moon through the spacecraft
double pos0[3] = { 0.0, 0.0, 0.0 }, //coordinate of the camera position
pInt[3] = { 0.0, 0.0, 0.0 }; //coordinate of the principle intersection point
/////////////////calculating the camera position for the center (principal scan line)
pos0[1] = ui.GetDouble("LON_NADIR")*deg2rad;
pos0[0] = ui.GetDouble("LAT_NADIR")*deg2rad;
pos0[2] = ui.GetDouble("CRAFT_ALTITUDE"); //units are km
Geographic2GeocentricLunar(pos0,pos0); //function is written so the input can also be the
// output
/////////////////////calculating the camera orientation for the center (principal) scan line
示例15: IsisMain
void IsisMain() {
Process p;
Cube *icube = p.SetInputCube("FROM");
Camera *cam = icube->camera();
UserInterface &ui = Application::GetUserInterface();
QString from = ui.GetFileName("FROM");
int sinc = ui.GetInteger("SINC");
int linc = ui.GetInteger("LINC");
CameraStatistics camStats(cam, sinc, linc, from);
// Send the Output to the log area
Pvl statsPvl = camStats.toPvl();
for (int i = 0; i < statsPvl.groups(); i++) {
Application::Log(statsPvl.group(i));
}
if(ui.WasEntered("TO")) {
QString outfile = FileName(ui.GetFileName("TO")).expanded();
bool exists = FileName(outfile).fileExists();
bool append = ui.GetBoolean("APPEND");
// If the user chose a format of PVL, then write to the output file ("TO")
if(ui.GetString("FORMAT") == "PVL") {
(append) ? statsPvl.append(outfile) : statsPvl.write(outfile);
}
else {
// Create a flatfile of the data with columhn headings the flatfile is
// comma-delimited and can be imported in to spreadsheets
ofstream os;
bool writeHeader = true;
if(append) {
os.open(outfile.toAscii().data(), ios::app);
if(exists) {
writeHeader = false;
}
}
else {
os.open(outfile.toAscii().data(), ios::out);
}
// if new file or append and no file exists then write header
if(writeHeader) {
os << "Filename," <<
"LatitudeMinimum," <<
"LatitudeMaximum," <<
"LatitudeAverage," <<
"LatitudeStandardDeviation," <<
"LongitudeMinimum," <<
"LongitudeMaximum," <<
"LongitudeAverage," <<
"LongitudeStandardDeviation," <<
"SampleResolutionMinimum," <<
"SampleResolutionMaximum," <<
"SampleResolutionAverage," <<
"SampleResolutionStandardDeviation," <<
"LineResolutionMinimum," <<
"LineResolutionMaximum," <<
"LineResolutionAverage," <<
"LineResolutionStandardDeviation," <<
"ResolutionMinimum," <<
"ResolutionMaximum," <<
"ResolutionAverage," <<
"ResolutionStandardDeviation," <<
"AspectRatioMinimum," <<
"AspectRatioMaximum," <<
"AspectRatioAverage," <<
"AspectRatioStandardDeviation," <<
"PhaseMinimum," <<
"PhaseMaximum," <<
"PhaseAverage," <<
"PhaseStandardDeviation," <<
"EmissionMinimum," <<
"EmissionMaximum," <<
"EmissionAverage," <<
"EmissionStandardDeviation," <<
"IncidenceMinimum," <<
"IncidenceMaximum," <<
"IncidenceAverage," <<
"IncidenceStandardDeviation," <<
"LocalSolarTimeMinimum," <<
"LocalSolarTimeMaximum," <<
"LocalSolarTimeAverage," <<
"LocalSolarTimeStandardDeviation," <<
"LocalRadiusMaximum," <<
"LocalRadiusMaximum," <<
"LocalRadiusAverage," <<
"LocalRadiusStandardDeviation," <<
"NorthAzimuthMinimum," <<
"NorthAzimuthMaximum," <<
"NorthAzimuthAverage," <<
"NorthAzimuthStandardDeviation," << endl;
}
os << FileName(from).expanded() << ",";
//call the function to write out the values for each group
writeFlat(os, camStats.getLatStat());
writeFlat(os, camStats.getLonStat());
writeFlat(os, camStats.getSampleResStat());
writeFlat(os, camStats.getLineResStat());
//.........这里部分代码省略.........