VtkPolyDataEdgeConnectivityFilter: обновлять границы после Large/SmallRegionGrowingPython

Программы на Python
Ответить
Anonymous
 VtkPolyDataEdgeConnectivityFilter: обновлять границы после Large/SmallRegionGrowing

Сообщение Anonymous »

Я использую vtkPolyDataEdgeConnectivityFilter для сегментации сетки на основе выбранных краев. После получения сегментации я запускаю vtkSmallRegionGrow. На этом этапе я хотел бы применить vtkLargeRegionGrow к новым регионам, определенным SmallRegionGrow. Для этого мне нужны новые ребра, определяющие границы регионов, найденных SmallRegionGrow. Сейчас я извлекаю эти ребра вручную, но это значительно увеличивает время выполнения. Есть ли способ заставить фильтр напрямую возвращать эти края в VTK?
Я работаю в Python 3.12, используя pyvista 0.44.1 и vtk 9.3.1.
feature_edges = PolyData(mesh.points, lines=edges.reshape(-1))
f = vtkPolyDataEdgeConnectivityFilter()
f.SetExtractionModeToAllRegions()
f.SetColorRegions(True)
f.SetInputData(mesh)
f.BarrierEdgesOn()
f.SetBarrierEdges(True)
f.SetSourceData(feature_edges)
f.Update()
f.SetLargeRegionThreshold(sml_thr)
f.GrowSmallRegionsOn()
f.Update()
f.SetSourceData(newborders(mesh)
f.SetLargeRegionThreshold(lrg_thr)
f.GrowLargeRegionsOn()
f.Update()

def newborders(mesh):
edges = []
for i in range(mesh.n_cells):
for j in range(len(mesh.cell_neighbors(i,'edges'))):
if mesh['RegionId'] != mesh['RegionId'][mesh.cell_neighbors(i,'edges')[j]]:
edge = np.intersect1d(mesh.get_cell(i).point_ids,mesh.get_cell(mesh.cell_neighbors(i,'edges')[j]).point_ids)
edges.append([2 , edge[0], edge[1]])
return np.array(edges)


Подробнее здесь: https://stackoverflow.com/questions/792 ... iongrowing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»