function BODisplayStack(image3D) % BODisplayStack - launch display of the stack of 2D images % % Boguslaw Obara, http://boguslawobara.net/ % % Help: % BODisplayStack(image3D) % input: 3D image % Example: % image3D=rand(100,100,45); % BODisplayStack(image3D); % % Version: % 0.1 - 14/09/2007 First implementation % 0.2 - 05/11/2007 Update of slider events %% Path %% GUI Elements bods.scxy=get(0,'ScreenSize'); bods.xw=600; bods.yw=725; bods.xs=(bods.scxy(1,3)-bods.xw)/2; bods.ys=(bods.scxy(1,4)-bods.yw)/2; bods.units='pixels'; bods.figure=figure('Name','BODisplayStack','MenuBar','none','Toolbar','none',... 'Units',bods.units,'NumberTitle','off','Position',[bods.xs bods.ys bods.xw bods.yw],... 'Resize','off','Color', get(0, 'defaultuicontrolbackgroundcolor')); bods.slider=uicontrol('Parent',bods.figure,'Style','slider','Units',bods.units,... 'Position',[570 round(bods.yw/2)-150 30 300],'Min',0,'Max',1,'Value',0,'Callback',@bods_slider); %% Set Parameters if ~exist('image3D') bods.image3D=rand(100,100,45); else bods.image3D=image3D; end bods.number=size(bods.image3D,3); bods.ncf=3; bods.nrf=4; bods.slice_ix=0; bods.axes_s=bods.ncf*bods.nrf; if(bods.number <= 12) bods.axes_s=bods.number; set(bods.slider, 'Visible', 'off'); elseif(bods.number > 12 && bods.number <= 24) set(bods.slider, 'SliderStep', [1 1]); else set(bods.slider, 'SliderStep', [double(bods.ncf*bods.nrf/(bods.number-bods.ncf*bods.nrf)) double(bods.ncf*bods.nrf/(bods.number-bods.ncf*bods.nrf))]); end %% %% Initialization bods_axes(); bods_slider(bods.slider,'') %% Create Axes function bods_axes() k=0; x_start=20; y_start=5; x_times=0; y_times=0; axes_s=160; for r=1:bods.nrf for c=1:bods.ncf k=k+1; y1=y_start+y_times*axes_s+y_times*20; x1=x_start+x_times*axes_s+x_times*20; x_times=x_times+1; bods.axes(k)=axes('Parent',bods.figure,'Units',bods.units,... 'Position',[x1 y1 axes_s axes_s],'XTick',[],'YTick',[]); bods.text(k)=uicontrol('Parent',bods.figure,'Style','text','Units',bods.units,... 'Position',[x1+round(axes_s/2)-25 y1+axes_s+5 50 12],... 'String', num2str(k),'HorizontalAlignment','center'); if rem(k,bods.ncf)==0 x_times=0; y_times=y_times+1; end end end end %% Slider Event function bods_slider(obj,event) for i=1:bods.ncf*bods.nrf axes(bods.axes(i)); imagesc(zeros(10,10)), colormap jet; axis image; set(bods.axes(i),'XTick',[],'YTick',[]); set(bods.text(i),'String',''); end if strcmp(get(bods.slider, 'Visible'),'on') index_s = get(obj,'Value'); bods.slice_ix=round(index_s*double(bods.number-bods.ncf*bods.nrf)); if bods.slice_ix>(bods.number-bods.ncf*bods.nrf) bods.slice_ix=bods.number-bods.ncf*bods.nrf; end end for i=1:bods.axes_s axes(bods.axes(i)); imagesc(bods.image3D(:,:,bods.slice_ix+i)), colormap jet; axis image; set(bods.axes(i),'XTick',[],'YTick',[]); set(bods.text(i),'String',num2str((bods.slice_ix+i))); end end %% end