void hgSgdGff3(char *inGff, char *outDir)
/* hgSgdGff3 - Parse out SGD gff3 file into components. */
{
FILE *codingFile = openInDir(outDir, "codingGenes.gff");
FILE *otherFile = openInDir(outDir, "otherFeatures.bed");
FILE *descriptionFile = openInDir(outDir, "descriptions.txt");
FILE *noteFile = openInDir(outDir, "notes.txt");
struct tenFields *tfList = parseTenFields(inGff);

noteIds(tfList, inGff, descriptionFile, noteFile);
saveFeatures(tfList, inGff, codingFile, descriptionFile, otherFile);
carefulClose(&codingFile);
carefulClose(&otherFile);
carefulClose(&noteFile);
}
Пример #2
0
bool debugSaveFeatures(SPConfig configuration,
					LoadedFeatures allFeatures)
{
	char curImgName[PATH_BUFFER_LEN] = {0};
	SP_CONFIG_MSG configMessage = SP_CONFIG_SUCCESS;
	SPPoint * curImageFeatures = NULL;
	int curImgNumOfFeats = 0;

	sp::ImageProc imageProc = sp::ImageProc(configuration);
	int numOfImages = getFeaturesImagesNumber(allFeatures);

	/*	Try to get the features of all images */
	for (int i=0 ; i<numOfImages ; i++)
	{
		/*	Get the path of the index image */
		configMessage = spConfigGetImagePath(curImgName, configuration, i);
		if (configMessage != SP_CONFIG_SUCCESS)
		{
			return false;
		}

		/*	Get the features of the image and the number of features */
		try {
			curImageFeatures = imageProc.getImageFeatures(curImgName, i, &curImgNumOfFeats);
		}
		catch (...)
		{
			return false;
		}
		if (curImageFeatures == NULL)
		{
			return false;
		}
		setFeatureArray(allFeatures, i, curImageFeatures);
		setFeaturesNumber(allFeatures, i, curImgNumOfFeats);

	}

	return saveFeatures(configuration, allFeatures);
}
Пример #3
0
bool
SMF::save()
{
	char filename[256];
	sprintf( filename, "%s.smf", outPrefix.c_str() );
	ofstream smf(filename, ios::binary | ios::out);
	if( verbose )printf( "\nINFO: Saving %s.\n", filename );

	char magic[] = "spring map file\0";
	smf.write( magic, 16 );

	int version = 1;
	smf.write( (char *)&version, 4);
	if( verbose )printf( "\tVersion: %i.\n", version );

	int id = rand();
	smf.write( (char *)&id, 4);
	if( verbose )printf( "\tMapID: %i.\n", id );

	int width = this->width * 64;
	smf.write( (char *)&width, 4);
	if( verbose )printf( "\tWidth: %i.\n", width );

	int length = this->length * 64;
	smf.write( (char *)&length, 4);
	if( verbose )printf( "\tLength: %i.\n", length );

	int squareWidth = 8;
	smf.write( (char *)&squareWidth, 4);
	if( verbose )printf( "\tSquareWidth: %i.\n", squareWidth );

	int squareTexels = 8;
	smf.write( (char *)&squareTexels, 4);
	if( verbose )printf( "\tSquareTexels: %i.\n", squareTexels );

	int tileTexels = 32;
	smf.write( (char *)&tileTexels, 4);
	if( verbose )printf( "\tTileTexels: %i.\n", tileTexels );

	float floor = this->floor * 512;
	smf.write( (char *)&floor, 4);
	if( verbose )printf( "\tMinHeight: %0.2f.\n", floor );

	float ceiling = this->ceiling * 512;
	smf.write( (char *)&ceiling, 4);
	if( verbose )printf( "\tMaxHeight: %0.2f.\n", ceiling );

	smf.write( (char *)&heightPtr, 4);
	if( verbose )printf( "\tHeightPtr: %i.\n", heightPtr );
	smf.write( (char *)&typePtr, 4);
	if( verbose )printf( "\tTypePtr: %i.\n", typePtr );
	smf.write( (char *)&tilesPtr, 4);
	if( verbose )printf( "\tTilesPtr: %i.\n", tilesPtr );
	smf.write( (char *)&minimapPtr, 4);
	if( verbose )printf( "\tMinimapPtr: %i.\n", minimapPtr );
	smf.write( (char *)&metalPtr, 4);
	if( verbose )printf( "\tMetalPtr: %i.\n", metalPtr );
	smf.write( (char *)&featuresPtr, 4);
	if( verbose )printf( "\tFeaturesPtr: %i.\n", featuresPtr );

	int nExtraHeaders = extraHeaders.size();
	smf.write( (char *)&nExtraHeaders, 4);
	if( verbose )printf( "\tExtraHeaders: %i.\n", nExtraHeaders );

	if(verbose) printf( "    Extra Headers:\n");
	for( unsigned int i = 0; i < extraHeaders.size(); ++i ) {
		smf.write((char *)extraHeaders[i], extraHeaders[i]->size);
		if( verbose ) {
			if(extraHeaders[i]->type == 1)
				printf("\tGrassPtr: %i.\n",
				((SMFEHGrass *)extraHeaders[i])->grassPtr );
			else printf( "\t Unknown Header\n");
		}
	}
	
	smf.close();

	saveHeight();
	saveType();
	saveMinimap();
	saveMetal();

	for( unsigned int i = 0; i < extraHeaders.size(); ++i ) {
		if(extraHeaders[i]->type == 1)saveGrass();
	}

	saveTilemap();
	saveFeatures();

	return false;
}
Пример #4
0
QAction* Graphical_UI::createSaveMenu() {//octomap Menu
    QMenu* sm = menuBar()->addMenu(tr("&Save"));
    newMenuItem(sm,
                "&Save",                                
                SLOT(quickSaveAll()),
                "Save all stored point clouds with common coordinate frame to a pcd file",
                QKeySequence::Save,
                QIcon::fromTheme("document-save"));
    

    newMenuItem(sm,
                "Save &Feature Map...",
                SLOT(saveFeatures()),
                "Save all feature positions and descriptions in a common coordinate frame to a yaml or xml file",
                "Ctrl+F",
                QIcon::fromTheme("document-save"));

    QAction* oa = newMenuItem(sm, "Save Octomap...",
                              SLOT(saveOctomap()),
                              "Save computed OctoMap",
                              "",
                              QIcon::fromTheme("document-save-as"));

    newMenuItem(sm, "&Save as Point Cloud ...",
                SLOT(saveAll()),
                "Save all stored point clouds with common coordinate frame",
                QKeySequence::SaveAs,
                QIcon::fromTheme("document-save-as"));

    newMenuItem(sm, "&Save Point Cloud Node-Wise...", 
                SLOT(saveIndividual()),
                "Save stored point clouds in individual files", 
                "Ctrl+N", 
                QIcon::fromTheme("document-save-all"));

    newMenuItem(sm, "Save &G2O Graph...",
                SLOT(saveG2OGraphDialog()),
                "Save G2O graph (e.g. for use with the g2o viewer or external optimization)",
                "",
                QIcon::fromTheme("document-save"));
                              
    newMenuItem(sm, "Save Clouds to &Bag...",
                SLOT(saveBagDialog()),
                "Save clouds and transforms to bagfile",
                "Ctrl+Shift+B");
                
    newMenuItem(sm, "Save Trajectory &Estimate...",
                SLOT(saveTrajectoryDialog()),
                "Save trajectory estimate (and ground truth trajectory if available) for external evaluation.",
                "Ctrl+E");
                
    sm->addSeparator();
    newMenuItem(sm, "&Send Model",
                SLOT(sendAll()),
                "Send out all stored point clouds with corrected transform",
                "Ctrl+M",
                QIcon::fromTheme("document-send"));

    sm->addSeparator();

    newMenuItem(sm, "Save &3D as PDF File...",
                SLOT(saveVectorGraphic()),
                "Write 3D Scene to a PDF File. Warning: Meant for Pose Graphs not for the clouds or octomaps!",
                "",
                QIcon::fromTheme("application-pdf"));

    newMenuItem(sm, "Save Input &Images to Files...",
                SLOT(saveAllImages()),
                "Write All images shown in the gui to appropriate files",
                "",
                QIcon::fromTheme("image-x-generic"));
    
    newMenuItem(sm, "Capture Screencast...",
                this,
                SLOT(toggleScreencast(bool)),
                "Dump Screen as Video",
                !ParameterServer::instance()->get<std::string>("screencast_path_prefix").empty());
                
    return oa;
}
Пример #5
0
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    if (a.arguments().size() < 3) {
        qCritical() << "this application requires more arguments!";
        return -1;
    }

    const QString trainDirName = a.arguments().at(1);
    const QString testDirName = a.arguments().at(2);
    const QString outputName = a.arguments().at(3);
    const QString extractorName = a.arguments().at(4);
    const QStringList extractorArgs = a.arguments().mid(5);
    ExtractorInterface *extractor =
            ExtractorFactory::getExtractor(extractorName, extractorArgs);
    if (extractor == NULL) {
        qCritical() << "failed to initialise extractor" << extractorName;
        return -2;
    }

    QDir trainDir(trainDirName);
    QStringList subdirs = QStringList() << "wood" << "straw" << "salt" << "linen";
    QList<quint8> labels = QList<quint8>() << 32 << 96 << 160 << 224;
    QVector<LabelledData> trainData;
