我做了很多搜索,但还没有找到答案。我目前正在研究一块麦田的一些数据。我有多个字段的PLY文件,我已经成功地使用Python和VTK读入、过滤和可视化。我的主要目标是最终分割并对单个作物地块进行分析。在
然而,为了使这项任务更容易,我首先想“规范化”我的点云,这样所有的绘图基本上都是“在同一水平上”。从我所附的图片中你可以看到点土块从一个角向它的另一个角倾斜。所以我想把图像展平,这样地面点都在同一平面/水平面上。点的重置也相应地进行了调整。在
我还包含了我的代码来展示我是如何做到这一点的。如果有人对我如何实现一个平面的正常化有什么建议,我将非常感激。很遗憾,我不能包括我的数据,因为它是工作相关的。在
谢谢。
乔希import vtk
from vtk.util import numpy_support
import numpy as np
filename = 'File.ply'
# Reader
r = vtk.vtkPLYReader()
r.SetFileName(filename)
# Filters
vgf = vtk.vtkVertexGlyphFilter()
vgf.SetInputConnection(r.GetOutputPort())
# Elevation
pc = r.GetOutput()
bounds = pc.GetBounds()
#print(bounds)
minz = bounds[4]
maxz = bounds[5]
#print(bounds[4], bounds[5])
evgf = vtk.vtkElevationFilter()
evgf.SetInputConnection(vgf.GetOutputPort())
evgf.SetLowPoint(0, 0, minz)
evgf.SetHighPoint(0, 0, maxz)
#pc.GetNumberOfPoints()
# Look up table
lut = vtk.vtkLookupTable()
lut.SetHueRange(0.667, 0)
lut.SetSaturationRange(1, 1)
lut.SetValueRange(1, 1)
lut.Build
# Renderer
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(evgf.GetOutputPort())
mapper.SetLookupTable(lut)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
renderer.AddActor(actor)
renderer.SetBackground(0, 0, 0)
renWin.Render()
iren.Start()