📄 histtruncate.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 + -