File Exchange

## Surface Reconstruction using Implicit B-Splines (FAST)

version 1.5.0.0 (13 MB) by
Given a 3D cloud of points accompanied by normals an implicit b-spline surface is reconstructed.

Updated 27 Mar 2019

A fast surface reconstruction is implemented in this set of codes. Given a 3D cloud of points accompanied by normal vectors an implicit b-spline surface will be reconstructed.

Please cite the following paper, in case of using the code:

Rouhani M. and Sappa A.D., Implicit B-spline fitting using the 3L algorithm, IEEE Conference on on Image Processing (ICIP'11), 2011.Mohammad Rouhani, Angel Domingo Sappa: Implicit B-spline fitting using the 3L algorithm. ICIP 2011: 893-896

### Cite As

Mohammad Rouhani (2021). Surface Reconstruction using Implicit B-Splines (FAST) (https://www.mathworks.com/matlabcentral/fileexchange/47490-surface-reconstruction-using-implicit-b-splines-fast), MATLAB Central File Exchange. Retrieved .

### Comments and Ratings (8)

Nick de Angelis

Hi Mohammed, I would really like to use this in the project I am working on, however I am running into an issue. Could you clarify what the "tri" input is? It is the triangular mesh, but is it the connectivity list, the normals or...? Thank you in advance

GeoMath

Ludovic

Hi Mohammed,
Can you give more information on how the input should be and what functions to use on other datasets ? Great job,Thanks

Johannes Diepolder

Hi esen,

as far as I have figured it out the indices of faces have to be zero-based. These indices will lateron be elevated in the function:
[in out,Normal]=NewOffset(r,pnt, tri) --- line25: tri=tri+1;
I solved this issue like this ;):
Tri = Tri-1;
before calling IBSL3_3D_T().

Another thing that I had to fix: If the coordinates have their lower bounds to zero and their upper bounds at one it might result an error when the offsets "s&t" are created. There are values possible that are lower zeros. This results in an error lateron in function:
IND=activeINDEX(P,SET)

So you wanna make sure that your 1x1x1 cube has a small offset to your point-coordinates. There might be easier ways for normalizing the point-coordinates but this one works (Cor are the coordinates [NPx3]):

MinX = min(Cor(:,1))-0.1*abs(min(Cor(:,1)));
MaxX = max(Cor(:,1))+0.1*abs(min(Cor(:,1)));
MinY = min(Cor(:,2))-0.1*abs(min(Cor(:,2)));
MaxY = max(Cor(:,2))+0.1*abs(min(Cor(:,2)));
MinZ = min(Cor(:,3))-0.1*abs(min(Cor(:,3)));
MaxZ = max(Cor(:,3))+0.1*abs(min(Cor(:,3)));

CorNorm = Cor;
CorNorm(:,1) = (CorNorm(:,1)-MinX)/((MaxX-MinX));
CorNorm(:,2) = (CorNorm(:,2)-MinY)/((MaxY-MinY));
CorNorm(:,3) = (CorNorm(:,3)-MinZ)/((MaxZ-MinZ));

BTW: Great work Mohammad! Really like your surface tool! =)

esen

What are the requirements on the inputs?

esen

Banu Muthukumar

Can you give more information on how the input should be and what functions to use on other datasets

Tags

##### MATLAB Release Compatibility
Created with R2013b
Compatible with any release
##### Platform Compatibility
Windows macOS Linux

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!