/usr/share/octave/packages/image-2.6.1/isbw.m is in octave-image 2.6.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | ## Copyright (C) 2000 Kai Habel <kai.habel@gmx.de>
## Copyright (C) 2011, 2015 Carnë Draug <carandraug+dev@gmail.com>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, see <http://www.gnu.org/licenses/>.
## -*- texinfo -*-
## @deftypefn {Function File} {} isbw (@var{img})
## @deftypefnx {Function File} {} isbw (@var{img}, @var{logic})
## Return true if @var{img} is a black and white image.
##
## A variable can be considered a black and white image if it is a
## non-sparse, real array of size @nospell{MxNx1xK}, and,
## depending on the value of @var{logic}:
##
## @table @asis
## @item @qcode{"logical"} (default)
## @var{img} must be of class logical.
##
## @item @qcode{"non-logical"}
## all values in @var{img} are either 1 or 0.
## @end table
##
## @emph{Note}: despite their suggestive names, the functions isbw,
## isgray, isind, and isrgb, are ambiguous since it is not always possible
## to distinguish between those image types. For example: an uint8 matrix
## can be both a grayscale and indexed image; a grayscale image may have
## values outside the range [0 1]. They are good to dismiss input as an
## invalid image type, but not for identification.
##
## @seealso{im2bw, isgray, isind, islogical, isrgb}
## @end deftypefn
function bool = isbw (BW, logic = "logical")
if (nargin () < 1 || nargin () > 2)
print_usage ();
endif
bool = false;
if (isimage (BW) && ndims (BW) < 5 && size (BW, 3) == 1)
if (strcmpi (logic, "logical"))
## this is the matlab compatible way (before they removed the function)
bool = islogical (BW);
elseif (strcmpi (logic, "non-logical"))
bool = islogical (BW) || ispart (@is_bw_nonlogical, BW);
else
error ("isbw: LOGIC must be the string 'logical' or 'non-logical'")
endif
endif
endfunction
function bool = is_bw_nonlogical (BW)
bool = ! any ((BW(:) != 1) & (BW(:) != 0));
endfunction
%!shared img
%! img = round (rand (10));
%!assert (isbw (img, "non-logical"), true);
%!assert (isbw (img, "logical"), false);
%!assert (isbw (logical (img), "logical"), true);
%!assert (isbw (logical (img), "non-logical"), true);
## change when the different value is near the start and then in middle,
## because of the way we test part of the image before the rest
%!test
%! img(1, 1) = 2;
%! assert (isbw (img, "non-logical"), false);
%!test
%! a( 1, 1) = 1;
%! a(50, 50) = 2;
%! assert (isbw (a, "non-logical"), false);
%!assert (isbw (rand (5, 5, 1, 4) > 0.5), true)
%!assert (isbw (rand (5, 5, 3, 4) > 0.5), false)
%!assert (isbw (rand (5, 5, 3) > 0.5), false)
%!assert (isbw (rand (5, 5, 1, 3, 4) > 0.5), false)
%!assert (isbw (randi ([0 1], 5, 5, 1, 4), "non-logical"), true)
%!assert (isbw (randi ([0 1], 5, 5, 3, 4), "non-logical"), false)
%!assert (isbw (randi ([0 1], 5, 5, 3), "non-logical"), false)
%!assert (isbw (randi ([0 1], 5, 5, 1, 3, 4), "non-logical"), false)
%!assert (isbw (single ([0 0 1]), "non-logical"), true)
%!assert (isbw ([0 NaN 1], "non-logical"), false)
|