Mercurial > hg > octave-image
changeset 229:7f7d27431a86
Class support
author | hauberg |
---|---|
date | Sat, 13 Jan 2007 16:19:15 +0000 |
parents | 5dc5f8566898 |
children | 994cc6221f5f |
files | inst/im2bw.m |
diffstat | 1 files changed, 40 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/inst/im2bw.m +++ b/inst/im2bw.m @@ -17,7 +17,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} @var{BW}= im2bw (@var{I},threshold) ## @deftypefnx {Function File} @var{BW}= im2bw (@var{X},@var{cmap},threshold) -## converts image data types to a black-white (binary) image. +## Converts image data types to a black-white (binary) image. ## The treshold value should be in the range [0,1]. ## @end deftypefn @@ -25,26 +25,49 @@ ## Date: 19. March 2000 function BW = im2bw (img, a, b) - - if ( nargin < 2 || nargin > 3) - usage("im2bw(I) number of arguments must be 2 or 3"); + if (nargin < 2 || nargin > 3) + usage("im2bw: number of arguments must be 2 or 3"); + endif + + ## Convert img to gray scale + if (isrgb(img)) + img = rgb2gray(img); + if (nargin != 2) + error("im2bw: two input arguments must be given when the image is a color image"); + endif + t = a; + elseif (isind (img) && ismatrix(a) && columns (a) == 3) + img = ind2gray (img, a); + if (nargin != 3) + error("im2bw: three input arguments must be given when the image is indexed"); + endif + t = b; + elseif (isgray(img)) + if (nargin != 2) + error("im2bw: two input arguments must be given when the image is gray scale"); + endif + t = a; + else + error ("im2bw: first input argument must be an image"); endif - if (isgray (img)) - if (is_scalar (a)) - BW = (img >= a); - else - error ("threshold value must be scalar"); + ## Do the thresholding + if (isscalar (a)) + if (a < 0 || a > 1) + error("im2bw: threshold must be in the interval [0, 1]"); endif - elseif (isind (img)) - if (is_matrix (a) && columns (a) == 3) - if (is_scalar (b)) - I = ind2gray (img, a); - BW = (I >= b); - endif - endif + switch (class(img)) + case {"double", "single"} % octave doesn't support single yet, but it shouldn't hurt... + BW = (img >= a); + case {"uint8"} + BW = (img >= 255*a); + case {"uint16"} + BW = (img >= 65535*a); + otherwise + error("im2bw: unsupport image class"); + endswitch else - error ("image matrix must be of index or intensity type"); + error ("im2bw: threshold value must be scalar"); endif endfunction