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

📄 homomorphic.m

📁 MATLAB Functions for Multiple View Geometry
💻 M
字号:
% HOMOMORPHIC - Performs homomorphic filtering on an image.%% Function performs homomorphic filtering on an image. This form of% filtering sharpens features and flattens lighting variantions in an image.% It usually is very effective on images which have large variations in% lighting, for example when a subject appears against strong backlighting.%%% Usage: newim =% homomorphic(inimage,boost,CutOff,order,lhistogram_cut,uhistogram_cut, hndl)% homomorphic(inimage,boost,CutOff,order,lhistogram_cut,uhistogram_cut)% homomorphic(inimage,boost,CutOff,order,hndl)% homomorphic(inimage,boost,CutOff,order)%% Parameters:  (suggested values are in brackets)%         boost    - The ratio that high frequency values are boosted%                    relative to the low frequency values (2).%         CutOff   - Cutoff frequency of the filter (0 - 0.5)%         order    - Order of the modified Butterworth style filter that%                    is used, this must be an integer > 1 (2)%         lhistogram_cut - Percentage of the lower end of the filtered image's%                          histogram to be truncated, this eliminates extreme%                          values in the image from distorting the final result. (0)%         uhistogram_cut - Percentage of upper end of histogram to truncate. (5)%         hndl           - Optional handle to text box for updating%                          messages to be sent to a GUI interface.%%  If lhistogram_cut and uhistogram_cut are not specified no histogram truncation will be%  applied.%%% Suggested values: newim = homomorphic(im, 2, .25, 2, 0, 5);%% homomorphic called with no arguments invokes GUI interface.%% or simply   homomorphic  to invoke the GUI   - GUI version does not work!% Copyright (c) 1999-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.% June 1999% December 2001 cleaned up and modified to work with colour imagesfunction him = homomorphic(im, boost, CutOff, order, varargin)    %    if nargin == 0             % invoke GUI if it exists%	if exist('homomorphicGUI.m');%	    homomorphicGUI;%	    return;%	else%	    error('homomorphicGUI does not exist');%	end%    %    else    	if ndims(im) == 2  % Greyscale image	    him = Ihomomorphic(im, boost, CutOff, order, varargin);	    	else               % Assume colour image in RGB format	    hsv = rgb2hsv(im);   % Convert to HSV and apply homomorphic				 % filtering to just the intensity component.            hsv(:,:,3) = Ihomomorphic(hsv(:,:,3), boost, CutOff, order, varargin);	    him = hsv2rgb(hsv);  % Convert back to RGB	end	%    end    %------------------------------------------------------------------------% Internal function that does the real work%------------------------------------------------------------------------    	function him = Ihomomorphic(im, boost, CutOff, order, varargin)    % The possible elements in varargin are:    % {lhistogram_cut, uhistogram_cut, hndl}    varargin = varargin{:};        if nargin == 5	nopparams  = length(varargin);    end        if (nopparams == 3)	dispStatus = 1;	truncate = 1;	lhistogram_cut = varargin{1};	uhistogram_cut = varargin{2};		hndl = varargin{3};		    elseif (nopparams == 2)	dispStatus = 0;	truncate = 1;	lhistogram_cut = varargin{1};	uhistogram_cut = varargin{2};	    elseif (nopparams == 1)	dispStatus = 1;	truncate = 0;	hndl = varargin{1};			    elseif (nopparams == 0)	dispStatus = 0;	truncate = 0;    else	disp('Usage: newim = homomorphic(inimage,LowGain,HighGain,CutOff,order,lhistogram_cut,uhistogram_cut)');	error('or    newim = homomorphic(inimage,LowGain,HighGain,CutOff,order)');    end        [rows,cols] = size(im);        im = normalise(im);                        % Rescale values 0-1 (and cast					       % to `double' if needed).    FFTlogIm = fft2(log(im+.01));              % Take FFT of log (with offset                                               % to avoid log of 0).    h = highboostfilter([rows cols], CutOff, order, boost);    him = exp(real(ifft2(FFTlogIm.*h)));       % Apply the filter, invert					       % fft, and invert the log.    if truncate						   	% Problem:	% The extreme bright values in the image are exaggerated by the filtering.  	% These (now very) bright values have the overall effect of darkening the	% whole image when we rescale values to 0-255.	%	% Solution:	% Construct a histogram of the image.  Find the level below which a high	% percentage of the image lies (say 95%).  Saturate the grey levels in	% the image to this level.		if dispStatus	    set(hndl,'String','Calculating histogram and truncating...');	    drawnow;	else	    disp('Calculating histogram and truncating...');	end		him = histtruncate(him, lhistogram_cut, uhistogram_cut);    else	him = normalise(him);  % No truncation, but fix range 0-1    end    

⌨️ 快捷键说明

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