📄 polgui_ver1_r14.m
字号:
%--------------------------------------------------------------------------% --- Executes on button press in get_test.% Secure test pointfunction get_test_Callback(hObject, eventdata, handles)% hObject handle to get_test (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 T M redigitize;if isempty(COUNTER) COUNTER=1; endif isempty(COUNTER1) COUNTER1=1; endif (strcmp(handles.s.status,'closed')) handles.s.BytesAvailableFcnCount=48; handles.s.BytesAvailableFcnMode = 'byte'; handles.s.BytesAvailableFcn = {@bytesavailablegui_callback,handles}; fopen(handles.s);end% This loop send request for three successive digitizations which is% averaged and checked for pen movementfor i=1:3,% i% COUNTER1 fprintf(handles.s,'%s','P'); pause(0.2);endif ~isequal(redigitize,1) str_text2=sprintf('\n\n\nGet Cardinal Point LA'); set(handles.text2,'String',str_text2); set(handles.get_la,'Enable','on'); set(handles.get_test,'Enable','off')endguidata(hObject,handles);%--------------------------------------------------------------------------% --- Executes on button press in get_la.% Secure Cardinal Point LA(Left Auricular)function get_la_Callback(hObject, eventdata, handles)% hObject handle to get_la (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 T M redigitize;% This loop send request for three successive digitizations which is% averaged and checked for pen movementfor i=1:3,% i% COUNTER1 fprintf(handles.s,'%s','P'); pause(0.2);endif ~isequal(redigitize,1) str_text2=sprintf('\n\n\nGet Cardinal Point RA'); set(handles.text2,'String',str_text2); set(handles.get_ra,'Enable','on'); set(handles.get_la,'Enable','off')endguidata(hObject,handles);% --- Executes on button press in get_ra.% Secure Cardinal Point RA(Right Auriculur)function get_ra_Callback(hObject, eventdata, handles)% hObject handle to get_ra (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 T M redigitize;% This loop send request for three successive digitizations which is% averaged and checked for pen movementfor i=1:3,% i% COUNTER1 fprintf(handles.s,'%s','P'); pause(0.2);endif ~isequal(redigitize,1) str_text2=sprintf('\n\n\nGet Cardinal Point NASION'); set(handles.text2,'String',str_text2); set(handles.get_nasion,'Enable','on'); set(handles.get_ra,'Enable','off');endguidata(hObject,handles);%--------------------------------------------------------------------------% --- Executes on button press in get_nasion.% Secure Cardinal Point Nasionfunction get_nasion_Callback(hObject, eventdata, handles)% hObject handle to get_nasion (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 T M redigitize;% This loop send request for three successive digitizations which is% averaged and checked for pen movementfor i=1:3,% i% COUNTER1 fprintf(handles.s,'%s','P'); pause(0.2);endif ~isequal(redigitize,1) str_nasion=sprintf('\n\nCARDINAL POINTS OBTAINED\n\nALIGN FRAME TO HEAD CO-ORDINATE SYSTEM'); set(handles.text2,'String',str_nasion); set(handles.align,'Enable','on'); set(handles.get_nasion,'Enable','off');endguidata(hObject,handles);%--------------------------------------------------------------------------% --- Executes on button press in get_montage.% Secure EEG Montagefunction get_montage_Callback(hObject, eventdata, handles)% hObject handle to get_montage (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global LOC DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 T M redigitize k str_modal;set(handles.get_montage,'Enable','off');set(handles.remove,'Enable','Off');while k<=length(handles.needed_loc) % Check if loop is within the EEG montage points count if isequal(k,5) str_modal=sprintf('Get Point %s\nPress ESC to exit',handles.needed_loc(5,:)); str_text2=sprintf('\n\n\n Get Point %s\n\nPress ESC to exit',handles.needed_loc(5,:)); set(handles.text2,'String',str_text2); end pos_size = get(handles.figure1,'Position'); user_response = montage_modaldlg_r14('Title','Digitize','String',str_modal); switch user_response case 'OK' % Digitize Point for i=1:3,% i% COUNTER1 fprintf(handles.s,'%s','P'); pause(0.2); end case 'REMOVE LAST PT' % Remove Last digitized Point% k% LOC% DATA% DATA_TRANSF k=k-1; resultStr= get(handles.points,'String'); resultStr(k) =[]; DATA(k,:)=[]; DATA_TRANSF(k,:)=[]; set(handles.points,'String',resultStr) LOC(k,:)=[]; redigitize=1; COUNTER1=COUNTER1-3; COUNTER=COUNTER-1; case 'No' str_text2=sprintf('\n\nPress STOP to finish digitization\nOR\nGet additional Points'); set(handles.text2,'String',str_text2); set(handles.get_additional,'Enable','Off') break; end pause(0.5); k=k+1; if (redigitize==1) redigitize k=k-1; str_text2=sprintf('\n\n\nRedigitize Point %s\n\nPress ESC to exit',handles.needed_loc(k,:)); str_modal=sprintf('Redigitize Point %s\nPress ESC to exit',handles.needed_loc(k,:)); set(handles.text2,'String',str_text2); redigitize=0; elseif ~isequal(k,length(handles.needed_loc)+1) str_text2=sprintf('\n\n\nGet Point %s\n\nPress ESC to exit',handles.needed_loc(k,:)); str_modal=sprintf('Get Point %s\nPress ESC to exit',handles.needed_loc(k,:)); set(handles.text2,'String',str_text2); else str_text2=sprintf('\n\n\nGet Additional Points if needed'); set(handles.text2,'String',str_text2); end if k==length(handles.needed_loc)+1 str_modal1=sprintf('EEG Montage Digitized\nPress OK to Continue or \nRemove Last Point?'); user_response = montage_modaldlg_r14('Title','Digitize','String',str_modal1); switch user_response case 'OK' str_text2=sprintf('\n\nPress STOP to finish digitization\nOR\nGet additional Points'); set(handles.text2,'String',str_text2); set(handles.get_additional,'Enable','On') break; case 'REMOVE LAST PT' k LOC DATA DATA_TRANSF k=k-1; resultStr= get(handles.points,'String'); resultStr(k) =[]; DATA(k,:)=[]; DATA_TRANSF(k,:)=[]; set(handles.points,'String',resultStr) LOC(k,:)=[]; redigitize=1; COUNTER1=COUNTER1-3; COUNTER=COUNTER-1; str_modal=sprintf('Redigitize Point %s\nPress ESC to exit',handles.needed_loc(k,:)); case 'No' str_text2=sprintf('\n\nPress STOP to finish digitization\nOR\nGet additional Points'); set(handles.text2,'String',str_text2); set(handles.get_additional,'Enable','Off') break; end endendset(handles.get_additional,'Enable','on');set(handles.remove,'Enable','On');guidata(hObject,handles);% set(handles.get_additional,'Enable','on'); %--------------------------------------------------------------------------% --- Executes on button press in get_additional.function get_additional_Callback(hObject, eventdata, handles)% hObject handle to get_additional (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_ORIG DATA_TRANSF COUNTER COUNTER1 additional T M;set(handles.get_additional,'Enable','off');additional=1;str_additional=sprintf('Press Stylus pen to digitize additional points\n Press OK to continue');uiwait(msgbox(str_additional,'Get Additional Points','help','modal'));%--------------------------------------------------------------------------% --- Executes on button press in align.% Align from device coordinates to head coordinatesfunction align_Callback(hObject, eventdata, handles)% hObject handle to align (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global DATA DATA_TRANSF COUNTER T M LOC;handles.data=DATA;hold(handles.coordinates,'off');la1=handles.data(2,:);ra2=handles.data(3,:);nasion=handles.data(4,:);% rest=data(5:end,:)a=nasion-la1;b1=ra2-la1;b2=la1-ra2;c=nasion-ra2;t1=dot(a,b1)/sqrt(dot(b1,b1));t2=dot(c,b2)/sqrt(dot(b2,b2));if t1<0 t1=t1*-1;endif t2<0 t2=t2*-1;endt=t1/(t1+t2);o=la1+t*b1;oy=nasion-o;ox=ra2-o;ox=ox/sqrt(dot(ox,ox));oy=oy/sqrt(dot(oy,oy));oz=cross(ox,oy);% oz1=o+2*ozT=[ 1 0 0 0; 0 1 0 0 ;0 0 1 0;-o 0];R=[ox;oy;oz];R1=inv(R);M=[R1 ;0 0 0]; % Transformed points from original pointsla=[la1 1]*T*M;ra=[ra2 1]*T*M;nasion=[nasion 1]*T*M;% rest_new=rest_new*T*M;% set(handles.coordinates,'BOX','on','XGrid','on','Ygrid','on','ZGrid','on','ZLim',[0 15]);plot3([0 5],[0 0],[0 0],'->','Parent',handles.coordinates)hold(handles.coordinates,'on');plot3([0 0],[0 5],[0 0],'->','Parent',handles.coordinates)% hold(handles.coordinates,'on');plot3([0 0],[0 0],[0 5],'->','Parent',handles.coordinates)% hold(handles.coordinates,'on');plot3([la(1,1) ra(1,1) nasion(1,1)],[la(1,2) ra(1,2) nasion(1,2)],[la(1,3) ra(1,3) nasion(1,3)],'*','Parent',handles.coordinates);hold(handles.coordinates,'on');set(handles.coordinates,'BOX','on','XGrid','on','Ygrid','on','ZGrid','on','ZLim',[-2 15]);xlabel(handles.coordinates,'X','Fontweight','bold');ylabel(handles.coordinates,'Y','Fontweight','bold');zlabel(handles.coordinates,'Z','Fontweight','bold');sprintf('Align\n');handles.center=o;set(handles.align,'Enable','off');set(handles.get_montage,'Enable','on');str_align=sprintf('\n\n\nGet EEG Montage\n\nGet Point %s',handles.needed_loc(COUNTER,:));set(handles.text2,'String',str_align);guidata(hObject,handles);ResultsStr = get(handles.points,'String');% ResultsStrDATA_TRANSF(1:4,:)=[DATA(1,:) 1;DATA(2,:) 1;DATA(3,:) 1;DATA(4,:) 1]*T*M; handles.location=LOC[r,c]=find(abs(DATA_TRANSF)<1e-5); for i=1:length(r) for j=1:length(c) if (i==j) DATA_TRANSF(r(i),c(i))=0; end end end str_la=sprintf('X = %2.3g cm\nY = %2.3g cm\nZ = %2.3g cm',DATA_TRANSF(2,1),DATA_TRANSF(2,2),DATA_TRANSF(2,3)); set(handles.text_la,'String',str_la);str_ra=sprintf('X = %2.3g cm\nY = %2.3g cm\nZ = %2.3g cm',DATA_TRANSF(3,1),DATA_TRANSF(3,2),DATA_TRANSF(3,3));set(handles.text_ra,'String',str_ra); str_nasion=sprintf('X = %2.3g cm\nY = %2.3g cm\nZ = %2.3g cm',DATA_TRANSF(4,1),DATA_TRANSF(4,2),DATA_TRANSF(4,3));set(handles.text_nasion,'String',str_nasion);ResultsStr(1,:)={[handles.location(1,:),' : ',num2str(DATA_TRANSF(1,1)),' ',num2str(DATA_TRANSF(1,2)),' ',num2str(DATA_TRANSF(1,3))]};ResultsStr(2,:)={[handles.location(2,:),' : ',num2str(DATA_TRANSF(2,1)),' ',num2str(DATA_TRANSF(2,2)),' ',num2str(DATA_TRANSF(2,3))]};ResultsStr(3,:)={[handles.location(3,:),' : ',num2str(DATA_TRANSF(3,1)),' ',num2str(DATA_TRANSF(3,2)),' ',num2str(DATA_TRANSF(3,3))]};ResultsStr(4,:)={[handles.location(4,:),' : ',num2str(DATA_TRANSF(4,1)),' ',num2str(DATA_TRANSF(4,2)),' ',num2str(DATA_TRANSF(4,3))]};handles.translation=T;handles.rotation=M;set(handles.points,'String',ResultsStr);guidata(hObject,handles);%--------------------------------------------------------------------------% % --- Executes on selection change in points.% function points_Callback(hObject, eventdata, handles)% % hObject handle to points (see GCBO)% % eventdata reserved - to be defined in a future version of MATLAB% % handles structure with handles and user data (see GUIDATA)% % % Hints: contents = get(hObject,'String') returns points contents as cell array% % contents{get(hObject,'Value')} returns selected item from points
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -