Skip to content

Commit

Permalink
Save Matlab RBF model as NIfTI and decode with JavaScript
Browse files Browse the repository at this point in the history
  • Loading branch information
neurolabusc committed Jun 8, 2024
1 parent 5e0b9e8 commit 2ff1c34
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
22 changes: 22 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,28 @@ async function main() {
nv1.attachToCanvas(gl1)
const pca_coeff = (await nv1.loadFromUrl('./pca_values_coeff.nii.gz')).img
const pca_mu = (await nv1.loadFromUrl('./pca_values_mu.nii.gz')).img
async function loadRBFmodel() {
const rbf = (await nv1.loadFromUrl('./models_5x10_diff.nii.gz')).img
let v = 0;
const nModels = rbf[v++]
const models = []
for (let i = 0; i < nModels; i++) {
let model = {}
model.dim0 = rbf[v++]
model.dim1 = rbf[v++]

model.bias_i = rbf[v++]
model.gamma_i = rbf[v++]
model.SVs = new Float64Array(model.dim0 * model.dim1)
for (let j = 0; j < (model.dim0 * model.dim1); j++)
model.SVs[j] = rbf[v++]
model.sv_coef = new Float64Array(model.dim0)
for (let j = 0; j < model.dim0; j++)
model.sv_coef[j] = rbf[v++]
models.push(model)
}
}
const models = await loadRBFmodel()
nv1.opts.dragMode = nv1.dragModes.pan
nv1.opts.multiplanarForceRender = true
nv1.opts.yoke3Dto2DZoom = true
Expand Down
32 changes: 32 additions & 0 deletions public/mat2nii.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
function ma2nii
% convert model with Radial basis function kernels from matlab to NIfTI
% we could use JSON, but we want to retain precision


models = load('models_5x10_diff.mat').models;
%
v = 1;
nii(v) = numel(models);
v = v + 1;
for i = 1:numel(models)
nii(v) = size(models{i}.SVs,1);
v = v + 1;
nii(v) = size(models{i}.SVs,2);
v = v + 1;
nii(v) = - models{i}.rho; % bias_i
v = v + 1;
nii(v) = models{i}.Parameters(4); % gamma_i
v = v + 1;
for j = 1:numel(models{i}.SVs)
nii(v) = models{i}.SVs(j); % support_vectors_i
v = v + 1;
end
if (size(models{i}.SVs,1) ~= numel(models{i}.sv_coef))
error('unexpected numel sv_coef');
end
for j = 1:numel(models{i}.sv_coef)
nii(v) = models{i}.sv_coef(j); % coefficients_i
v = v + 1;
end
end
niftiwrite(nii,'models_5x10_diff.nii')
Binary file added public/models_5x10_diff.nii.gz
Binary file not shown.

0 comments on commit 2ff1c34

Please sign in to comment.