⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 histtruncate.m

📁 MATLAB Functions for Multiple View Geometry
💻 M
字号:
% HISTTRUNCATE - Truncates ends of an image histogram.%% Function truncates a specified percentage of the lower and% upper ends of an image histogram.%% This operation allows grey levels to be distributed across% the primary part of the histogram.  This solves the problem% when one has, say, a few very bright values in the image which% have the overall effect of darkening the rest of the image after% rescaling.%% Usage: %    [newim, sortv] = histtruncate(im, lHistCut, uHistCut)%    [newim, sortv] = histtruncate(im, lHistCut, uHistCut, sortv)%% Arguments:%    im          -  Image to be processed%    lHistCut    -  Percentage of the lower end of the histogram%                   to saturate.%    uHistCut    -  Percentage of the upper end of the histogram%                   to saturate.%    sortv       -  Optional array of sorted image pixel values obtained%                   from a previous call to histtruncate.  Supplying this%                   data speeds the operation of histtruncate when one is%                   repeatedly varying lHistCut and uHistCut.%% Copyright (c) 2001 Peter Kovesi% School of Computer Science & Software Engineering% The University of Western Australia% http://www.csse.uwa.edu.au/% % Permission is hereby granted, free of charge, to any person obtaining a copy% of this software and associated documentation files (the "Software"), to deal% in the Software without restriction, subject to the following conditions:% % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software.%% The Software is provided "as is", without warranty of any kind.% July 2001function [newim, sortv] = histtruncate(im, lHistCut, uHistCut, varargin)    if lHistCut < 0 | lHistCut > 100 | uHistCut < 0 | uHistCut > 100	error('Histogram truncation values must be between 0 and 100');    end    if ndims(im) == 3  % Assume colour image in RGB	hsv = rgb2hsv(im);     % Convert to HSV         % Apply histogram truncation just to intensity component	if nargin == 3	    [hsv(:,:,3), sortv] = Ihisttruncate(hsv(:,:,3), lHistCut, uHistCut);	else	    [hsv(:,:,3), sortv] = Ihisttruncate(hsv(:,:,3), lHistCut, uHistCut, varargin{1});	end	newim = hsv2rgb(hsv);  % Convert back to RGB    else	if nargin == 3	    [newim, sortv] = Ihisttruncate(im, lHistCut, uHistCut);	else	    [newim, sortv] = Ihisttruncate(im, lHistCut, uHistCut, varargin{1});	end    end        %-----------------------------------------------------------------------% Internal function that does the work%-----------------------------------------------------------------------    function [newim, sortv] = Ihisttruncate(im, lHistCut, uHistCut, varargin)            if ndims(im) > 2	error('HISTTRUNCATE only defined for grey value images');    end        im = normalise(im);  % Normalise to 0-1 and cast to double if needed        [r c] = size(im);     m = r*c;                  if nargin == 3            % Generate a sorted array of pixel values.	sortv = sort(im(:));  	sortv = [sortv(1); sortv; sortv(m)];    else	sortv = varargin{1};    end        x = 100*(0.5:m - 0.5)./m; % Indices of pixel value order as a percentage    x = [0 x 100];            % from 0 - 100.        % Interpolate to find grey values at desired percentage levels.    gv = interp1(x,sortv,[lHistCut, 100 - uHistCut]);     newim = imadjust(im,gv,[0 1]);        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -