Commit 121e33b4adcd1413c5014f5916ece3aeaa981a89
1 parent
0eeb3ff4
Exists in
master
ICP matrix send in a queue
Showing
4 changed files
with
21 additions
and
19 deletions
Show diff stats
invesalius/data/bases.py
... | ... | @@ -264,9 +264,9 @@ def flip_x_m(point): |
264 | 264 | return point_rot |
265 | 265 | |
266 | 266 | def transform_icp(m_img, m_icp): |
267 | - coord_img = np.hstack((flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]]), 1.)).reshape([4, 1]) | |
267 | + coord_img = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]]) | |
268 | 268 | m_img[0, -1], m_img[1, -1], m_img[2, -1], _ = m_icp @ coord_img |
269 | - m_img[0, -1], m_img[1, -1], m_img[2, -1] = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]]) | |
269 | + m_img[0, -1], m_img[1, -1], m_img[2, -1], _ = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]]) | |
270 | 270 | |
271 | 271 | return m_img |
272 | 272 | ... | ... |
invesalius/data/coordinates.py
... | ... | @@ -259,7 +259,7 @@ def DebugCoord(trk_init, trck_id, ref_mode): |
259 | 259 | coord4 = np.array([uniform(*dx), uniform(*dx), uniform(*dx), |
260 | 260 | uniform(*dt), uniform(*dt), uniform(*dt)]) |
261 | 261 | |
262 | - sleep(0.05) | |
262 | + sleep(0.15) | |
263 | 263 | |
264 | 264 | # coord1 = np.array([uniform(1, 200), uniform(1, 200), uniform(1, 200), |
265 | 265 | # uniform(-180.0, 180.0), uniform(-180.0, 180.0), uniform(-180.0, 180.0)]) | ... | ... |
invesalius/data/coregistration.py
... | ... | @@ -216,7 +216,7 @@ class CoordinateCorregistrate(threading.Thread): |
216 | 216 | |
217 | 217 | |
218 | 218 | class CoordinateCorregistrateNoObject(threading.Thread): |
219 | - def __init__(self, ref_mode_id, trck_info, coreg_data, coord_queue, view_tracts, coord_tracts_queue, event, sle, icp = None, m_icp = None): | |
219 | + def __init__(self, ref_mode_id, trck_info, coreg_data, coord_queue, view_tracts, coord_tracts_queue, event, sle, icp_queue): | |
220 | 220 | threading.Thread.__init__(self, name='CoordCoregNoObject') |
221 | 221 | self.ref_mode_id = ref_mode_id |
222 | 222 | self.trck_info = trck_info |
... | ... | @@ -226,16 +226,9 @@ class CoordinateCorregistrateNoObject(threading.Thread): |
226 | 226 | self.coord_tracts_queue = coord_tracts_queue |
227 | 227 | self.event = event |
228 | 228 | self.sle = sle |
229 | - self.m_icp = m_icp | |
230 | - self.icp = icp | |
231 | - | |
232 | - def __bind_events(self): | |
233 | - Publisher.subscribe(self.UpdateICP, 'Update ICP matrix') | |
234 | - | |
235 | - def UpdateICP(self, m_icp, flag): | |
236 | - print('oi') | |
237 | - self.m_icp = m_icp | |
238 | - self.icp = flag | |
229 | + self.icp_queue = icp_queue | |
230 | + self.icp = None | |
231 | + self.m_icp = None | |
239 | 232 | |
240 | 233 | def run(self): |
241 | 234 | trck_info = self.trck_info |
... | ... | @@ -246,13 +239,19 @@ class CoordinateCorregistrateNoObject(threading.Thread): |
246 | 239 | # print('CoordCoreg: event {}'.format(self.event.is_set())) |
247 | 240 | while not self.event.is_set(): |
248 | 241 | try: |
242 | + if self.icp_queue.empty(): | |
243 | + None | |
244 | + else: | |
245 | + self.icp, self.m_icp = self.icp_queue.get_nowait() | |
249 | 246 | # print(f"Set the coordinate") |
247 | + print(self.icp, self.m_icp) | |
250 | 248 | coord_raw = dco.GetCoordinates(trck_init, trck_id, trck_mode) |
251 | 249 | coord, m_img = corregistrate_dynamic(coreg_data, coord_raw, self.ref_mode_id, [self.icp, self.m_icp]) |
252 | 250 | # print("Coord: ", coord) |
253 | 251 | m_img_flip = m_img.copy() |
254 | 252 | m_img_flip[1, -1] = -m_img_flip[1, -1] |
255 | - print(self.icp) | |
253 | + | |
254 | + #print(icp) | |
256 | 255 | if self.icp: |
257 | 256 | m_img = bases.transform_icp(m_img, self.m_icp) |
258 | 257 | |
... | ... | @@ -261,6 +260,8 @@ class CoordinateCorregistrateNoObject(threading.Thread): |
261 | 260 | if self.view_tracts: |
262 | 261 | self.coord_tracts_queue.put_nowait(m_img_flip) |
263 | 262 | |
263 | + if not self.icp_queue.empty(): | |
264 | + self.icp_queue.task_done() | |
264 | 265 | # The sleep has to be in both threads |
265 | 266 | sleep(self.sle) |
266 | 267 | except queue.Full: | ... | ... |
invesalius/gui/task_navigator.py
... | ... | @@ -308,10 +308,10 @@ class NeuronavigationPanel(wx.Panel): |
308 | 308 | self.obj_reg = None |
309 | 309 | self.obj_reg_status = False |
310 | 310 | self.track_obj = False |
311 | - self.m_icp = None | |
312 | 311 | self.event = threading.Event() |
313 | 312 | |
314 | 313 | self.coord_queue = QueueCustom(maxsize=1) |
314 | + self.icp_queue = QueueCustom(maxsize=1) | |
315 | 315 | # self.visualization_queue = QueueCustom(maxsize=1) |
316 | 316 | self.trigger_queue = QueueCustom(maxsize=1) |
317 | 317 | self.coord_tracts_queue = QueueCustom(maxsize=1) |
... | ... | @@ -689,6 +689,7 @@ class NeuronavigationPanel(wx.Panel): |
689 | 689 | self.icp = False |
690 | 690 | dcr.CoordinateCorregistrateNoObject.icp = False |
691 | 691 | |
692 | + self.icp_queue.put_nowait([self.icp, self.m_icp]) | |
692 | 693 | print(self.icp, self.m_icp) |
693 | 694 | Publisher.sendMessage("Update ICP matrix", m_icp=self.m_icp, flag=self.icp) |
694 | 695 | |
... | ... | @@ -701,7 +702,7 @@ class NeuronavigationPanel(wx.Panel): |
701 | 702 | # initialize jobs list |
702 | 703 | jobs_list = [] |
703 | 704 | vis_components = [self.trigger_state, self.view_tracts] |
704 | - vis_queues = [self.coord_queue, self.trigger_queue, self.tracts_queue] | |
705 | + vis_queues = [self.coord_queue, self.trigger_queue, self.tracts_queue, self.icp_queue] | |
705 | 706 | |
706 | 707 | nav_id = btn_nav.GetValue() |
707 | 708 | if not nav_id: |
... | ... | @@ -815,7 +816,7 @@ class NeuronavigationPanel(wx.Panel): |
815 | 816 | jobs_list.append(dcr.CoordinateCorregistrateNoObject(self.ref_mode_id, tracker_mode, coreg_data, |
816 | 817 | self.coord_queue, |
817 | 818 | self.view_tracts, self.coord_tracts_queue, |
818 | - self.event, self.sleep_nav)) | |
819 | + self.event, self.sleep_nav, self.icp_queue)) | |
819 | 820 | |
820 | 821 | if not errors: |
821 | 822 | #TODO: Test the trigger thread |
... | ... | @@ -1937,7 +1938,7 @@ class UpdateNavigationScene(threading.Thread): |
1937 | 1938 | |
1938 | 1939 | threading.Thread.__init__(self, name='UpdateScene') |
1939 | 1940 | self.trigger_state, self.view_tracts = vis_components |
1940 | - self.coord_queue, self.trigger_queue, self.tracts_queue = vis_queues | |
1941 | + self.coord_queue, self.trigger_queue, self.tracts_queue, self.icp_queue = vis_queues | |
1941 | 1942 | self.sle = sle |
1942 | 1943 | self.event = event |
1943 | 1944 | ... | ... |