Skip to content

Commit

Permalink
Merge branch 'main' into 1966_ExecutionTimer
Browse files Browse the repository at this point in the history
  • Loading branch information
ashmeigh authored Feb 14, 2024
2 parents 911ccbb + 694f3c6 commit 7f7b4d0
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 12 deletions.
1 change: 1 addition & 0 deletions docs/release_notes/next/fix-2030-slow-imageview
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#2031 : Speed up imageview by avoiding unneeded calculation
2 changes: 1 addition & 1 deletion mantidimaging/gui/widgets/mi_image_view/test/view_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def test_set_roi(self):
self.view.roi.setSize.assert_called_once_with([right - left, bottom - top])
self.view._update_roi_region_avg.assert_called_once()
self.view.roi_changed_callback.assert_called_once()
self.view._update_message.assert_called_once()
self.view._update_message.assert_called()

def test_default_roi(self):
image = np.zeros((1, 50, 50))
Expand Down
36 changes: 25 additions & 11 deletions mantidimaging/gui/widgets/mi_image_view/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,7 @@ def toggle_jumping_frame(self, images_to_jump_by=None):
sleep(0.02)
QApplication.processEvents()

def _refresh_message(self, recalculate_roi_avg: bool = True):
if recalculate_roi_avg:
self._update_roi_region_avg()
def _refresh_message(self):
try:
self._update_message(self._last_mouse_hover_location)
except IndexError:
Expand All @@ -196,6 +194,7 @@ def roiChanged(self):
roi = self._update_roi_region_avg()
if self.roi_changed_callback and roi is not None:
self.roi_changed_callback(roi)
self._refresh_message()

def _update_roi_region_avg(self) -> Optional[SensibleROI]:
if self.image.ndim != 3:
Expand All @@ -204,16 +203,31 @@ def _update_roi_region_avg(self) -> Optional[SensibleROI]:
# image indices are in order [Z, X, Y]
left, right = roi_pos.x, roi_pos.x + roi_size.x
top, bottom = roi_pos.y, roi_pos.y + roi_size.y
data = self.image[:, top:bottom, left:right]
if data is not None:
while data.ndim > 1:
data = data.mean(axis=1)

if self.roi.isVisible():
z_value = int(self.timeLine.value())
mean_val = self.image[z_value, top:bottom, left:right].mean()
self.roiString = f"({left}, {top}, {right}, {bottom}) | " \
f"region avg={mean_val:.6f}"

if self.ui.roiBtn.isChecked():
data = self.image[:, top:bottom, left:right].mean(axis=(1, 2))

if len(self.roiCurves) == 0:
self.roiCurves.append(self.ui.roiPlot.plot())
self.roiCurves[0].setData(y=data, x=self.tVals)
self.roiString = f"({left}, {top}, {right}, {bottom}) | " \
f"region avg={data[int(self.timeLine.value())].mean():.6f}"
return SensibleROI(left, top, right, bottom)

if self.roi.isVisible() or self.ui.roiBtn.isChecked():
return SensibleROI(left, top, right, bottom)
else:
return None

def roiClicked(self):
# When ROI area is hidden with the button, clear the message
if not self.ui.roiBtn.isChecked() and hasattr(self, "_last_mouse_hover_location"):
self.roiString = None
self._refresh_message()
super().roiClicked()

def extend_roi_plot_mouse_press_handler(self):
original_handler = self.ui.roiPlot.mousePressEvent
Expand Down Expand Up @@ -281,7 +295,7 @@ def set_roi(self, coords: list[int]):
# Keep default update=True for setSize otherwise the scale handle can become detached from the ROI box
self.roi.setSize([roi.width, roi.height])
self.roiChanged()
self._refresh_message(False)
self._refresh_message()

def default_roi(self):
# Recommend an ROI that covers the top left quadrant
Expand Down
2 changes: 2 additions & 0 deletions mantidimaging/gui/widgets/roi_selector/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ def __init__(self,
button.clicked.connect(lambda: self.close())
self.roi_view.ui.gridLayout.addWidget(button)

self.roi_view.roiChanged()

def toggle_average_images(self) -> None:
self.roi_view.setImage(self.main_image if self.roi_view_averaged else self.averaged_image)
self.roi_view_averaged = not self.roi_view_averaged
Expand Down
2 changes: 2 additions & 0 deletions mantidimaging/gui/windows/stack_choice/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ def __init__(self, original_stack: ImageStack, new_stack: ImageStack,
self.new_stack.roi.sigRegionChanged.connect(self._sync_roi_plot_for_old_stack_with_new_stack)
self.original_stack.roi.sigRegionChanged.connect(self.original_stack.roiChanged)
self.new_stack.roi.sigRegionChanged.connect(self.new_stack.roiChanged)
self.original_stack.roi.sigRegionChanged.connect(self.original_stack.viewbox.update)
self.new_stack.roi.sigRegionChanged.connect(self.new_stack.viewbox.update)

self._sync_both_image_axis()
self._ensure_range_is_the_same()
Expand Down

0 comments on commit 7f7b4d0

Please sign in to comment.