diff --git a/qim3d/gui/local_thickness.py b/qim3d/gui/local_thickness.py index 3aef2b4bbe54f00e729c5f76ef94c61e4160d60f..d49abf04fd97de87b49adec6b6fdd85b4629ddff 100644 --- a/qim3d/gui/local_thickness.py +++ b/qim3d/gui/local_thickness.py @@ -71,13 +71,13 @@ class Interface: session.zpos = zpos return session - def launch(self, **kwargs): + def launch(self, img=None): # Show header if self.show_header: internal_tools.gradio_header(self.title, self.port) # Create gradio interfaces - interface = self.create_interface() + interface = self.create_interface(img=img) # Set gradio verbose level if self.verbose: @@ -89,10 +89,11 @@ class Interface: quiet=quiet, height=self.height, width=self.width, - **kwargs, + show_tips=False, ) - def create_interface(self): + def create_interface(self, img=None): + print(img) with gr.Blocks(css=self.css_path) as gradio_interface: gr.Markdown( "# 3D Local thickness \n Interface for _Fast local thickness in 3D and 2D_ (https://github.com/vedranaa/local-thickness)" @@ -276,6 +277,10 @@ class Session: self.vol_binary = None self.vol_thickness = None self.zpos = 0 + self.vmin = None + self.vmax = None + self.vmin_lt = None + self.vmax_lt = None class Pipeline: @@ -289,16 +294,17 @@ class Pipeline: if session.dark_objects: session.vol = np.invert(session.vol) - if session.flip_z: - session.vol = np.flip(session.vol, axis=0) + # Get min and max values for visualization + session.vmin = np.min(session.vol) + session.vmax = np.max(session.vol) return session - def show_slice(self, vol, z_idx, cmap="viridis"): + def show_slice(self, vol, z_idx, vmin=None, vmax=None, cmap="viridis"): plt.close() fig, ax = plt.subplots(figsize=(self.figsize, self.figsize)) - ax.imshow(vol[z_idx], interpolation="nearest", cmap=cmap) + ax.imshow(vol[z_idx], interpolation="nearest", cmap=cmap, vmin=vmin, vmax=vmax) # Adjustments ax.axis("off") @@ -308,8 +314,14 @@ class Pipeline: def input_viz(self, session): # Generate input visualization - z_idx = int(session.zpos * session.vol.shape[0]) - fig = self.show_slice(vol=session.vol, z_idx=z_idx, cmap=session.cmap_originals) + z_idx = int(session.zpos * (session.vol.shape[0] - 1)) + fig = self.show_slice( + vol=session.vol, + z_idx=z_idx, + cmap=session.cmap_originals, + vmin=session.vmin, + vmax=session.vmax, + ) return fig def make_binary(self, session): @@ -321,7 +333,7 @@ class Pipeline: def binary_viz(self, session): # Generate input visualization - z_idx = int(session.zpos * session.vol_binary.shape[0]) + z_idx = int(session.zpos * (session.vol_binary.shape[0] - 1)) fig = self.show_slice( vol=session.vol_binary, z_idx=z_idx, cmap=session.cmap_originals ) @@ -330,13 +342,21 @@ class Pipeline: def compute_localthickness(self, session): session.vol_thickness = lt.local_thickness(session.vol_binary, session.lt_scale) + # Valus for visualization + session.vmin_lt = np.min(session.vol_thickness) + session.vmax_lt = np.max(session.vol_thickness) + return session def output_viz(self, session): # Generate input visualization - z_idx = int(session.zpos * session.vol_thickness.shape[0]) + z_idx = int(session.zpos * (session.vol_thickness.shape[0] - 1)) fig = self.show_slice( - vol=session.vol_thickness, z_idx=z_idx, cmap=session.cmap_lt + vol=session.vol_thickness, + z_idx=z_idx, + cmap=session.cmap_lt, + vmin=session.vmin_lt, + vmax=session.vmax_lt, ) return fig