UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-03-14)
tutorial-local-grabbing-elastography-display.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if defined(VISP_HAVE_MODULE_USTK_GUI) && defined(VISP_HAVE_MODULE_USTK_GRABBER) && defined(VISP_HAVE_MODULE_USTK_ELASTOGRAPHY)
7 
8 #include <visp3/ustk_grabber/usNetworkGrabberRF2D.h>
9 #include <visp3/ustk_gui/usElastographyDisplayWidget.h>
10 #include <visp3/ustk_gui/usImageElastographyCreationWrapper.h>
11 
12 #include <QApplication>
13 #include <QMainWindow>
14 
15 int main(int argc, char **argv)
16 {
17 
18  QApplication app(argc, argv);
19  app.setApplicationName(QString("USTK display widget"));
20 
21  // image
22  // usFrameGrabbedInfo<usImageRF2D<short int> > *grabbedFrame;
24  vpImage<vpRGBa> elastoImage(50, 50, vpRGBa(0, 200, 0, 254));
25  vpImage<unsigned char> strainImage(50, 50);
26 
27  // Qt widgets
29  widget->updateFrame(elastoImage);
30  QMainWindow window;
31  window.setCentralWidget(widget);
32  window.show();
33 
34  // grabber
35  QThread *grabbingThread = new QThread();
36  usNetworkGrabberRF2D *qtGrabber = new usNetworkGrabberRF2D();
37  // qtGrabber->setVerbose(true);
38  qtGrabber->setIPAddress("127.0.0.1"); // local loop, server must be running on same computer
39  qtGrabber->connectToServer();
41  header.probeId = 15; // 4DC7 id = 15
42  header.slotId = 0; // top slot id = 0
43  header.imagingMode = 12; // B-mode = 0
44  qtGrabber->initAcquisition(header);
45  qtGrabber->runAcquisition();
46  qtGrabber->moveToThread(grabbingThread);
47  grabbingThread->start();
48 
49  // converter & elasto processes
50  /*usElastography elastoProcess;
51  elastoProcess.setROI(40, 3200, 50, 500);
52  usImageElastography elastographyImageCreation;
53  usRFToPreScan2DConverter converter;*/
54  QThread *elastoThread = new QThread();
56  elastoGenerator->setROI(270, 40, 500, 50);
57  elastoGenerator->moveToThread(elastoThread);
58  elastoThread->start();
59 
60  qRegisterMetaType<vpImage<vpRGBa> >("vpImage<vpRGBa>");
61  QObject::connect(elastoGenerator, SIGNAL(elastographyImageReady(vpImage<vpRGBa>)), widget,
62  SLOT(updateFrame(vpImage<vpRGBa>)));
63 
64  qRegisterMetaType<usImageRF2D<short int> >("usImageRF2D<short int>&");
65  QObject::connect(qtGrabber, SIGNAL(newFrame(usImageRF2D<short int> &)), elastoGenerator,
66  SLOT(updateFrame(usImageRF2D<short int> &)));
67 
68  usImageRF2D<short int> rfFrame;
69  // our grabbing loop
70  /*do {
71  if (qtGrabber->isFirstFrameAvailable()) {
72  //rfFrame = (*qtGrabber->acquire());
73  //std::cout << "new Frame acquired : " << rfFrame << std::endl;
74 
75  //->updateFrame(rfFrame);
76 
77  //std::cout << "end loop" << std::endl;
78  // update display
79  // widget->updateFrame(elastoImage);
80  }
81  } while (window.isVisible());*/
82 
83  app.exec();
84  // disconnect from server
85  qtGrabber->disconnectFromServer();
86  grabbingThread->quit();
87  return 0;
88 }
89 
90 #else
91 int main()
92 {
93  std::cout << "You should build ustk_gui and ustk_grabber to run this tutorial" << std::endl;
94  return 0;
95 }
96 
97 #endif
QWidget-based class for elastography display.
void updateFrame(const vpImage< vpRGBa > elastographyImage)
Qt wrapper for colored elastography image creation (pre-scan image with a colored rectangle overlay f...
void setROI(unsigned int i, unsigned int j, unsigned int height, unsigned int width)
Specific class to grab RF frames from the ultrasound station on the network.
bool initAcquisition(const usNetworkGrabber::usInitHeaderSent &header)
void setIPAddress(const std::string &s_ip)