PageRenderTime 64ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/matlab_tools/Converted/kvthreshm.m

http://github.com/aludnam/MATLAB
Objective C | 195 lines | 192 code | 3 blank | 0 comment | 55 complexity | ed538ae20b32fd71818be900b7635161 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. %kvthreshm 'Adaptive Thresholding of an Image'
  2. % This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros vthreshm.pane file
  3. %
  4. % Parameters:
  5. % InputFile: i1 'Input image', required: 'Image to be compared'
  6. % OutputFile: o 'Output Image ', required: 'resulting output image'
  7. % InputFile: i2 'Lower thresh. Image', optional: 'Lower threshold level'
  8. % Integer: l 'Lower threshold level', default: 128: 'lower thresh. level'
  9. % InputFile: i3 'Upper thresh. Image', optional: 'Upper thres. level'
  10. % Integer: u 'Upper threshold level', default: 255: 'upper thresh. level'
  11. %
  12. % Example: o = kvthreshm({i1, i2, i3}, {'i1','';'o','';'i2','';'l',128;'i3','';'u',255})
  13. %
  14. % Khoros helpfile follows below:
  15. %
  16. % PROGRAM
  17. % vthreshm - Adaptive Thresholding of an Image
  18. %
  19. % DESCRIPTION
  20. % .I vthreshm
  21. % will do the adaptative threshold of an input image. Two input images can be entered as the lower and higher limit images. Optionally, two integer parameters can be entered instead of these images.
  22. %
  23. % The three input images must be of the same size and have the same
  24. % number of data bands.
  25. %
  26. %
  27. %
  28. % EXAMPLES
  29. % vthreshm -i1 img1.xv -i2 img2.xv -i3 img3.xv -i4 img4.xv -o img5.xv
  30. %
  31. % img1 is the image to be compared
  32. % img2 is the lower limit image
  33. % img3 is the higher limit image
  34. % img4 is the result of the comparition
  35. %
  36. % "SEE ALSO"
  37. %
  38. % RESTRICTIONS
  39. % vthreshm is presently only implemented for byte images. The input images' data type can be BYTE or SHORT. The resulting image will be of the BYTE data type.
  40. %
  41. % REFERENCES
  42. %
  43. % COPYRIGHT
  44. % Copyright (C) 1993-1997 Junior Barrera, Roberto Lotufo. All rights reserved.
  45. %
  46. function varargout = kvthreshm(varargin)
  47. if nargin ==0
  48. Inputs={};arglist={'',''};
  49. elseif nargin ==1
  50. Inputs=varargin{1};arglist={'',''};
  51. elseif nargin ==2
  52. Inputs=varargin{1}; arglist=varargin{2};
  53. else error('Usage: [out1,..] = kvthreshm(Inputs,arglist).');
  54. end
  55. if size(arglist,2)~=2
  56. error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
  57. end
  58. narglist={'i1', '__input';'o', '__output';'i2', '__input';'l', 128;'i3', '__input';'u', 255};
  59. maxval={0,0,1,32767,1,32767};
  60. minval={0,0,1,-32768,1,-32768};
  61. istoggle=[0,0,1,1,1,1];
  62. was_set=istoggle * 0;
  63. paramtype={'InputFile','OutputFile','InputFile','Integer','InputFile','Integer'};
  64. % identify the input arrays and assign them to the arguments as stated by the user
  65. if ~iscell(Inputs)
  66. Inputs = {Inputs};
  67. end
  68. NumReqOutputs=1; nextinput=1; nextoutput=1;
  69. for ii=1:size(arglist,1)
  70. wasmatched=0;
  71. for jj=1:size(narglist,1)
  72. if strcmp(arglist{ii,1},narglist{jj,1}) % a given argument was matched to the possible arguments
  73. wasmatched = 1;
  74. was_set(jj) = 1;
  75. if strcmp(narglist{jj,2}, '__input')
  76. if (nextinput > length(Inputs))
  77. error(['Input ' narglist{jj,1} ' has no corresponding input!']);
  78. end
  79. narglist{jj,2} = 'OK_in';
  80. nextinput = nextinput + 1;
  81. elseif strcmp(narglist{jj,2}, '__output')
  82. if (nextoutput > nargout)
  83. error(['Output nr. ' narglist{jj,1} ' is not present in the assignment list of outputs !']);
  84. end
  85. if (isempty(arglist{ii,2}))
  86. narglist{jj,2} = 'OK_out';
  87. else
  88. narglist{jj,2} = arglist{ii,2};
  89. end
  90. nextoutput = nextoutput + 1;
  91. if (minval{jj} == 0)
  92. NumReqOutputs = NumReqOutputs - 1;
  93. end
  94. elseif isstr(arglist{ii,2})
  95. narglist{jj,2} = arglist{ii,2};
  96. else
  97. if strcmp(paramtype{jj}, 'Integer') & (round(arglist{ii,2}) ~= arglist{ii,2})
  98. error(['Argument ' arglist{ii,1} ' is of integer type but non-integer number ' arglist{ii,2} ' was supplied']);
  99. end
  100. if (minval{jj} ~= 0 | maxval{jj} ~= 0)
  101. if (minval{jj} == 1 & maxval{jj} == 1 & arglist{ii,2} < 0)
  102. error(['Argument ' arglist{ii,1} ' must be bigger or equal to zero!']);
  103. elseif (minval{jj} == -1 & maxval{jj} == -1 & arglist{ii,2} > 0)
  104. error(['Argument ' arglist{ii,1} ' must be smaller or equal to zero!']);
  105. elseif (minval{jj} == 2 & maxval{jj} == 2 & arglist{ii,2} <= 0)
  106. error(['Argument ' arglist{ii,1} ' must be bigger than zero!']);
  107. elseif (minval{jj} == -2 & maxval{jj} == -2 & arglist{ii,2} >= 0)
  108. error(['Argument ' arglist{ii,1} ' must be smaller than zero!']);
  109. elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} < minval{jj})
  110. error(['Argument ' arglist{ii,1} ' must be bigger than ' num2str(minval{jj})]);
  111. elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} > maxval{jj})
  112. error(['Argument ' arglist{ii,1} ' must be smaller than ' num2str(maxval{jj})]);
  113. end
  114. end
  115. end
  116. if ~strcmp(narglist{jj,2},'OK_out') & ~strcmp(narglist{jj,2},'OK_in')
  117. narglist{jj,2} = arglist{ii,2};
  118. end
  119. end
  120. end
  121. if (wasmatched == 0 & ~strcmp(arglist{ii,1},''))
  122. error(['Argument ' arglist{ii,1} ' is not a valid argument for this function']);
  123. end
  124. end
  125. % match the remaining inputs/outputs to the unused arguments and test for missing required inputs
  126. for jj=1:size(narglist,1)
  127. if strcmp(paramtype{jj}, 'Toggle')
  128. if (narglist{jj,2} ==0)
  129. narglist{jj,1} = '';
  130. end;
  131. narglist{jj,2} = '';
  132. end;
  133. if ~strcmp(narglist{jj,2},'__input') && ~strcmp(narglist{jj,2},'__output') && istoggle(jj) && ~ was_set(jj)
  134. narglist{jj,1} = '';
  135. narglist{jj,2} = '';
  136. end;
  137. if strcmp(narglist{jj,2}, '__input')
  138. if (minval{jj} == 0) % meaning this input is required
  139. if (nextinput > size(Inputs))
  140. error(['Required input ' narglist{jj,1} ' has no corresponding input in the list!']);
  141. else
  142. narglist{jj,2} = 'OK_in';
  143. nextinput = nextinput + 1;
  144. end
  145. else % this is an optional input
  146. if (nextinput <= length(Inputs))
  147. narglist{jj,2} = 'OK_in';
  148. nextinput = nextinput + 1;
  149. else
  150. narglist{jj,1} = '';
  151. narglist{jj,2} = '';
  152. end;
  153. end;
  154. else
  155. if strcmp(narglist{jj,2}, '__output')
  156. if (minval{jj} == 0) % this is a required output
  157. if (nextoutput > nargout & nargout > 1)
  158. error(['Required output ' narglist{jj,1} ' is not stated in the assignment list!']);
  159. else
  160. narglist{jj,2} = 'OK_out';
  161. nextoutput = nextoutput + 1;
  162. NumReqOutputs = NumReqOutputs-1;
  163. end
  164. else % this is an optional output
  165. if (nargout - nextoutput >= NumReqOutputs)
  166. narglist{jj,2} = 'OK_out';
  167. nextoutput = nextoutput + 1;
  168. else
  169. narglist{jj,1} = '';
  170. narglist{jj,2} = '';
  171. end;
  172. end
  173. end
  174. end
  175. end
  176. if nargout
  177. varargout = cell(1,nargout);
  178. else
  179. varargout = cell(1,1);
  180. end
  181. global KhorosRoot
  182. if exist('KhorosRoot') && ~isempty(KhorosRoot)
  183. w=['"' KhorosRoot];
  184. else
  185. if ispc
  186. w='"C:\Program Files\dip\khorosBin\';
  187. else
  188. [s,w] = system('which cantata');
  189. w=['"' w(1:end-8)];
  190. end
  191. end
  192. [varargout{:}]=callKhoros([w 'vthreshm" '],Inputs,narglist);