int main() { // Import two point sets A and B VTKPointSetFileImporter::pointer importerA = VTKPointSetFileImporter::New(); importerA->setFilename(Config::getTestDataPath() + "Surface_LV.vtk"); VTKPointSetFileImporter::pointer importerB = VTKPointSetFileImporter::New(); importerB->setFilename(Config::getTestDataPath() + "Surface_LV.vtk"); // Apply a transformation to point set B Vector3f translation(0.01, 0, 0.01); Vector3f rotation(0.5, 0, 0); AffineTransformation::pointer transformation = AffineTransformation::New(); transformation->getTransform().translate(translation); Matrix3f R; R = Eigen::AngleAxisf(rotation.x(), Vector3f::UnitX()) * Eigen::AngleAxisf(rotation.y(), Vector3f::UnitY()) * Eigen::AngleAxisf(rotation.z(), Vector3f::UnitZ()); transformation->getTransform()->rotate(R); importerB->update(); importerB->getOutputData<PointSet>()->getSceneGraphNode()->setTransformation(transformation); // Perform the registration IterativeClosestPoint::pointer icp = IterativeClosestPoint::New(); icp->setMovingPointSetPort(importerA->getOutputPort()); icp->setFixedPointSetPort(importerB->getOutputPort()); icp->update(); // Apply transformation to A importerA->getOutputData<PointSet>()->getSceneGraphNode()->setTransformation(icp->getOutputTransformation()); Reporter::info() << "Registration result: " << Reporter::end(); Reporter::info() << "Rotation: " << icp->getOutputTransformation()->getEulerAngles().transpose() << Reporter::end(); Reporter::info() << "Translation:" << icp->getOutputTransformation()->getTransform().translation().transpose() << Reporter::end(); // Visualize the two point sets VertexRenderer::pointer renderer = VertexRenderer::New(); renderer->addInputConnection(importerA->getOutputPort(), Color::Blue(), 10); renderer->addInputConnection(importerB->getOutputPort(), Color::Green(), 5); renderer->setDefaultDrawOnTop(true); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); #ifdef FAST_CONTINUOUS_INTEGRATION // This will automatically close the window after 5 seconds, used for CI testing window->setTimeout(5*1000); #endif window->start(); }
int main() { // Import images from files using the ImageFileStreamer ImageFileStreamer::pointer streamer = ImageFileStreamer::New(); // The hashtag here will be replaced with an integer, starting with 0 as default streamer->setFilenameFormat(std::string(FAST_TEST_DATA_DIR)+"/US-2Dt/US-2Dt_#.mhd"); // Renderer image ImageRenderer::pointer renderer = ImageRenderer::New(); renderer->addInputConnection(streamer->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); window->set2DMode(); #ifdef FAST_CONTINUOUS_INTEGRATION // This will automatically close the window after 5 seconds, used for CI testing window->setTimeout(5*1000); #endif window->start(); }
int main(int argc, char** argv) { CommandLineParser parser("Import triangle mesh from file"); parser.addPositionVariable(1, "filename", Config::getTestDataPath()+"/Surface_LV.vtk"); parser.parse(argc, argv); // Import a triangle mesh from vtk file using the VTKMeshFileImporter VTKMeshFileImporter::pointer importer = VTKMeshFileImporter::New(); importer->setFilename(parser.get("filename")); // Renderer mesh TriangleRenderer::pointer renderer = TriangleRenderer::New(); renderer->addInputConnection(importer->getOutputPort()); // Setup window SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); #ifdef FAST_CONTINUOUS_INTEGRATION window->setTimeout(5*1000); // automatically close window after 5 seconds #endif window->start(); }
int main() { // Import image from file using the ImageFileImporter ImageFileImporter::pointer importer = ImageFileImporter::New(); importer->setFilename(std::string(FAST_TEST_DATA_DIR)+"/US-2D.jpg"); // Smooth image GaussianSmoothingFilter::pointer filter = GaussianSmoothingFilter::New(); filter->setInputConnection(importer->getOutputPort()); filter->setStandardDeviation(2.0); filter->setMaskSize(7); // Renderer image ImageRenderer::pointer renderer = ImageRenderer::New(); renderer->addInputConnection(filter->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); #ifdef FAST_CONTINUOUS_INTEGRATION // This will automatically close the window after 5 seconds, used for CI testing window->setTimeout(5*1000); #endif window->start(); }
int main(int argc, char** argv) { CommandLineParser parser("Import point set from file"); parser.addPositionVariable(1, "filename", Config::getTestDataPath() + "Surface_LV.vtk"); parser.parse(argc, argv); // Import line set from vtk file VTKMeshFileImporter::pointer importer = VTKMeshFileImporter::New(); importer->setFilename(parser.get("filename")); // Render vertices VertexRenderer::pointer renderer = VertexRenderer::New(); renderer->addInputConnection(importer->getOutputPort()); // Setup window SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); #ifdef FAST_CONTINUOUS_INTEGRATION // This will automatically close the window after 5 seconds, used for CI testing window->setTimeout(5*1000); #endif window->start(); }
int main() { // Import CT image ImageFileImporter::pointer importer = ImageFileImporter::New(); importer->setFilename(std::string(FAST_TEST_DATA_DIR) + "CT-Abdomen.mhd"); // Extract surface mesh using a threshold value SurfaceExtraction::pointer extraction = SurfaceExtraction::New(); extraction->setInputConnection(importer->getOutputPort()); extraction->setThreshold(300); // Render and visualize the mesh MeshRenderer::pointer surfaceRenderer = MeshRenderer::New(); surfaceRenderer->setInputConnection(extraction->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(surfaceRenderer); #ifdef FAST_CONTINUOUS_INTEGRATION // This will automatically close the window after 5 seconds, used for CI testing window->setTimeout(5*1000); #endif window->start(); }
int main() { Reporter::setGlobalReportMethod(Reporter::COUT); ImageFileStreamer::pointer streamer = ImageFileStreamer::New(); streamer->setFilenameFormat(Config::getTestDataPath() + "US/JugularVein/US-2D_#.mhd"); streamer->setTimestampFilename(Config::getTestDataPath() + "US/JugularVein/timestamps.fts"); streamer->enableLooping(); PixelClassifier::pointer segmentation = PixelClassifier::New(); segmentation->setNrOfClasses(3); segmentation->setScaleFactor(1.0f / 255.0f); const auto engine = segmentation->getInferenceEngine()->getName(); if(engine == "TensorFlow") { // TensorFlow needs to know what the output node is called segmentation->addOutputNode(0, "conv2d_23/truediv"); } else if(engine == "TensorRT") { // TensorRT needs to know everything about the input and output nodes segmentation->addInputNode(0, "input_image", NodeType::IMAGE, TensorShape({-1, 1, 256, 256})); segmentation->addOutputNode(0, "permute_2/transpose"); } segmentation->load(join(Config::getTestDataPath(), "NeuralNetworkModels/jugular_vein_segmentation." + segmentation->getInferenceEngine()->getDefaultFileExtension())); segmentation->setInputConnection(streamer->getOutputPort()); segmentation->enableRuntimeMeasurements(); SegmentationRenderer::pointer segmentationRenderer = SegmentationRenderer::New(); segmentationRenderer->addInputConnection(segmentation->getOutputPort()); segmentationRenderer->setOpacity(0.25); segmentationRenderer->setColor(Segmentation::LABEL_FOREGROUND, Color::Red()); segmentationRenderer->setColor(Segmentation::LABEL_BLOOD, Color::Blue()); ImageRenderer::pointer imageRenderer = ImageRenderer::New(); imageRenderer->setInputConnection(streamer->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(imageRenderer); window->addRenderer(segmentationRenderer); window->set2DMode(); window->getView()->setBackgroundColor(Color::Black()); window->start(); segmentation->getAllRuntimes()->printAll(); }
int main() { // Import image from file using the ImageFileImporter ImageFileImporter::pointer importer = ImageFileImporter::New(); importer->setFilename(std::string(FAST_TEST_DATA_DIR)+"/US-2D.jpg"); //importer->setFilename(std::string(FAST_TEST_DATA_DIR) + "/US-1-2D.png"); /* //K = 1, dvs K = gamle versjonen, M_PI gaus int groupSize = 5; int windowSize = 51; float sigma = 1.65f; float dS = 0.5f; */ /* //K = 0, dvs K = 1/2d int groupSize = 5; int windowSize = 51; float sigma = 0.65f; float dS = 0.135f; */ //K = 3 dvs ny gauss int groupSize = 17; int windowSize = 17; float sigma = 5.000f; //float dS = 0.03999f; float dS = 5.0f; // Smooth image NoneLocalMeans::pointer filter = NoneLocalMeans::New(); filter->setInputConnection(importer->getOutputPort()); //filter->setGroupSize(15); //filter->setWindowSize(51); //filter->setSigma(0.15f); //filter->setDenoiseStrength(0.15f); filter->setGroupSize(groupSize); filter->setWindowSize(windowSize); filter->setSigma(sigma); filter->setDenoiseStrength(dS); filter->setEuclid(1); filter->setK(2); //filter->setOutputType(TYPE_FLOAT); //Export img ImageExporter::pointer exporter = ImageExporter::New(); std::string text = ""; //text += std::to_string( groupSize ); //text += "WS_"; //text += std::to_string( windowSize ); //text += "S_"; //text += std::to_string( sigma ); //text += "DS_"; //text += std::to_string( dS ); text += "TIME_"; time_t seconds; seconds = time (NULL); text += std::to_string( seconds ); text += ".jpg"; exporter->setFilename(text); exporter->setInputConnection(filter->getOutputPort()); exporter->update(); // Renderer image ImageRenderer::pointer renderer = ImageRenderer::New(); renderer->addInputConnection(filter->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); window->setTimeout(200*1000); // automatically close window after 5 seconds window->start(); }
#include "FAST/Streamers/ImageFileStreamer.hpp" #include "FAST/Testing.hpp" #include "FAST/Importers/ImageFileImporter.hpp" #include "ImageRenderer.hpp" #include "FAST/Visualization/SimpleWindow.hpp" using namespace fast; TEST_CASE("ImageRenderer with single 2D image in 2D mode", "[fast][ImageRenderer][visual]") { ImageFileImporter::pointer importer = ImageFileImporter::New(); importer->setFilename(std::string(FAST_TEST_DATA_DIR)+"US-2D.jpg"); ImageRenderer::pointer renderer = ImageRenderer::New(); renderer->setInputConnection(importer->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); window->set2DMode(); window->setTimeout(500); CHECK_NOTHROW(window->start()); } TEST_CASE("ImageRenderer with dynamic 2D image in 2D mode", "[fast][ImageRenderer][visual]") { ImageFileStreamer::pointer streamer = ImageFileStreamer::New(); streamer->setFilenameFormat(std::string(FAST_TEST_DATA_DIR)+"US-2Dt/US-2Dt_#.mhd"); ImageRenderer::pointer renderer = ImageRenderer::New(); renderer->setInputConnection(streamer->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(renderer); window->set2DMode(); window->setTimeout(1000);
int main(int argc, char** argv) { std::vector<std::string> recordings = { "/home/smistad/AssistantTestData/1/US-Acq_03_20150608T103739/Acquisition/US-Acq_03_20150608T103739_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/1/US-Acq_04_20150608T103837/Acquisition/US-Acq_04_20150608T103837_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/1/US-Acq_07_20150608T104148/Acquisition/US-Acq_07_20150608T104148_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/1/US-Acq_08_20150608T104238/Acquisition/US-Acq_08_20150608T104238_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/0/US-Acq_03_20150608T102144/Acquisition/US-Acq_03_20150608T102144_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/0/US-Acq_04_20150608T102242/Acquisition/US-Acq_04_20150608T102242_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/0/US-Acq_07_20150608T102703/Acquisition/US-Acq_07_20150608T102703_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/0/US-Acq_08_20150608T102854/Acquisition/US-Acq_08_20150608T102854_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/2/US-Acq_03_20150608T104805/Acquisition/US-Acq_03_20150608T104805_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/2/US-Acq_04_20150608T104910/Acquisition/US-Acq_04_20150608T104910_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/2/US-Acq_07_20150608T105549/Acquisition/US-Acq_07_20150608T105549_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/2/US-Acq_08_20150608T105649/Acquisition/US-Acq_08_20150608T105649_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/3/US-Acq_03_20150608T113646/Acquisition/US-Acq_03_20150608T113646_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/3/US-Acq_04_20150608T113750/Acquisition/US-Acq_04_20150608T113750_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/3/US-Acq_07_20150608T114115/Acquisition/US-Acq_07_20150608T114115_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/3/US-Acq_08_20150608T114217/Acquisition/US-Acq_08_20150608T114217_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/4/US-Acq_03_20150608T112610/Acquisition/US-Acq_03_20150608T112610_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/4/US-Acq_04_20150608T112656/Acquisition/US-Acq_04_20150608T112656_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/4/US-Acq_08_20150608T113129/Acquisition/US-Acq_08_20150608T113129_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/4/US-Acq_09_20150608T113245/Acquisition/US-Acq_09_20150608T113245_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/5/US-Acq_03_20150608T111610/Acquisition/US-Acq_03_20150608T111610_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/5/US-Acq_04_20150608T111701/Acquisition/US-Acq_04_20150608T111701_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/5/US-Acq_07_20150608T111940/Acquisition/US-Acq_07_20150608T111940_Image_Transducer_#.mhd", "/home/smistad/AssistantTestData/6/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/6/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/6/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/6/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/6/4/US-2D_#.mhd", "/home/smistad/AssistantTestData/7/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/7/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/7/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/7/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/8/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/8/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/8/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/8/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/9/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/9/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/9/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/9/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/10/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/10/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/10/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/10/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/11/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/11/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/11/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/11/3/US-2D_#.mhd", "/home/smistad/AssistantTestData/12/0/US-2D_#.mhd", "/home/smistad/AssistantTestData/12/1/US-2D_#.mhd", "/home/smistad/AssistantTestData/12/2/US-2D_#.mhd", "/home/smistad/AssistantTestData/12/3/US-2D_#.mhd", "/media/smistad/New Volume/Carotis/Erik/2016-06-02-140622/US-2D_#.mhd", "/media/smistad/New Volume/Carotis/Erik/2016-06-02-140721/US-2D_#.mhd", "/media/smistad/New Volume/Carotis/Erik/2016-06-02-140846/US-2D_#.mhd", "/media/smistad/New Volume/Carotis/Erik/2016-06-02-140923/US-2D_#.mhd" }; uint recordingID = 0; if(argc != 2) { std::cout << "Usage: " << argv[0] << "<recording-id: 0-" << recordings.size() << ">" << std::endl; return 0; } else { recordingID = atoi(argv[1]); } ImageFileStreamer::pointer streamer = ImageFileStreamer::New(); streamer->setStreamingMode(STREAMING_MODE_PROCESS_ALL_FRAMES); streamer->setFilenameFormat(recordings[recordingID]); streamer->update(); UltrasoundVesselDetection::pointer detector = UltrasoundVesselDetection::New(); detector->setInputConnection(streamer->getOutputPort()); detector->enableRuntimeMeasurements(); SegmentationRenderer::pointer segmentationRenderer = SegmentationRenderer::New(); segmentationRenderer->addInputConnection(detector->getOutputSegmentationPort()); segmentationRenderer->setFillArea(false); ImageRenderer::pointer imageRenderer = ImageRenderer::New(); imageRenderer->addInputConnection(streamer->getOutputPort()); SimpleWindow::pointer window = SimpleWindow::New(); window->addRenderer(imageRenderer); window->addRenderer(segmentationRenderer); window->set2DMode(); window->setWidth(1920); window->setHeight(1080); window->start(); detector->getRuntime("ellipse fitting")->print(); detector->getRuntime("candidate selection")->print(); detector->getRuntime("classifier")->print(); detector->getRuntime("segmentation")->print(); }