Skip to content

Commit db3fa9f

Browse files
preparation for paper publication
1 parent 14f6433 commit db3fa9f

File tree

20 files changed

+1053
-22
lines changed

20 files changed

+1053
-22
lines changed

applications/medical/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
add_subdirectory(calibrate_ultrasound)
2+
add_subdirectory(extract_intersections_ultrasound)
23
add_subdirectory(temporal_calibration)
34
add_subdirectory(volumetric_reconstruction)
45
add_subdirectory(volumetric_path_planing_dicom_capable)

applications/medical/calibrate_ultrasound/main.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "ceres/ceres.h"
44
#include "optimization/WireCalibration.h"
55
#include "utils/FileStructures.h"
6+
#include "utils/DateManipulation.h"
67

78
#define STB_IMAGE_IMPLEMENTATION
89
#include "CalibratePages.h"
@@ -201,18 +202,22 @@ int main(int argc, char* argv[]) {
201202
std::cout << "Final: \n" << transformation_matrix << std::endl;
202203
std::cout << "(all units in meters)" << std::endl;
203204

204-
auto return_current_time_and_date = [](){
205-
auto now = std::chrono::system_clock::now();
206-
auto in_time_t = std::chrono::system_clock::to_time_t(now);
207-
208-
std::stringstream ss;
209-
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
210-
return ss.str();
211-
};
205+
std::vector<Eigen::Matrix<double,1,4>> line_parameterization;
206+
line_parameterization.resize(number_of_strings);
207+
size_t offset = 6;
208+
for(size_t i = 0; i < number_of_strings; ++i, offset += 4){
209+
Eigen::Matrix<double,1,4> params_wire_i = Eigen::Matrix<double,1,4>::Zero();
210+
std::memcpy(params_wire_i.data(),best_run.initial_guess.data()+offset,4*sizeof(double));
211+
std::cout << params_wire_i.transpose() << std::endl;
212+
line_parameterization.at(i) = params_wire_i;
213+
}
212214

213215
std::printf("\nRememeber that you always need to\nperform the temporal calibration before attempting the\nspacial calibration! Produced JSON file:\n");
214216

215-
curan::utilities::UltrasoundCalibrationData calibration{return_current_time_and_date(),transformation_matrix,best_run.summary.final_cost};
217+
curan::utilities::UltrasoundCalibrationData calibration{curan::utilities::formated_date<std::chrono::system_clock>(std::chrono::system_clock::now()),
218+
transformation_matrix,
219+
line_parameterization,
220+
best_run.summary.final_cost};
216221

217222
// write prettified JSON to another file
218223
std::ofstream o(CURAN_COPIED_RESOURCE_PATH"/spatial_calibration.json");
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
find_package(ITK CONFIG REQUIRED)
2+
3+
include(${ITK_USE_FILE})
4+
5+
add_executable(Ultrasoundintesection main.cpp
6+
MessageProcessing.cpp
7+
CalibratePages.cpp
8+
)
9+
10+
target_compile_definitions(Ultrasoundintesection PRIVATE CURAN_COPIED_RESOURCE_PATH="${post_build_resource_path}")
11+
12+
13+
target_link_libraries(Ultrasoundintesection PUBLIC
14+
${ITK_LIBRARIES}
15+
imageprocessing
16+
userinterface
17+
communication
18+
optimization
19+
)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "CalibratePages.h"
2+
3+
curan::ui::Page create_main_page(std::shared_ptr<ProcessingMessage>& processing ,curan::ui::IconResources& resources) {
4+
using namespace curan::ui;
5+
6+
auto igtlink_viewer = OpenIGTLinkViewer::make();
7+
igtlink_viewer->set_size(SkRect::MakeWH(0,0));
8+
auto igtlink_viewer_pointer = igtlink_viewer.get();
9+
uint_least8_t dicom_compliant_conversion[256] = {0 ,30 ,33 ,35 ,37 ,39 ,40 ,41 ,43 ,44 ,45 ,46 ,47 ,48 ,48 ,49 ,50 ,51 ,51 ,52 ,53 ,54 ,55 ,55 ,56 ,57 ,57 ,58 ,59 ,60 ,60 ,61 ,62 ,62 ,63 ,64 ,64 ,65 ,65 ,66 ,67 ,67 ,68 ,69 ,69 ,70 ,71 ,71 ,72 ,73 ,73 ,74 ,75 ,76 ,76 ,77 ,77 ,78 ,79 ,80 ,80 ,80 ,81 ,82 ,83 ,83 ,84 ,84 ,85 ,86 ,86 ,87 ,88 ,88 ,89 ,90 ,90 ,91 ,92 ,93 ,93 ,94 ,95 ,95 ,96 ,96 ,97 ,98 ,98 ,99 ,100 ,101 ,101 ,102 ,103 ,103 ,104 ,105 ,106 ,106 ,107 ,108 ,109 ,109 ,110 ,111 ,111 ,112 ,113 ,113 ,114 ,115 ,116 ,116 ,117 ,118 ,119 ,119 ,120 ,121 ,122 ,123 ,123 ,124 ,125 ,126 ,126 ,127 ,128 ,128 ,129 ,130 ,131 ,132 ,132 ,133 ,134 ,135 ,136 ,136 ,137 ,138 ,139 ,140 ,141 ,141 ,142 ,143 ,144 ,145 ,145 ,146 ,147 ,148 ,149 ,150 ,151 ,151 ,152 ,153 ,154 ,155 ,156 ,157 ,158 ,158 ,159 ,160 ,161 ,162 ,163 ,164 ,164 ,166 ,167 ,167 ,169 ,170 ,170 ,171 ,172 ,173 ,174 ,175 ,176 ,176 ,178 ,178 ,180 ,181 ,182 ,183 ,184 ,184 ,186 ,186 ,188 ,188 ,189 ,191 ,191 ,192 ,194 ,194 ,196 ,197 ,197 ,199 ,200 ,201 ,202 ,203 ,204 ,205 ,207 ,207 ,208 ,209 ,210 ,212 ,213 ,214 ,215 ,216 ,217 ,218 ,220 ,221 ,222 ,223 ,224 ,225 ,226 ,228 ,229 ,230 ,231 ,233 ,234 ,235 ,236 ,238 ,239 ,240 ,241 ,242 ,244 ,245 ,246 ,248 ,249 ,250 ,251 ,253 ,254 ,255};
10+
11+
auto image_display = ImageDisplay::make();
12+
auto image_display_pointer = image_display.get();
13+
image_display->set_color_filter(SkColorFilters::Table(dicom_compliant_conversion));
14+
igtlink_viewer->set_color_filter(SkColorFilters::Table(dicom_compliant_conversion));
15+
16+
auto displaycontainer = Container::make(Container::ContainerType::LINEAR_CONTAINER,Container::Arrangement::HORIZONTAL);
17+
*displaycontainer << std::move(igtlink_viewer) << std::move(image_display);
18+
displaycontainer->set_divisions({ 0.0 , 0.5 , 1.0 });
19+
20+
processing = std::make_shared<ProcessingMessage>(image_display_pointer,igtlink_viewer_pointer);
21+
processing->port = 18944;
22+
23+
auto start_connection_callback = [processing](Button* button, Press press ,ConfigDraw* config) {
24+
if (!processing->connection_status.value()) {
25+
processing->pool->submit("connection thread",[processing]() { processing->communicate();});
26+
}
27+
else {
28+
processing->attempt_stop();
29+
processing->connection_status.set(false);
30+
}
31+
};
32+
33+
auto start_connection = Button::make("Connect",resources);
34+
start_connection->set_click_color(SK_ColorGRAY)
35+
.set_hover_color(SK_ColorDKGRAY)
36+
.set_waiting_color(SK_ColorBLACK)
37+
.set_size(SkRect::MakeWH(100, 80));
38+
start_connection->add_press_call(start_connection_callback);
39+
auto start_connection_pointer = start_connection.get();
40+
41+
auto record_images = Button::make("Record",resources);
42+
record_images->set_click_color(SK_ColorGRAY)
43+
.set_hover_color(SK_ColorDKGRAY)
44+
.set_waiting_color(SkColorSetARGB(0xFF, 0x00, 0xFF, 0xFF))
45+
.set_size(SkRect::MakeWH(100, 80));
46+
record_images->add_press_call([processing](Button* button, Press press ,ConfigDraw* config){
47+
processing->record_images = !processing->record_images;
48+
if(processing->record_images)
49+
button->set_waiting_color(SkColorSetARGB(0xF0, 0x00, 0xFF, 0xFF));
50+
else
51+
button->set_waiting_color(SkColorSetARGB(0xFF, 0x00, 0xFF, 0xFF));
52+
});
53+
54+
55+
auto buttoncontainer = Container::make(Container::ContainerType::LINEAR_CONTAINER,Container::Arrangement::HORIZONTAL);
56+
*buttoncontainer << std::move(start_connection) << std::move(record_images);
57+
buttoncontainer->set_shader_colors({SkColorSetRGB(225, 225, 225), SkColorSetRGB(246, 246, 246)});
58+
processing->button = start_connection_pointer;
59+
60+
start_connection_pointer->set_waiting_color(SK_ColorRED);
61+
62+
auto widgetcontainer = Container::make(Container::ContainerType::LINEAR_CONTAINER,Container::Arrangement::VERTICAL);
63+
*widgetcontainer << std::move(buttoncontainer) << std::move(displaycontainer);
64+
widgetcontainer->set_divisions({ 0.0 , 0.1 , 1.0 });
65+
66+
return Page{std::move(widgetcontainer),SK_ColorBLACK};
67+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#ifndef CURAN_CALIBRATEPAGES_HEADER_FILE_
2+
#define CURAN_CALIBRATEPAGES_HEADER_FILE_
3+
4+
#include "MessageProcessing.h"
5+
#include "userinterface/widgets/IconResources.h"
6+
7+
curan::ui::Page create_main_page(std::shared_ptr<ProcessingMessage>& processing,curan::ui::IconResources& resources);
8+
9+
#endif

0 commit comments

Comments
 (0)