📄 minmaxbbox.m
字号:
function [minmaxbox] = minmaxbbox(varargin)
% minmaxbbox - get minimum, maximum bounding box of objects
%
% FORMAT: minmaxbox = minmaxbbox(v, ...)
%
% Input fields:
%
% v either 1x1 VMR or VTC object or cell array
% ... further objects
%
% Output fields:
%
% minmaxbox 4x3 array with minimum (intersect) and
% maximum (union) bounding box of objects
% valid for .Reframe calls
%
% Note: if all input objects are V16, is returned in natural resolution
% Version: v0.7a
% Build: 7082312
% Date: Aug-23 2007, 12:54 PM CEST
% Author: Jochen Weber, Brain Innovation, B.V., Maastricht, NL
% URL/Info: http://wiki.brainvoyager.com/BVQXtools
% argument check
if nargin == 0 || ...
isempty(varargin{1}) || ...
(~iscell(varargin{1}) && ...
~isBVQXfile(varargin{1}(1), true)) || ...
(iscell(varargin{1}) && ...
~isBVQXfile(varargin{1}{1}(1), true))
error( ...
'BVQXtools:BadArgument', ...
'Bad or missing argument.' ...
);
end
tcc = 0;
for ac = 1:nargin
if ~iscell(varargin{ac})
varargin{ac} = {varargin{ac}};
end
for cc = 1:numel(varargin{ac})
if numel(varargin{ac}{cc}) ~= 1 || ...
~isBVQXfile(varargin{ac}{cc}, true)
error( ...
'BVQXtools:BadArgument', ...
'Bad argument.' ...
);
end
end
tcc = tcc + numel(varargin{ac});
end
oc = cell(1, tcc);
tcc = 0;
for ac = 1:nargin
oc((tcc + 1):(tcc + numel(varargin{ac}))) = varargin{ac}(:);
tcc = tcc + numel(varargin{ac});
end
% check each type
for cc = tcc:-1:1
% allowed are AVA/CMP/DDT/GLM/MSK/VDW/VMR/VMP/VTC
if ~any(strcmpi(oc{cc}.Filetype, ...
{'ava', 'cmp', 'ddt', 'glm', 'msk', 'vdw', 'vmp', 'vmr', 'vtc'}))
oc(cc) = [];
end
end
% reject empty array
if isempty(oc)
error( ...
'BVQXtools:BadArgument', ...
'None of the supported types passed in.' ...
);
end
% start with first
hrv = false(1, tcc);
minmaxbox = repmat([0, 255, 128, 128]', [1, 3]);
% iterate from 2 to last
for cc = 1:tcc
nbox = oc{cc}.BoundingBox.CBox;
minmaxbox([1, 4], :) = max(minmaxbox([1, 4], :), nbox);
minmaxbox([3, 2], :) = min(minmaxbox([3, 2], :), nbox);
if strcmpi(oc{cc}.Filetype, 'vmr') && ...
all(oc{cc}.BoundingBox.ResXYZ == 0.5)
hrv(cc) = true;
end
end
% all hires ?
if all(hrv)
minmaxbox = 2 * minmaxbox;
minmaxbox([2, 4], :) = minmaxbox([2, 4], :) + 1;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -