本文共 1186 字,大约阅读时间需要 3 分钟。
3D mesh的farthest sampling与2D 图片的采样原理类似(http://blog.csdn.net/seamanj/article/details/52028904).
随机给个初始点,然后根据初始点,然后算出最远的n-1个点, n为我们需要采样的个数
最后以这个n个点为初始点,算出mesh上的距离场
主要代码:
% test for farthest point sampling on 3D meshesn = 300;name = 'elephant-50kv';[vertex,faces] = read_mesh(name);options.name = name;if size(vertex,1)>size(vertex,2) vertex = vertex';endif size(faces,1)>size(faces,2) faces = faces';endsave_images = 0;% plot sampling locationi = 0;landmark = [];for nbr_landmarks = [50]% 500 1000 2000 5000 10000] % 100:50:500 i = i+1; disp('Perform farthest point sampling.'); landmark = perform_farthest_point_sampling_mesh( vertex,faces, landmark, nbr_landmarks-length(landmark) ); %这步会根据farthest point sampling原则选出nbr_landmarks-length(landmark)个样本点 % compute the associated triangulation [D,Z,Q] = perform_fast_marching_mesh(vertex, faces, landmark); %初始点为landmark,然后算距离 % display col = D; col(col==Inf) = 0; col = perform_histogram_equalization(col, linspace(0,1,length(col))); options.face_vertex_color = col; hold on; plot_mesh(vertex, faces, options); hold off; colormap jet(256); camlight; shading interp;end
运行结果如下: