Выполнение расстояния Хаусдорфа и раскраски по качеству вершин не экспортирует цвет и качество

Я использую фильтр Hausdorff Distance из meshlabserver и хочу сохранить Sampled Mesh с раскраской вершин. Расстояние вычисляется, и я получаю его в выводе оболочки и в файле журнала. При экспорте вывода в * .ply я не получаю качество и цвета вершин.

Я выполняю следующую команду: meshlabserver -i first.stl -i second.stl -o out.ply -m vc vq -s script.mlx

Где script.mlx содержит следующее:

<FilterScript>
 <filter name="Remove Duplicate Vertices"/>
 <filter name="Hausdorff Distance">
  <Param value="1" tooltip="The mesh whose surface is sampled. For each sample we search the closest point on the Target Mesh." name="SampledMesh" type="RichMesh" description="Sampled Mesh"/>
  <Param value="0" tooltip="The mesh that is sampled for the comparison." name="TargetMesh" type="RichMesh" description="Target Mesh"/>
  <Param value="false" tooltip="Save the position and distance of all the used samples on both the two surfaces, creating two new layers with two point clouds representing the used samples." name="SaveSample" type="RichBool" description="Save Samples"/>
  <Param value="true" tooltip="For the search of maxima it is useful to sample vertices and edges of the mesh with a greater care. It is quite probably the the farthest points falls along edges or on mesh vertexes, and with uniform montecarlo sampling approachesthe probability of taking a sample over a vertex or an edge is theoretically null.&lt;br>On the other hand this kind of sampling could make the overall sampling distribution slightly biased and slightly affects the cumulative results." name="SampleVert" type="RichBool" description="Sample Vertexes"/>
  <Param value="true" tooltip="See the above comment." name="SampleEdge" type="RichBool" description="Sample Edges"/>
  <Param value="false" tooltip="See the above comment." name="SampleFauxEdge" type="RichBool" description="Sample FauxEdge"/>
  <Param value="true" tooltip="See the above comment." name="SampleFace" type="RichBool" description="Sample Faces"/>
  <Param value="30514" tooltip="The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt." name="SampleNum" type="RichInt" description="Number of samples"/>
  <Param min="0" value="233.888" tooltip="Sample points for which we do not find anything whithin this distance are rejected and not considered neither for averaging nor for max." name="MaxDist" type="RichAbsPerc" description="Max Distance" max="468.287"/>
 </filter>
 <filter name="Colorize by vertex Quality">
  <Param value="0" tooltip="The value that will be mapped with the lower end of the scale (blue)" name="minVal" type="RichFloat" description="Min"/>
  <Param value="0.8" tooltip="The value that will be mapped with the upper end of the scale (red)" name="maxVal" type="RichFloat" description="Max"/>
  <Param min="0" value="0" tooltip="If not zero this value will be used for a percentile cropping of the quality values.&lt;br> If this parameter is set a value P to &lt;i>P&lt;/i> then the two values &lt;i>V_min,V_max&lt;/i> for which &lt;i>P&lt;/i>% of the vertices have a quality &lt;b>lower or greater than &lt;i>V_min,V_max&lt;/i> are used as min/max values for clamping.&lt;br>&lt;br> The automated percentile cropping is very useful for automatically discarding outliers." name="perc" type="RichDynamicFloat" description="Percentile Crop [0..100]" max="100"/>
  <Param value="false" tooltip="If true the min max range will be enlarged to be symmertic (so that green is always Zero)" name="zeroSym" type="RichBool" description="Zero Simmetric"/>
 </filter>
</FilterScript>

При запуске Hausdorff Distance и Colorize по качеству вершин из GUI MeshLab и экспорта в слой я получаю сетку с качеством и цветами.

Можно ли получить такое же поведение от meshlabserver? (даже получить только качество вершин будет хорошо) Я что-нибудь упускаю?

Спасибо :)


person Eyal    schedule 11.12.2019    source источник


Ответы (1)


Я проделал те же шаги, что и вы, используя свои две сетки. Вторая сетка создается Quadric Decimation фильтром и несколькими Taubin Smooth фильтрами, примененными к области в крыльях.

Две мои входные сетки

Когда я запустил ваш script.mlx в meshlabserver (предварительная версия) с помощью той же команды, и у меня был этот журнал:

Opening a file with extention ply
Mesh gargoyle.50k.ply loaded has 24511 vn 48939 fn
Opening a file with extention ply
Mesh gargoyle.2k.ply loaded has 1264 vn 2500 fn
output mesh  ./out.ply
vertex color, vertex quality, Apply FilterScript: './script.mlx'
FilterScript
Reading filter with name Remove Duplicate Vertices
Reading filter with name Hausdorff Distance
    Reading Param with name SampledMesh : RichMesh
    Reading Param with name TargetMesh : RichMesh
    Reading Param with name SaveSample : RichBool
    Reading Param with name SampleVert : RichBool
    Reading Param with name SampleEdge : RichBool
    Reading Param with name SampleFauxEdge : RichBool
    Reading Param with name SampleFace : RichBool
    Reading Param with name SampleNum : RichInt
    Reading Param with name MaxDist : RichAbsPerc
Reading filter with name Colorize by vertex Quality
    Reading Param with name minVal : RichFloat
    Reading Param with name maxVal : RichFloat
    Reading Param with name perc : RichDynamicFloat
    Reading Param with name zeroSym : RichBool
Starting Script of 3 actionsfilter: Remove Duplicate Vertices
LOG: 2 Removed 0 duplicated vertices
Removed 0 duplicated vertices
filter: Hausdorff Distance
Sampled  mesh has    1264 vert    2500 face
Searched mesh has   24511 vert   48939 face
Max sampling distance 233.888000 on a bbox diag of 198.622528
LOG: 2 Hausdorff Distance computed
LOG: 2      Sampled 62292 pts (rng: 0) on gargoyle.2k.ply searched closest on gargoyle.50k.ply
LOG: 2      min : 0.000016   max 7.446799   mean : 0.756087   RMS : 1.266457
LOG: 2 Values w.r.t. BBox Diag (201.385788)
LOG: 2      min : 0.000000   max 0.036978   mean : 0.003754   RMS : 0.006289

Removed 0 duplicated vertices
Hausdorff Distance computed
     Sampled 62292 pts (rng: 0) on gargoyle.2k.ply searched closest on gargoyle.50k.ply
     min : 0.000016   max 7.446799   mean : 0.756087   RMS : 1.266457
Values w.r.t. BBox Diag (201.385788)
     min : 0.000000   max 0.036978   mean : 0.003754   RMS : 0.006289

filter: Colorize by vertex Quality
LOG: 2 Quality Range: 0.000250 7.398357; Used (0.000000 0.800000)
Removed 0 duplicated vertices
Hausdorff Distance computed
     Sampled 62292 pts (rng: 0) on gargoyle.2k.ply searched closest on gargoyle.50k.ply
     min : 0.000016   max 7.446799   mean : 0.756087   RMS : 1.266457
Values w.r.t. BBox Diag (201.385788)
     min : 0.000000   max 0.036978   mean : 0.003754   RMS : 0.006289

Quality Range: 0.000250 7.398357; Used (0.000000 0.800000)
Mesh ./gargoyle.2k.ply saved as ./out.ply (1264 vn 2500 fn)

Мой выходной файл имеет цвет и качество, как и ожидалось. Расстояния в крыльях больше, чем в теле из-за моих дополнительных сглаживаний (синий означает большие расстояния, как видно на гистограмме качества).

мой выходной файл

На моем компьютере все в порядке, что может выходить из строя на вашем? ... Я загрузил официальную версию meshlab 2016-12 и запустил тот же скрипт, используя meshlabserver 2016 года. Это был результат:

введите описание изображения здесь

На выходе: без цвета, все значения качества установлены на ноль. Но подождите ... Это похоже на оригинальную модель 50k, а не на ожидаемую уничтоженную. Meshlabserver-2016 сохраняет первую сетку, а не вторую.

Итак, я изменил ваш файл script.mlx, чтобы сэмплировать по сетке 0 вместо сетки 1.

...
 <filter name="Hausdorff Distance">
  <Param value="0" tooltip="The mesh whose surface is sampled. For each sample we search the closest point on the Target Mesh." name="SampledMesh" type="RichMesh" description="Sampled Mesh"/>
  <Param value="1" tooltip="The mesh that is sampled for the comparison." name="TargetMesh" type="RichMesh" description="Target Mesh"/>
...

И запустил новый скрипт, меняя порядок входных сеток:

meshlab-2016.12/src/distrib/meshlabserver -i gargoyle.2k.ply -i gargoyle.50k.ply -o out2.ply  -m vq vc -s script2.mlx

Выходной файл out2.ply не имеет цвета, но имеет правильные значения качества расстояний, поэтому я могу загрузить его в meshlab и применить там Colorize by vertex Quality. Приветствую всемогущую горгулью Хаусдорф!

введите описание изображения здесь

Вывод: вам нужно выбрать между обновлением meshlab до текущей предварительной версии или остаться с meshlab-2016 и изменить порядок ваших входных сеток.

person Rockcat    schedule 12.12.2019