📄 spherevmr.m
字号:
function vmr = spherevmr(c, sl, ic)
% spherevmr - create a 256x256x256 VMR for spherical region growing
%
% FORMAT: vmr = spherevmr([center [, slope, intercept])
%
% Input fields:
%
% center optional center coordinate (default: 128, 128, 128)
% slope value slope (default: 1)
% intercept value for center coordinate (default: 0)
%
% Output fields:
%
% vmr VMR
% Version: v0.7b
% Build: 7092614
% Date: Sep-26 2007, 2:15 PM CEST
% Author: Jochen Weber, Brain Innovation, B.V., Maastricht, NL
% URL/Info: http://wiki.brainvoyager.com/BVQXtools
% argument check
if nargin < 1 || ...
~isa(c, 'double') || ...
numel(c) ~= 3 || ...
any(isnan(c) | c < 0 | c > 255)
c = [128, 128, 128];
else
c = c(:)';
end
if nargin < 2 || ...
~isa(sl, 'double') || ...
numel(sl) ~= 1 || ...
isnan(sl) || ...
sl < -100 || ...
sl > 100 || ...
sl == 0
sl = 1;
end
if nargin < 3 || ...
~isa(ic, 'double') || ...
numel(ic) ~= 1 || ...
isnan(ic) || ...
ic < -200 || ...
ic > 200
ic = 0;
end
% prepare coordinates for slice
[cx, cz] = ndgrid(single(0:255), single(0:255));
cx = [cx(:) - c(2), cz(:) - c(3)];
cz = single(1:256) - c(1);
co = ones(65536, 1);
% create v16 data
v16d = single([]);
v16d(256, 256, 256) = 0;
% iterate over slices
for zc = 1:256
cdist = sl * sqrt(sum([cx, cz(zc) * co] .^ 2, 2)) + ic;
cdist(cdist < 0) = 0;
v16d(:, :, zc) = reshape(cdist, [256, 256]);
end
% put into output
vmr = BVQXfile('new:vmr');
vmr.VMRData16 = uint16(round(v16d));
% recompute VMR
mn = min(v16d(:));
if mn > 100
v16d = v16d - mn;
end
mx = max(v16d(:));
if mx > 225
v16d = v16d ./ (mx / 225);
end
vmr.VMRData = uint8(round(v16d));
% bless object
bless(vmr, 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -