vincentgao95 commited on
Commit
f83d212
·
verified ·
1 Parent(s): 1b40516

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -30
app.py CHANGED
@@ -12,31 +12,34 @@ def load_nrrd(file_obj):
12
  data, _ = nrrd.read(file_obj)
13
  return data
14
 
15
- def visualize_slice(file_obj, slice_index, view):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  data = load_nrrd(file_obj)
17
-
18
- # Choose the appropriate slice based on the selected view
19
- if view == "Axial":
20
- num_slices = data.shape[2]
21
- slice_index = min(max(0, slice_index), num_slices - 1)
22
- slice_image = data[:, :, slice_index]
23
- elif view == "Coronal":
24
- num_slices = data.shape[1]
25
- slice_index = min(max(0, slice_index), num_slices - 1)
26
- slice_image = data[:, slice_index, :]
27
- elif view == "Sagittal":
28
- num_slices = data.shape[0]
29
- slice_index = min(max(0, slice_index), num_slices - 1)
30
- slice_image = data[slice_index, :, :]
31
-
32
  # Plot the slice
33
- fig, ax = plt.subplots(figsize=(5, 5 * slice_image.shape[0] / slice_image.shape[1])) # Keep aspect ratio
34
  ax.imshow(slice_image, cmap='gray')
35
  plt.axis('off')
36
 
37
  # Convert matplotlib figure to PIL Image
38
  buf = io.BytesIO()
39
- fig.savefig(buf, format='png', bbox_inches='tight', pad_inches=0)
40
  plt.close(fig)
41
  buf.seek(0)
42
  pil_img = Image.open(buf)
@@ -45,26 +48,22 @@ def visualize_slice(file_obj, slice_index, view):
45
 
46
  def update_slider(file_obj, view):
47
  data = load_nrrd(file_obj)
48
- if view == "Axial":
49
- max_slices = data.shape[2]
50
- elif view == "Coronal":
51
- max_slices = data.shape[1]
52
- elif view == "Sagittal":
53
- max_slices = data.shape[0]
54
- return gr.update(maximum=max_slices-1, value=0)
55
 
56
  with gr.Blocks() as app:
57
- gr.Markdown("## NRRD Slice Visualizer with View Selector")
58
- gr.Markdown("Upload an NRRD file, select a view (Axial, Coronal, Sagittal), and use the slider to select and visualize slices.")
59
 
60
  file_input = gr.File(label="Upload NRRD File")
61
- view_selector = gr.Radio(choices=["Axial", "Coronal", "Sagittal"], value="Axial", label="View Selector")
62
  slider = gr.Slider(minimum=0, maximum=1, step=1, value=0, label="Slice Selector")
63
  image_output = gr.Image(type="pil", label="Selected Slice")
64
 
65
  file_input.change(fn=update_slider, inputs=[file_input, view_selector], outputs=slider)
66
  view_selector.change(fn=update_slider, inputs=[file_input, view_selector], outputs=slider)
67
- view_selector.change(fn=visualize_slice, inputs=[file_input, slider, view_selector], outputs=image_output)
68
- slider.change(fn=visualize_slice, inputs=[file_input, slider, view_selector], outputs=image_output)
 
69
 
70
  app.launch()
 
12
  data, _ = nrrd.read(file_obj)
13
  return data
14
 
15
+ def get_num_slices(data, view):
16
+ if view == 'Axial':
17
+ return data.shape[2]
18
+ elif view == 'Coronal':
19
+ return data.shape[1]
20
+ elif view == 'Sagittal':
21
+ return data.shape[0]
22
+
23
+ def extract_slice(data, view, slice_index):
24
+ if view == 'Axial':
25
+ return data[:, :, slice_index]
26
+ elif view == 'Coronal':
27
+ return data[:, slice_index, :]
28
+ elif view == 'Sagittal':
29
+ return data[slice_index, :, :]
30
+
31
+ def visualize_slice(file_obj, view, slice_index):
32
  data = load_nrrd(file_obj)
33
+ slice_image = extract_slice(data, view, slice_index)
34
+
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  # Plot the slice
36
+ fig, ax = plt.subplots()
37
  ax.imshow(slice_image, cmap='gray')
38
  plt.axis('off')
39
 
40
  # Convert matplotlib figure to PIL Image
41
  buf = io.BytesIO()
42
+ fig.savefig(buf, format='png')
43
  plt.close(fig)
44
  buf.seek(0)
45
  pil_img = Image.open(buf)
 
48
 
49
  def update_slider(file_obj, view):
50
  data = load_nrrd(file_obj)
51
+ num_slices = get_num_slices(data, view)
52
+ return gr.update(maximum=num_slices-1, value=0)
 
 
 
 
 
53
 
54
  with gr.Blocks() as app:
55
+ gr.Markdown("## NRRD Slice Visualizer")
56
+ gr.Markdown("Upload an NRRD file, select a view, and use the slider to select and visualize slices.")
57
 
58
  file_input = gr.File(label="Upload NRRD File")
59
+ view_selector = gr.Radio(choices=["Axial", "Coronal", "Sagittal"], label="View Selector", value="Axial")
60
  slider = gr.Slider(minimum=0, maximum=1, step=1, value=0, label="Slice Selector")
61
  image_output = gr.Image(type="pil", label="Selected Slice")
62
 
63
  file_input.change(fn=update_slider, inputs=[file_input, view_selector], outputs=slider)
64
  view_selector.change(fn=update_slider, inputs=[file_input, view_selector], outputs=slider)
65
+ file_input.change(fn=visualize_slice, inputs=[file_input, view_selector, slider], outputs=image_output)
66
+ slider.change(fn=visualize_slice, inputs=[file_input, view_selector, slider], outputs=image_output)
67
+ view_selector.change(fn=visualize_slice, inputs=[file_input, view_selector, slider], outputs=image_output)
68
 
69
  app.launch()