function result = calc_inhibfacil(matrices, inhibMethod, supInhib, sigma, alpha, k1, k2, facilMethod, beta, f1, f2, orientations, power) % VERSION 21/03/04 % CREATED BY: M.B. Wieling and N. Petkov, Groningen University, % Department of Computer Science, Intelligent Systems % % CALC_INHIBFACIL: calculates the anisotropic (INHIBMETHOD == 3) or % isotropic inhibition (INHIBMETHOD == 2) in combination with the % facilitation (if FACILMETHOD == 2) of the matrix. % CALC_INHIBFACIL(MATRICES, INHIBMETHOD, SUPINHIB, SIGMA, ALPHA, K1, K2, FACILMETHOD, BETA, F1, F2, ORIENTATIONS, POWER) displays % the possibly (if INHIBMETHOD is not equal to 1) inhibited matrix and facilitated matrix (if INHIBMETHOD is not equal to 1) % according to the following parameters (a progressbar of the calculations is also shown): % MATRICES - the matrices (for each orientation) which should be inhibited % INHIBMETHOD - the method of inhibition which is used (INHIBMETHOD == 1: no inhibition and % MATRICES is returned, INHIBMETHOD == 2: isotropic inhibition, % INHIBMETHOD == 3: anisotropic inhibition) % SUPINHIB - defines the norm which should be used for the superposition which is % only used with isotropic inhibition, there are three possibilities: % L1 norm (SUPINHIB == 1), L2 norm (SUPINHIB == 2) or % L_INF norm (SUPINHIB == 3, this is maximum superposition) % SIGMA - standard deviation of Gaussian factor % ALPHA - defines the suppression of the inhibition % K1 - defines the factor for the negative gaussian (second) for the inhibition % K2 - defines the factor for the positive gaussian (first) for the inhibition % FACILMETHOD - defines if facilitation should be used (if this value ~=1 facilitation is used) % BETA - defines the factor of the facilitation % F1 - defines the factor for the negative gaussian (second) for the facilitation % F2 - defines the factor for the positive gaussian (first) for the facilitation % ORIENTATIONS - the list of orientations used for the facilitationkernel (specified in radians) % POWER - defines the width of the kernel (the larger this number, the % smaller the kernel becomes) if (inhibMethod ~= 2 & inhibMethod ~=3) if (facilMethod == 1) result = matrices; % if no inhibition and no facilitation is selected, return the original MATRICES else % no inhibition, only facilitation % display a waitbar %h = waitbar(0,'Calculating surround facilitation, please wait... (Step 4/7)'); % apply the inhibition with the correct inhibitionterm (2nd parameter) for cnt1 = 1:size(matrices,3) %waitbar(cnt1/size(matrices,3)); % update the progressbar result(:,:,cnt1) = facilitation(matrices(:,:,cnt1), matrices(:,:,cnt1), sigma, beta, f1, f2, orientations(cnt1), power); end %waitbar(1); %close(h); end else % inhibition is enabled % calculate the inhibitionterm (only if isotropic inhibition is used) if (inhibMethod == 2) % initialize the starting values if (supInhib == 3) inhibterm = -inf; % starting value for maximum superposition (every value > -Inf) else inhibterm = 0; tmpinhibterm = 0; end for cnt1 = 1:size(matrices,3) if (supInhib == 1) inhibterm = inhibterm + abs(matrices(:,:,cnt1)); elseif (supInhib == 2) % first calculate X1^2 + X2^2 + XN^2, the square-root is taken after the loop tmpinhibterm = tmpinhibterm + matrices(:,:,cnt1).*matrices(:,:,cnt1); else inhibterm = max(abs(matrices(:,:,cnt1)), inhibterm); end end % if the L2 norm was chosen, the square-root should be taken % since L2 = SQRT(X1^2 + X2^2 + ... XN^2) if (supInhib == 2) inhibterm = sqrt(tmpinhibterm); end end % calculate the inhibitionkernel which remains the same for each orientation inhibkernel = inhibkernel2d(sigma, k1, k2); if (facilMethod == 1) % no facilitation, only inhibition % display a waitbar %h = waitbar(0,'Calculating surround inhibition, please wait... (Step 4/7)'); % apply the inhibition with the correct inhibitionterm (2nd parameter) for cnt1 = 1:size(matrices,3) %waitbar(cnt1/size(matrices,3)); % update the progressbar if (inhibMethod == 3) % anisotropic inhibition result(:,:,cnt1) = inhibition(matrices(:,:,cnt1), matrices(:,:,cnt1), inhibkernel, alpha); elseif (inhibMethod == 2) % isotropic inhibition result(:,:,cnt1) = inhibition(matrices(:,:,cnt1), inhibterm, inhibkernel, alpha); end end %waitbar(1); %close(h); else % display a waitbar %h = waitbar(0,'Calculating surround influence, please wait... (Step 4/7)'); % apply the inhibition and facilitation for cnt1 = 1:size(matrices,3) %waitbar(cnt1/size(matrices,3)); % update the progressbar if (inhibMethod == 3) % anisotropic inhibition result(:,:,cnt1) = inhibfacil(matrices(:,:,cnt1), matrices(:,:,cnt1), inhibkernel, matrices(:,:,cnt1), sigma, alpha, beta, f1, f2, orientations(cnt1), power); elseif (inhibMethod == 2) % isotropic inhibition result(:,:,cnt1) = inhibfacil(matrices(:,:,cnt1), inhibterm, inhibkernel, matrices(:,:,cnt1), sigma, alpha, beta, f1, f2, orientations(cnt1), power); end end %waitbar(1); %close(h); end end