#ifdef HAS_ELAPSED_TIMER
    QElapsedTimer extractionTimer;
#else
    QTime extractionTimer;
#endif

    int threadCount = 1;
#ifdef _OPENMP
#pragma omp parallel
    {
#pragma omp single
        {
            threadCount = omp_get_num_threads();
        }
    }
#endif
    qDebug() << "using" << threadCount << "threads.";

    extractionTimer.start();
    unsigned int imagesCount = 0;
    for (int j = 0; j < subdirs.size(); j++) {
        trainDir.cd(subdirs.at(j));
        const QFileInfoList fileList = trainDir.entryInfoList(QStringList() << "*.png");
#ifdef HAS_ELAPSED_TIMER
        QElapsedTimer extractorTimer;
#else
        QTime extractorTimer;
#endif
        extractorTimer.start();
        for (int i = 0; i < fileList.size(); i++) {
            imagesCount++;
            const QString filename = fileList.at(i).filePath();
            const QImage image(filename);
            if (image.format() != QImage::Format_Indexed8) {
                qCritical("Image is not greyscale!");
                return -1;
            }
            extractor->preprocess(image);
            if (extractor->extracts()) {
                unsigned int count = trainData.size();
                trainData.resize(trainData.size() + image.width() * image.height());
                LabelledData *trainDataPtr = trainData.data();
#pragma omp parallel for
                for (int x = 0; x < image.width(); x++) {
                    for (int y = 0; y < image.height(); y++) {
                        const QVector<nnreal> res = extractor->extract(image, x, y);
                        Q_ASSERT(res.size() == extractor->size());
                        LabelledData li(res, labels.at(j));
                        const unsigned int idx = count + x * image.height() + y;
                        trainDataPtr[idx] = li;
                    }
                }
            }
            const QVector<QVector<nnreal> > ppFeatures = extractor->postprocess(image);
            const int ppCount = ppFeatures.size();
            if (ppCount > 0) {
                const int count = trainData.size();
                trainData.resize(trainData.size() + ppFeatures.size());
                LabelledData *trainDataPtr = trainData.data();
#pragma omp parallel for
                for (int k = 0; k < ppCount; k++) {
                    Q_ASSERT(ppFeatures.at(k).size() == extractor->size());
                    LabelledData ld(ppFeatures.at(k), labels.at(j));
                    trainDataPtr[count + k] = ld;
                }
            }
            qDebug() << fileList.at(i).filePath() << extractorTimer.restart();
        }
        trainDir.cdUp();
    }

    const int msecs = extractionTimer.elapsed();
    qDebug() << "trainSize:" << trainData.size() << "extraction of "
             << imagesCount << "images took" << msecs << "msecs, average"
             << float(msecs) / imagesCount << "msecs per image";
    const QString trainOutFilename(outputName + "_" + extractorName + "_train.out");
    QFile trainOutput(trainOutFilename);
    if (!trainOutput.open(QIODevice::WriteOnly)) {
        qCritical() << "failed to open output file" << trainOutFilename;
        return -3;
    }
    {
#ifdef HAS_ELAPSED_TIMER
        QElapsedTimer saveTimer;
#else
        QTime saveTimer;
#endif
        saveTimer.start();
        QDataStream outstream(&trainOutput);
        saveFeatures(outstream, extractorName, extractorArgs, extractor->size(), trainData);
        int msecs = saveTimer.elapsed();
        qDebug() << "saving took" << msecs << "msecs";
    }
    trainOutput.close();
    trainData.clear();

    {
        QDir testDir(testDirName);
        const QFileInfoList dataFileList  = testDir.entryInfoList(QStringList() << "test*.png");
        const QFileInfoList labelFileList = testDir.entryInfoList(QStringList() << "label*.png");
        Q_ASSERT(dataFileList.size() == labelFileList.size());
#ifdef HAS_ELAPSED_TIMER
        QElapsedTimer extractorTimer;
#else
        QTime extractorTimer;
#endif
        extractorTimer.start();
        QTextStream out(stdout);
        for (int i = 0; i < dataFileList.size(); i++) {
            const QImage dataImage(dataFileList.at(i).filePath());
            const QImage labelImage(labelFileList.at(i).filePath());
            QVector<LabelledData> testData;
            extractor->preprocessTest(dataImage, labelImage);
            int cnt = 0;
            if (extractor->extracts()) {
                unsigned int count = testData.size();
                testData.resize(dataImage.width() * dataImage.height());
                LabelledData *testDataPtr = testData.data();
#pragma omp parallel for
                for (int x = 0; x < dataImage.width(); x++) {
#pragma omp critical
                    {
                        cnt++;
                        out << cnt * 100 / dataImage.width() << "%" << '\r';
                        out.flush();
                    }
                    for (int y = 0; y < dataImage.height(); y++) {
                        const QVector<nnreal> res = extractor->extract(dataImage, x, y);
                        const quint8 c = labelImage.pixelIndex(x, y);
                        LabelledData li(res, c);
                        li.squeeze();
                        const unsigned int idx = count + x * dataImage.height() + y;
                        testDataPtr[idx] = li;
                    }
                }
                out << endl;
            }
            const QVector<LabelledData> ppFeatures = extractor->postprocessTest(dataImage, labelImage);
            testData << ppFeatures;
            qDebug() << dataFileList.at(i).filePath() << extractorTimer.restart();
            const QString testOutFilename(outputName + "_" + extractorName + "_test" + QString::number(i) + ".out");
            QFile testOutput(testOutFilename);
            if (!testOutput.open(QIODevice::WriteOnly)) {
                qCritical() << "failed to open output file" << testOutFilename;
                return -3;
            }
            {
#ifdef HAS_ELAPSED_TIMER
                QElapsedTimer saveTimer;
#else
                QTime saveTimer;
#endif
                saveTimer.start();
                QDataStream outstream(&testOutput);
                saveFeatures(outstream, extractorName, extractorArgs, extractor->size(), testData);
                int msecs = saveTimer.elapsed();
                qDebug() << "saving took" << msecs << "msecs";
            }
            testOutput.close();
        }
    }

    delete extractor;

    return 0;
}