This file is indexed.

/usr/share/octave/packages/image-2.2.2/histeq.m is in octave-image 2.2.2-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
101
102
## Copyright (C) 2000 Kai Habel <kai.habel@gmx.de>
## Copyright (C) 2008 Jonas Wagner <j.b.w@gmx.ch>
##
## 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} {@var{J} =} histeq (@var{I}, @var{n})
## Equalize histogram of grayscale image.
##
## The histogram contains
## @var{n} bins, which defaults to 64.
##
## @var{I}: Image in double format, with values from 0.0 to 1.0.
##
## @var{J}: Returned image, in double format as well.
##
## Note that the algorithm used for histogram equalization gives results
## qualitatively comparable but numerically different from @sc{matlab}
## implementation.
##
## @seealso{imhist, mat2gray, brighten}
## @end deftypefn

function J = histeq (I, n = 64)

  if (nargin < 1 || nargin > 3)
    print_usage ();
  endif

  if (isempty (I))
    J = [];
    return
  endif

  [r, c]   = size (I);
  I        = mat2gray (I);
  [X, map] = gray2ind (I, n);
  [nn, xx] = imhist (I, n);
  Icdf     = 1 / prod (size (I)) * cumsum (nn);
  J        = reshape (Icdf(X + 1), r, c);
endfunction

## FIXME: the method we are using is different from Matlab so our results
##        are slightly different. The following xtest show the Matlab
##        results that we should be aiming at.

%!assert (histeq ([]), []);

## One value
%!assert (histeq (0), 1);
%!assert (histeq (1), 1);
%!assert (histeq (1.5), 1);
%!assert (histeq (zeros (100, 200)), ones (100, 200));            # matrix

## Two values
%!xtest assert (histeq ([0    1]),  [0.4920634921  1],  10^-8);
%!xtest assert (histeq ([0    1]'), [0.4920634921  1]', 10^-8);   # column array
%!xtest assert (histeq ([0  255]),  [0.4920634921  1],  10^-8);
%!xtest assert (histeq (uint8  ([0      1])), [  125    190]);    # uint8
%!xtest assert (histeq (uint8  ([0    255])), [  125    255]);
%!xtest assert (histeq (uint16 ([0      1])), [65535  65535]);    # uint16
%!xtest assert (histeq (uint16 ([0    255])), [32247  48891]);
%!xtest assert (histeq (uint16 ([0    256])), [32247  48891]);
%!xtest assert (histeq (uint16 ([0  65535])), [32247  65535]);

## Three values
%!test assert (histeq  ([0 1 1] ),             [  1/3     1     1] ,  10^-8);
%!test assert (histeq  ([0 0 1]'),             [  2/3   2/3     1]',  10^-8);
%!xtest assert (histeq ([0 1 2] ),             [  1/3     1     1] ,  10^-8);
%!xtest assert (histeq (uint8  ([0   1   2])), [   85   125   215]);
%!xtest assert (histeq (uint16 ([0   1   2])), [65535 65535 65535]);
%!xtest assert (histeq (uint16 ([0 100 200])), [43690 43690 55133]);

## Many values
%!xtest
%! J = [20    32    57    81   105   125   150   174   198   223   247];
%! assert (histeq (uint8 (0:10:100)), J);

%!xtest
%! J = [0.0793650794
%!      0.1269841270
%!      0.2222222222
%!      0.3174603175
%!      0.4126984127
%!      0.4920634921
%!      0.5873015873
%!      0.6825396825
%!      0.7777777778
%!      0.8730158730
%!      1.0000000000];
%! assert (histeq (0:0.1:1), J', 10^-8);