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 + -
显示快捷键?