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
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 .
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
Can you give more information on how the input should be and what functions to use on other datasets ? Great job,Thanks
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:
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! =)
What are the requirements on the inputs?
Can you give more information on how the input should be and what functions to use on other datasets
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!