/matlab_tools/Converted/kcxinspector.m
Objective C | 190 lines | 187 code | 3 blank | 0 comment | 66 complexity | cf40407c41af49c42c54526c62bd9bff MD5 | raw file
Possible License(s): BSD-3-Clause
- %kcxinspector 'Interactively inspects results of classification '
- % This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros cxinspector.pane file
- %
- % Parameters:
- % InputFile: iorig 'Input Original Image', required: 'Input Original Image'
- % InputFile: iclass 'Input Classified Image', required: 'Input Classified Image'
- % InputFile: idist 'Input Probabilities', optional: 'input distances (probabilities) file'
- % InputFile: icsf 'Class Specification File', required: 'input class specification file'
- %
- % Example: kcxinspector({iorig, iclass, idist, icsf}, {'iorig','';'iclass','';'idist','';'icsf',''})
- %
- % Khoros helpfile follows below:
- %
- % PROGRAM
- % cxinspector - Interactively inspects results of classification
- %
- % DESCRIPTION
- % Inspector (cxinspector xvroutine) allows the user to interactively inspect the results for a classification using the classifiers in the Classify Toolbox. It can be used to verify pixels in the image for classification errors and results. The user can click on pixels on the classified result to see its original values and classification results.
- % This xvroutine expects as inputs the original image [-iorig], the classified result [-iclass], and the Class Specification File for that classification task [-icsf], which will be used to get the classes' labels.
- % Optionally the Inspector xvroutine can use the output for the Output Probabilities that most classifiers can create which are related with the discriminant functions for that classifier. If these values are presented as input for the parameter [-idist], their values will be presented in the output window.
- % The xvroutine will have a workspace for display of images that can display either the original image or the classification result. When the mouse is clicked on the workspace, a small text report will be output'd on the Output Window (which is shown when the Output button is pressed) with basic information about the classifier, the position where the user clicked the mouse, the original input data at that position and the classification result for that pixel.
- % There is a Image Display button which will bring a panel where the user can set whether the original image or the classification result will be displayed, whether the routine will use a private colormap for display and if the images are multiband (i.e. images with depth and/or time > 1) which band will be displayed.
- %
- %
- %
- % EXAMPLES
- % All examples for the Classify toolbox are listed on the Classify Toolbox Manual. For an example of this routine, please see the Classify:workspaces:MINDIST example workspace.
- %
- % "SEE ALSO"
- % cthematicmap, Class Specification File format in the Classify Toolbox Manual.
- %
- % RESTRICTIONS
- % Expect the parameter [-icsf] to point to a valid Class Specification file, and the parameters [-iclass] to be a result of classification with one of the classifiers in this toolbox.
- %
- % REFERENCES
- % All references for the Classify toolbox are listed on the Classify Toolbox Manual.
- %
- % COPYRIGHT
- % Copyright (C) 1997 Rafael Santos. Khoros (C) Khoral Research, Inc.
- %
- function varargout = kcxinspector(varargin)
- if nargin ==0
- Inputs={};arglist={'',''};
- elseif nargin ==1
- Inputs=varargin{1};arglist={'',''};
- elseif nargin ==2
- Inputs=varargin{1}; arglist=varargin{2};
- else error('Usage: [out1,..] = kcxinspector(Inputs,arglist).');
- end
- if size(arglist,2)~=2
- error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
- end
- narglist={'iorig', '__input';'iclass', '__input';'idist', '__input';'icsf', '__input'};
- maxval={0,0,1,0};
- minval={0,0,1,0};
- istoggle=[0,0,1,0];
- was_set=istoggle * 0;
- paramtype={'InputFile','InputFile','InputFile','InputFile'};
- % identify the input arrays and assign them to the arguments as stated by the user
- if ~iscell(Inputs)
- Inputs = {Inputs};
- end
- NumReqOutputs=0; nextinput=1; nextoutput=1;
- for ii=1:size(arglist,1)
- wasmatched=0;
- for jj=1:size(narglist,1)
- if strcmp(arglist{ii,1},narglist{jj,1}) % a given argument was matched to the possible arguments
- wasmatched = 1;
- was_set(jj) = 1;
- if strcmp(narglist{jj,2}, '__input')
- if (nextinput > length(Inputs))
- error(['Input ' narglist{jj,1} ' has no corresponding input!']);
- end
- narglist{jj,2} = 'OK_in';
- nextinput = nextinput + 1;
- elseif strcmp(narglist{jj,2}, '__output')
- if (nextoutput > nargout)
- error(['Output nr. ' narglist{jj,1} ' is not present in the assignment list of outputs !']);
- end
- if (isempty(arglist{ii,2}))
- narglist{jj,2} = 'OK_out';
- else
- narglist{jj,2} = arglist{ii,2};
- end
- nextoutput = nextoutput + 1;
- if (minval{jj} == 0)
- NumReqOutputs = NumReqOutputs - 1;
- end
- elseif isstr(arglist{ii,2})
- narglist{jj,2} = arglist{ii,2};
- else
- if strcmp(paramtype{jj}, 'Integer') & (round(arglist{ii,2}) ~= arglist{ii,2})
- error(['Argument ' arglist{ii,1} ' is of integer type but non-integer number ' arglist{ii,2} ' was supplied']);
- end
- if (minval{jj} ~= 0 | maxval{jj} ~= 0)
- if (minval{jj} == 1 & maxval{jj} == 1 & arglist{ii,2} < 0)
- error(['Argument ' arglist{ii,1} ' must be bigger or equal to zero!']);
- elseif (minval{jj} == -1 & maxval{jj} == -1 & arglist{ii,2} > 0)
- error(['Argument ' arglist{ii,1} ' must be smaller or equal to zero!']);
- elseif (minval{jj} == 2 & maxval{jj} == 2 & arglist{ii,2} <= 0)
- error(['Argument ' arglist{ii,1} ' must be bigger than zero!']);
- elseif (minval{jj} == -2 & maxval{jj} == -2 & arglist{ii,2} >= 0)
- error(['Argument ' arglist{ii,1} ' must be smaller than zero!']);
- elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} < minval{jj})
- error(['Argument ' arglist{ii,1} ' must be bigger than ' num2str(minval{jj})]);
- elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} > maxval{jj})
- error(['Argument ' arglist{ii,1} ' must be smaller than ' num2str(maxval{jj})]);
- end
- end
- end
- if ~strcmp(narglist{jj,2},'OK_out') & ~strcmp(narglist{jj,2},'OK_in')
- narglist{jj,2} = arglist{ii,2};
- end
- end
- end
- if (wasmatched == 0 & ~strcmp(arglist{ii,1},''))
- error(['Argument ' arglist{ii,1} ' is not a valid argument for this function']);
- end
- end
- % match the remaining inputs/outputs to the unused arguments and test for missing required inputs
- for jj=1:size(narglist,1)
- if strcmp(paramtype{jj}, 'Toggle')
- if (narglist{jj,2} ==0)
- narglist{jj,1} = '';
- end;
- narglist{jj,2} = '';
- end;
- if ~strcmp(narglist{jj,2},'__input') && ~strcmp(narglist{jj,2},'__output') && istoggle(jj) && ~ was_set(jj)
- narglist{jj,1} = '';
- narglist{jj,2} = '';
- end;
- if strcmp(narglist{jj,2}, '__input')
- if (minval{jj} == 0) % meaning this input is required
- if (nextinput > size(Inputs))
- error(['Required input ' narglist{jj,1} ' has no corresponding input in the list!']);
- else
- narglist{jj,2} = 'OK_in';
- nextinput = nextinput + 1;
- end
- else % this is an optional input
- if (nextinput <= length(Inputs))
- narglist{jj,2} = 'OK_in';
- nextinput = nextinput + 1;
- else
- narglist{jj,1} = '';
- narglist{jj,2} = '';
- end;
- end;
- else
- if strcmp(narglist{jj,2}, '__output')
- if (minval{jj} == 0) % this is a required output
- if (nextoutput > nargout & nargout > 1)
- error(['Required output ' narglist{jj,1} ' is not stated in the assignment list!']);
- else
- narglist{jj,2} = 'OK_out';
- nextoutput = nextoutput + 1;
- NumReqOutputs = NumReqOutputs-1;
- end
- else % this is an optional output
- if (nargout - nextoutput >= NumReqOutputs)
- narglist{jj,2} = 'OK_out';
- nextoutput = nextoutput + 1;
- else
- narglist{jj,1} = '';
- narglist{jj,2} = '';
- end;
- end
- end
- end
- end
- if nargout
- varargout = cell(1,nargout);
- else
- varargout = cell(0);
- end
- global KhorosRoot
- if exist('KhorosRoot') && ~isempty(KhorosRoot)
- w=['"' KhorosRoot];
- else
- if ispc
- w='"C:\Program Files\dip\khorosBin\';
- else
- [s,w] = system('which cantata');
- w=['"' w(1:end-8)];
- end
- end
- callKhoros([w 'cxinspector" '],Inputs,narglist);