mia_gui.m
来自「医学图像处理matlab工具箱」· M 代码 · 共 1,571 行 · 第 1/5 页
M
1,571 行
handles.ROI(handles.CurrentSlice,handles.CurrentROIColor).yi = yi/matsize2;
LineHandler = line(xi,yi,'LineWidth',3,'Color',handles.ROIColorStrings(handles.CurrentROIColor));
handles.Lines(handles.CurrentSlice,handles.CurrentROIColor).lh = LineHandler;
% Update handles structure
guidata(hObject, handles);
if ~handles.zoom
%turns on interactive display of information about image pixels
%set(get(handles.ImaAxes,'children'),'EraseMode','none');
mia_pixval(handles.ImaHandler,'on');
end
set(handles.ImaAxes,'selected','on');
% --------------------------------------------------------------------
function FileMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function CloseMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection = questdlg(['Close ' get(handles.mia_figure1,'Name') '?'],...
['Close ' get(handles.mia_figure1,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
scrsz = get(0,'ScreenSize');
%figure('Position',[1 scrsz(4)/8 scrsz(3)/8 scrsz(4)/8]);
delete(handles.mia_figure1);
%if hardware opengl processing was turn out at startup
%this should turn back
if handles.openglinfo.UseGenericOpenGL == 1;
feature('UseGenericOpenGL',0);
end
% --------------------------------------------------------------------
function ROIMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function DeleteAllROIMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% inititate the ROI parameters
if isfield(handles,'FileNames')
%set(get(handles.ImaAxes,'children'),'EraseMode','normal');
for i =1: handles.scaninfo(1).num_of_slice
for j=1:handles.ROINumOfColor
if ~isempty(handles.ROI(i,j).BW )
handles.ROI(i,j).BW = [];
handles.ROI(i,j).xi = [];
handles.ROI(i,j).yi = [];
delete(handles.Lines(i,j).lh);
handles.Lines(i,j).lh = [];
end
end
end
% delete the TAC values for VOIs
for j=1:handles.ROINumOfColor
handles.VOI(j).tac = [];
handles.VOI(j).tacstd = [];
handles.VOI(j).tacmin = [];
handles.VOI(j).tacmax = [];
handles.VOI(j).tacvolume = [];
end
%set(get(handles.ImaAxes,'children'),'EraseMode','none');
% Update handles structure
guidata(handles.mia_figure1, handles);
end
% --- Executes on key press over mia_figure1 with no controls selected.
function mia_figure1_KeyPressFcn(hObject, eventdata, handles)
% hObject handle to mia_figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global gVOIpixval;
if isfield(handles,'FileNames')
current_key = double(get(handles.mia_figure1,'CurrentCharacter'));
PreviousSlice = handles.CurrentSlice;
if current_key == 30 %UP arrow was pressed: Slice+
if handles.CurrentImgIdx < handles.scaninfo.num_of_slice*handles.scaninfo.Frames
handles.CurrentImgIdx = handles.CurrentImgIdx +1;
else
handles.CurrentImgIdx = 1;
end
elseif current_key == 31 %DOWN arrow was pressed: Slice-
if handles.CurrentImgIdx > 1
handles.CurrentImgIdx = handles.CurrentImgIdx - 1;
else
handles.CurrentImgIdx = handles.scaninfo.num_of_slice*handles.scaninfo.Frames;
end
elseif current_key == 28 %LEFT arrow was pressed: Frame-
if handles.CurrentImgIdx > handles.scaninfo.num_of_slice
handles.CurrentImgIdx = handles.CurrentImgIdx - handles.scaninfo.num_of_slice;
else
handles.CurrentImgIdx = handles.scaninfo.num_of_slice*(handles.scaninfo.Frames-1)+handles.CurrentSlice;
end
elseif current_key == 29 %RIGHT arrow was pressed: Frame+
if handles.CurrentImgIdx < handles.scaninfo.num_of_slice*(handles.scaninfo.Frames-1)
handles.CurrentImgIdx = handles.CurrentImgIdx + handles.scaninfo.num_of_slice;
else
handles.CurrentImgIdx = handles.CurrentSlice;
end
elseif current_key == 32 %SPACE was pressed:
return;
end
CurrentImage = handles.imaVOL(:,:,handles.CurrentImgIdx);
SliderPosMin = get(handles.ColorBarMinSlider,'Value');
SliderPosMax = get(handles.ColorBarMaxSlider,'Value');
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn1);
set(handles.ImaHandler,'CData',CurrentImage_RGB);
% set the currentimage for gVOIpixval
gVOIpixval.CurrentImage = CurrentImage;
if isfield(handles,'FileNames2')
SliderPosMax = get(handles.ColorBarMax2Slider,'Value');
SliderPosMin = get(handles.ColorBarMin2Slider,'Value');
CurrentImage = double(handles.imaVOL2(:,:,handles.CurrentSlice));
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn2);
set(handles.ImaHandler2,'CData',CurrentImage_RGB);
end
handles.CurrentSlice = mod(handles.CurrentImgIdx,handles.scaninfo.num_of_slice);
handles.CurrentFrame = fix(handles.CurrentImgIdx/handles.scaninfo.num_of_slice)+1;
if handles.CurrentSlice == 0
handles.CurrentSlice = handles.scaninfo.num_of_slice;
handles.CurrentFrame = handles.CurrentFrame -1;
end
set(handles.CurrentFrameEdit,'String',handles.CurrentFrame);
set(handles.CurrentSliceEdit,'String',handles.CurrentSlice);
set(handles.SliceSlider,'value',handles.CurrentSlice);
if handles.scaninfo.Frames > 1 % dynamic scan
set(handles.CurrentFrameTimeEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.tissue_ts(handles.CurrentFrame)/60));%min
set(handles.CurrentFrameLengthEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.frame_lengths(handles.CurrentFrame)/60));%min
set(handles.FrameSlider,'value',handles.CurrentFrame);
end
%redraw the ROI if exist on the current slide
for j = 1: handles.ROINumOfColor
if ~isempty(handles.Lines(PreviousSlice,j).lh)
set(handles.Lines(PreviousSlice,j).lh,'visible','off');
end
if ~isempty(handles.Lines(handles.CurrentSlice,j).lh)
set(handles.Lines(handles.CurrentSlice,j).lh,'visible','on');
end
end
% Update handles structure
guidata(hObject, handles);
end
% --- Executes during object creation, after setting all properties.
function CurrentFrameEdit_CreateFcn(hObject, eventdata, handles)
% hObject handle to CurrentFrameEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function CurrentFrameEdit_Callback(hObject, eventdata, handles)
% hObject handle to CurrentFrameEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of CurrentFrameEdit as text
% str2double(get(hObject,'String')) returns contents of CurrentFrameEdit as a double
global gVOIpixval;
if isfield(handles,'FileNames')
if str2double(get(handles.CurrentFrameEdit,'String')) > handles.scaninfo.Frames
set(handles.CurrentFrameEdit,'String',handles.CurrentFrame);
set(handles.ImaAxes,'selected','on');
return;
end
handles.CurrentSlice = str2double(get(handles.CurrentSliceEdit,'String'));
handles.CurrentFrame = str2double(get(handles.CurrentFrameEdit,'String'));;
handles.CurrentImgIdx = handles.scaninfo.num_of_slice*(handles.CurrentFrame-1) + handles.CurrentSlice;
%refresh the image
SliderPosMax = get(handles.ColorBarMaxSlider,'Value');
SliderPosMin = get(handles.ColorBarMinSlider,'Value');
CurrentImage = double(handles.imaVOL(:,:,handles.CurrentImgIdx));
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn1);
set(handles.ImaHandler,'CData',CurrentImage_RGB);
set(handles.CurrentFrameEdit,'String',handles.CurrentFrame);
set(handles.CurrentSliceEdit,'String',handles.CurrentSlice);
if handles.scaninfo.Frames > 1 % dynamic scan
set(handles.CurrentFrameTimeEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.tissue_ts(handles.CurrentFrame)/60));%min
set(handles.CurrentFrameLengthEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.frame_lengths(handles.CurrentFrame)/60));%min
end
% set the currentimage for gVOIpixval
gVOIpixval.CurrentImage = CurrentImage;
if isfield(handles,'FileNames2')
SliderPosMax = get(handles.ColorBarMax2Slider,'Value');
SliderPosMin = get(handles.ColorBarMin2Slider,'Value');
CurrentImage = double(handles.imaVOL2(:,:,handles.CurrentSlice));
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn2);
set(handles.ImaHandler2,'CData',CurrentImage_RGB);
end
set(handles.ImaAxes,'selected','on');
% Update handles structure
guidata(hObject, handles);
end
% --- Executes during object creation, after setting all properties.
function CurrentSliceEdit_CreateFcn(hObject, eventdata, handles)
% hObject handle to CurrentSliceEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function CurrentSliceEdit_Callback(hObject, eventdata, handles)
% hObject handle to CurrentSliceEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of CurrentSliceEdit as text
% str2double(get(hObject,'String')) returns contents of CurrentSliceEdit as a double
global gVOIpixval;
if isfield(handles,'FileNames')
if str2double(get(handles.CurrentSliceEdit,'String')) > handles.scaninfo.num_of_slice
set(handles.CurrentSliceEdit,'String',handles.CurrentSlice);
set(handles.ImaAxes,'selected','on');
return;
end
handles.CurrentSlice = str2double(get(handles.CurrentSliceEdit,'String'));
handles.CurrentFrame = str2double(get(handles.CurrentFrameEdit,'String'));;
handles.CurrentImgIdx = handles.scaninfo.num_of_slice*(handles.CurrentFrame-1) + handles.CurrentSlice;
%refresh the image
SliderPosMax = get(handles.ColorBarMaxSlider,'Value');
SliderPosMin = get(handles.ColorBarMinSlider,'Value');
CurrentImage = double(handles.imaVOL(:,:,handles.CurrentImgIdx));
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn1);
set(handles.ImaHandler,'CData',CurrentImage_RGB);
% set the currentimage for gVOIpixval
gVOIpixval.CurrentImage = CurrentImage;
if isfield(handles,'FileNames2')
SliderPosMax = get(handles.ColorBarMax2Slider,'Value');
SliderPosMin = get(handles.ColorBarMin2Slider,'Value');
CurrentImage = double(handles.imaVOL2(:,:,handles.CurrentSlice));
CurrentImage_RGB = ImageRefresh(CurrentImage,SliderPosMax,SliderPosMin,handles.ColorRes,handles.ColormapIn2);
set(handles.ImaHandler2,'CData',CurrentImage_RGB);
end
set(handles.ImaAxes,'selected','on');
set(handles.CurrentFrameEdit,'String',handles.CurrentFrame);
set(handles.CurrentSliceEdit,'String',handles.CurrentSlice);
set(handles.SliceSlider,'value',handles.CurrentSlice);
if handles.scaninfo.Frames > 1 % dynamic scan
set(handles.CurrentFrameTimeEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.tissue_ts(handles.CurrentFrame)/60));%min
set(handles.CurrentFrameLengthEdit,'String', ...
sprintf('%1.2f',handles.scaninfo.frame_lengths(handles.CurrentFrame)/60));%min
set(handles.FrameSlider,'value',handles.CurrentFrame);
end
% Update handles structure
guidata(hObject, handles);
end
function StepImage(event, handles)
% event - where and what should be step
% handles - structure with handles and user data (see GUIDATA)
global gVOIpixval;
PreviousSlice = handles.CurrentSlice;
if strcmp(event,'NextSlice') % slice+
if handles.CurrentImgIdx < handles.scaninfo.num_of_slice*handles.scaninfo.Frames
handles.CurrentImgIdx = handles.CurrentImgIdx +1;
else
handles.CurrentImgIdx = 1;
end
elseif strcmp(event,'PreviousSlice') % Slice-
if handles.CurrentImgIdx > 1
handles.CurrentImgIdx = handles.CurrentImgIdx - 1;
else
handles.CurrentImgIdx = handles.scaninfo.num_of_slice*handles.scaninfo.Frames;
end
elseif strcmp(event,'PreviousFrame') % Frame-
if handles.CurrentImgIdx > handles.scaninfo.num_of_slice
handles.CurrentImgIdx = handles.CurrentImgIdx - handles.scaninfo.num_of_slice;
else
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?