本文整理汇总了C++中ProcessByLine::Progress方法的典型用法代码示例。如果您正苦于以下问题:C++ ProcessByLine::Progress方法的具体用法?C++ ProcessByLine::Progress怎么用?C++ ProcessByLine::Progress使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProcessByLine
的用法示例。
在下文中一共展示了ProcessByLine::Progress方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fileLab
/**
* Set the output cube to specified file name and specified input images
* and output attributes and lat,lons
*/
Isis::Cube *ProcessMapMosaic::SetOutputCube(const QString &inputFile,
double xmin, double xmax, double ymin, double ymax,
double slat, double elat, double slon, double elon, int nbands,
CubeAttributeOutput &oAtt, const QString &mosaicFile) {
Pvl fileLab(inputFile);
PvlGroup &mapping = fileLab.findGroup("Mapping", Pvl::Traverse);
mapping["UpperLeftCornerX"] = toString(xmin);
mapping["UpperLeftCornerY"] = toString(ymax);
mapping.addKeyword(PvlKeyword("MinimumLatitude", toString(slat)), Pvl::Replace);
mapping.addKeyword(PvlKeyword("MaximumLatitude", toString(elat)), Pvl::Replace);
mapping.addKeyword(PvlKeyword("MinimumLongitude", toString(slon)), Pvl::Replace);
mapping.addKeyword(PvlKeyword("MaximumLongitude", toString(elon)), Pvl::Replace);
Projection *firstProj = ProjectionFactory::CreateFromCube(fileLab);
int samps = (int)(ceil(firstProj->ToWorldX(xmax) - firstProj->ToWorldX(xmin)) + 0.5);
int lines = (int)(ceil(firstProj->ToWorldY(ymin) - firstProj->ToWorldY(ymax)) + 0.5);
delete firstProj;
if (p_createMosaic) {
Pvl newMap;
newMap.addGroup(mapping);
// Initialize the mosaic
CubeAttributeInput inAtt;
ProcessByLine p;
p.SetInputCube(inputFile, inAtt);
p.PropagateHistory(false);
p.PropagateLabels(false);
p.PropagateTables(false);
p.PropagatePolygons(false);
p.PropagateOriginalLabel(false);
// If track set, create the origin band
if (GetTrackFlag()) {
nbands += 1;
}
// For average priority, get the new band count
else if (GetImageOverlay() == AverageImageWithMosaic) {
nbands *= 2;
}
Cube *ocube = p.SetOutputCube(mosaicFile, oAtt, samps, lines, nbands);
p.Progress()->SetText("Initializing mosaic");
p.ClearInputCubes();
p.StartProcess(ProcessMapMosaic::FillNull);
// CreateForCube created some keywords in the mapping group that needs to be added
ocube->putGroup(newMap.findGroup("Mapping", Pvl::Traverse));
p.EndProcess();
}
Cube *mosaicCube = new Cube();
mosaicCube->open(mosaicFile, "rw");
mosaicCube->addCachingAlgorithm(new UniqueIOCachingAlgorithm(2));
AddOutputCube(mosaicCube);
return mosaicCube;
}
示例2: calculateStatistics
void HiEqualization::calculateStatistics() {
// TODO member variable
const FileList &imageList = getInputs();
QString maxCubeStr = toString((int) imageList.size());
// Adds statistics for whole and side regions of every cube
vector<Statistics *> statsList;
vector<Statistics *> leftStatsList;
vector<Statistics *> rightStatsList;
for (int img = 0; img < imageList.size(); img++) {
Statistics *stats = new Statistics();
Statistics *statsLeft = new Statistics();
Statistics *statsRight = new Statistics();
QString cubeStr = toString((int) img + 1);
ProcessByLine p;
p.Progress()->SetText("Calculating Statistics for Cube " +
cubeStr + " of " + maxCubeStr);
CubeAttributeInput att;
QString inp = imageList[img].toString();
p.SetInputCube(inp, att);
HiCalculateFunctor func(stats, statsLeft, statsRight, 100.0);
p.ProcessCubeInPlace(func, false);
statsList.push_back(stats);
leftStatsList.push_back(statsLeft);
rightStatsList.push_back(statsRight);
}
// Initialize the object that will calculate the gains and offsets
OverlapNormalization oNorm(statsList);
// Add the known overlaps between two cubes, and apply a weight to each
// overlap equal the number of pixels in the overlapping area
for (int i = 0; i < imageList.size() - 1; i++) {
int j = i + 1;
oNorm.AddOverlap(*rightStatsList[i], i, *leftStatsList[j], j,
rightStatsList[i]->ValidPixels());
}
loadHolds(&oNorm);
// Attempt to solve the least squares equation
oNorm.Solve(OverlapNormalization::Both);
clearAdjustments();
for (int img = 0; img < imageList.size(); img++) {
ImageAdjustment *adjustment = new ImageAdjustment(OverlapNormalization::Both);
adjustment->addGain(oNorm.Gain(img));
adjustment->addOffset(oNorm.Offset(img));
adjustment->addAverage(oNorm.Average(img));
addAdjustment(adjustment);
}
addValid(imageList.size() - 1);
setResults();
}
示例3: IException
/**
* Set the output cube to specified file name and specified input images
* and output attributes and lat,lons
*/
Isis::Cube *ProcessMapMosaic::SetOutputCube(const QString &inputFile, PvlGroup mapping,
CubeAttributeOutput &oAtt, const QString &mosaicFile) {
if (OutputCubes.size() != 0) {
QString msg = "You can only specify one output cube and projection";
throw IException(IException::Programmer, msg, _FILEINFO_);
}
if (mapping.hasKeyword("UpperLeftCornerX"))
mapping.deleteKeyword("UpperLeftCornerX");
if (mapping.hasKeyword("UpperLeftCornerY"))
mapping.deleteKeyword("UpperLeftCornerY");
if (p_createMosaic) {
Pvl newMap;
newMap.addGroup(mapping);
int samps, lines, bands;
delete ProjectionFactory::CreateForCube(newMap, samps, lines, false);
// Initialize the mosaic
ProcessByLine p;
CubeAttributeInput inAtt(inputFile);
Cube *propCube = p.SetInputCube(inputFile, inAtt);
bands = propCube->bandCount();
// If track set, create the origin band
if (GetTrackFlag()) {
bands += 1;
}
// For average priority, get the new band count
else if (GetImageOverlay() == AverageImageWithMosaic) {
bands *= 2;
}
p.PropagateHistory(false);
p.PropagateLabels(false);
Cube *ocube = p.SetOutputCube(mosaicFile, oAtt, samps, lines, bands);
p.Progress()->SetText("Initializing mosaic");
p.ClearInputCubes();
p.StartProcess(ProcessMapMosaic::FillNull);
// CreateForCube created some keywords in the mapping group that needs to be added
ocube->putGroup(newMap.findGroup("Mapping", Pvl::Traverse));
p.EndProcess();
}
Cube *mosaicCube = new Cube();
AddOutputCube(mosaicCube);
mosaicCube->open(mosaicFile, "rw");
mosaicCube->addCachingAlgorithm(new UniqueIOCachingAlgorithm(2));
return mosaicCube;
}
示例4: IsisMain
//.........这里部分代码省略.........
Pvl inStats (ui.GetFilename("INSTATS"));
PvlObject &equalInfo = inStats.FindObject("EqualizationInformation");
// Make sure each file in the instats matches a file in the fromlist
if (imageList.size() > (unsigned)equalInfo.Groups()-1) {
std::string msg = "Each input file in the FROM LIST must have a ";
msg += "corresponding input file in the INPUT STATISTICS.";
throw iException::Message(iException::User,msg,_FILEINFO_);
}
// Check that each file in the FROM LIST is present in the INPUT STATISTICS
for (unsigned i = 0; i < imageList.size(); i++) {
std::string fromFile = imageList[i];
bool foundFile = false;
for (int j = 1; j < equalInfo.Groups(); j++) {
PvlGroup &normalization = equalInfo.Group(j);
std::string normFile = normalization["Filename"][0];
if (fromFile == normFile) {
// Store the index in INPUT STATISTICS file corresponding to the
// current FROM LIST file
normIndices.push_back(j);
foundFile = true;
}
}
if (!foundFile) {
std::string msg = "The from list file [" + fromFile +
"] does not have any corresponding file in the stats list.";
throw iException::Message(iException::User,msg,_FILEINFO_);
}
}
}
// Apply the correction to the images if the user wants this done
if (processOpt != "CALCULATE") {
iString maxCubeStr ((int)imageList.size());
for (int img=0; img<(int)imageList.size(); img++) {
// Set up for progress bar
ProcessByLine p;
iString curCubeStr (img+1);
p.Progress()->SetText("Equalizing Cube " + curCubeStr + " of " + maxCubeStr);
// Open input cube
CubeAttributeInput att;
const std::string inp = imageList[img];
Cube *icube = p.SetInputCube(inp, att);
// Establish the output file depending upon whether or not a to list
// was entered
std::string out;
if (ui.WasEntered("TOLIST")) {
out = outList[img];
}
else {
Filename file = imageList[img];
out = file.Path() + "/" + file.Basename() + ".equ." + file.Extension();
}
// Allocate output cube
CubeAttributeOutput outAtt;
p.SetOutputCube(out,outAtt,icube->Samples(),icube->Lines(),icube->Bands());
// Apply gain/offset to the image
g_imageIndex = img;
if (processOpt == "APPLY") {
// Apply correction based on pre-determined statistics information
Pvl inStats (ui.GetFilename("INSTATS"));
PvlObject &equalInfo = inStats.FindObject("EqualizationInformation");
PvlGroup &normalization = equalInfo.Group(normIndices[g_imageIndex]);
gains.clear();
offsets.clear();
avgs.clear();
// Get and store the modifiers for each band
for (int band = 1; band < normalization.Keywords(); band++) {
gains.push_back(normalization[band][0]);
offsets.push_back(normalization[band][1]);
avgs.push_back(normalization[band][2]);
}
p.StartProcess(ApplyViaFile);
}
else {
// Apply correction based on the statistics gathered in this run
p.StartProcess(ApplyViaObject);
}
p.EndProcess();
}
}
// Clean-up for batch list runs
for (unsigned int o=0; o<g_oNormList.size(); o++) delete g_oNormList[o];
g_oNormList.clear();
g_overlapList.clear();
normIndices.clear();
gains.clear();
offsets.clear();
avgs.clear();
}
示例5: IsisMain
void IsisMain() {
// Get the list of cubes to process
FileList imageList;
UserInterface &ui = Application::GetUserInterface();
imageList.Read(ui.GetFilename("FROMLIST"));
// Read to list if one was entered
FileList outList;
if (ui.WasEntered("TOLIST")) {
outList.Read(ui.GetFilename("TOLIST"));
}
// Check for user input errors and return the file list sorted by CCD numbers
ErrorCheck(imageList, outList);
// Adds statistics for whole and side regions of every cube
for (int img=0; img<(int)imageList.size(); img++) {
g_s.Reset();
g_sl.Reset();
g_sr.Reset();
iString maxCube ((int)imageList.size());
iString curCube (img+1);
ProcessByLine p;
p.Progress()->SetText("Gathering Statistics for Cube " +
curCube + " of " + maxCube);
CubeAttributeInput att;
const std::string inp = imageList[img];
p.SetInputCube(inp, att);
p.StartProcess(GatherStatistics);
p.EndProcess();
g_allStats.push_back(g_s);
g_leftStats.push_back(g_sl);
g_rightStats.push_back(g_sr);
}
// Initialize the object that will calculate the gains and offsets
g_oNorm = new OverlapNormalization(g_allStats);
// Add the known overlaps between two cubes, and apply a weight to each
// overlap equal the number of pixels in the overlapping area
for (int i=0; i<(int)imageList.size()-1; i++) {
int j = i+1;
g_oNorm->AddOverlap(g_rightStats[i], i, g_leftStats[j], j,
g_rightStats[i].ValidPixels());
}
// Read in and then set the holdlist
FileList holdList;
holdList.Read(ui.GetFilename("HOLD"));
for (unsigned i=0; i<holdList.size(); i++) {
int index = -1;
for (unsigned j=0; j<imageList.size(); j++) {
std::string curName = imageList.at(j);
if (curName.compare(holdList[i]) == 0) {
index = j;
g_oNorm->AddHold(index);
}
}
}
// Attempt to solve the least squares equation
g_oNorm->Solve(OverlapNormalization::Both);
// Apply correction to the cubes if desired
bool applyopt = ui.GetBoolean("APPLY");
if (applyopt) {
// Loop through correcting the gains and offsets by line for every cube
for (int img=0; img<(int)imageList.size(); img++) {
g_imageNum = img;
ProcessByLine p;
iString max_cube ((int)imageList.size());
iString cur_cube (img+1);
p.Progress()->SetText("Equalizing Cube " + cur_cube + " of " + max_cube);
CubeAttributeInput att;
const std::string inp = imageList[img];
Cube *icube = p.SetInputCube(inp, att);
Filename file = imageList[img];
// Establish the output file depending upon whether or not a to list
// was entered
std::string out;
if (ui.WasEntered("TOLIST")) {
out = outList[img];
}
else {
Filename file = imageList[img];
out = file.Path() + "/" + file.Basename() + ".equ." + file.Extension();
}
CubeAttributeOutput outAtt;
p.SetOutputCube(out,outAtt,icube->Samples(),icube->Lines(),icube->Bands());
p.StartProcess(Apply);
p.EndProcess();
}
}
//.........这里部分代码省略.........
示例6: IsisMain
void IsisMain() {
UserInterface &ui = Application::GetUserInterface();
ProcessByLine p;
Cube *icube = p.SetInputCube("FROM");
numIgnoredLines = 0;
cubeAverage.resize(icube->Bands());
lineAverages.resize(icube->Bands());
for(int i = 0; i < icube->Bands(); i++) {
cubeAverage[i] = 0;
lineAverages[i] = NULL;
}
int boxcarSize;
if(ui.GetString("BOXTYPE").compare("NONE") == 0) {
boxcarSize = (int)(icube->Lines() * 0.10);
}
else if(ui.GetString("BOXTYPE").compare("ABSOLUTE") == 0) {
boxcarSize = ui.GetInteger("BOXSIZE");
}
else if(ui.GetString("BOXTYPE").compare("PERCENTAGE") == 0) {
boxcarSize = (int)(((double)ui.GetInteger("BOXSIZE") / 100.0) * icube->Lines());
}
// Boxcar must be odd size
if(boxcarSize % 2 != 1) {
boxcarSize ++;
}
PvlGroup data("lineeq");
data += PvlKeyword("BoxcarSize", boxcarSize, "lines");
data += PvlKeyword("OutputCsv", ui.GetBoolean("AVERAGES"));
TextFile *csvOutput = NULL;
if(ui.GetBoolean("AVERAGES")) {
csvOutput = new TextFile(ui.GetFilename("CSV"), "overwrite", "");
csvOutput->PutLine("Average,SmoothedAvg");
data += PvlKeyword("CsvFile", ui.GetFilename("CSV"));
}
Application::Log(data);
for(int band = 0; band < icube->Bands(); band ++) {
lineAverages[band] = new double[icube->Lines()];
}
p.Progress()->SetText("Gathering line averages");
p.StartProcess(gatherAverages);
// Now filter the bands
p.Progress()->SetText("Smoothing line averages");
p.Progress()->SetMaximumSteps((icube->Bands() + 1) * icube->Lines());
p.Progress()->CheckStatus();
QuickFilter filter(icube->Lines(), boxcarSize, 1);
if(icube->Lines() <= numIgnoredLines) {
throw iException::Message(iException::User, "Image does not contain any valid data.", _FILEINFO_);
}
for(int band = 0; band < icube->Bands(); band ++) {
cubeAverage[band] /= (icube->Lines() - numIgnoredLines);
filter.AddLine(lineAverages[band]);
for(int line = 0; line < icube->Lines(); line ++) {
p.Progress()->CheckStatus();
double filteredLine = filter.Average(line);
if(csvOutput != NULL) {
csvOutput->PutLine((iString)lineAverages[band][line] + (iString)"," + (iString)filteredLine);
}
lineAverages[band][line] = filteredLine;
}
filter.RemoveLine(lineAverages[band]);
}
if(csvOutput != NULL) {
delete csvOutput; // This closes the file automatically
csvOutput = NULL;
}
p.SetOutputCube("TO");
p.Progress()->SetText("Applying Equalization");
p.StartProcess(apply);
for(int band = 0; band < icube->Bands(); band ++) {
delete [] lineAverages[band];
lineAverages[band] = NULL;
}
p.EndProcess();
}