Exemple #1
0
def test_pointset():
    n_points = 5
    dimension = 3

    PointSetType = itk.PointSet[itk.F, dimension]
    pointset = PointSetType.New()

    points = np.random.random((n_points, dimension)).astype(np.float32)
    pointset.SetPoints(itk.vector_container_from_array(points.ravel()))

    point_data = np.random.random((n_points, )).astype(np.float32)
    pointset.SetPointData(itk.vector_container_from_array(point_data.ravel()))

    itk_pointset_dict = itk.dict_from_pointset(pointset)
    # Bug, to be fixed by 5.3.0
    itk_pointset_dict.pop('dimension', None)
    itkwasm_pointset = PointSet(**itk_pointset_dict)
    itkwasm_pointset_dict = asdict(itkwasm_pointset)
    itk_pointset_roundtrip = itk.pointset_from_dict(itkwasm_pointset_dict)
    itk_pointset_roundtrip_dict = itk.dict_from_pointset(
        itk_pointset_roundtrip)

    pointSetType = itk_pointset_dict["pointSetType"]
    pointSetType_roundtrip = itk_pointset_roundtrip_dict["pointSetType"]
    assert pointSetType["dimension"] == pointSetType_roundtrip["dimension"]

    assert pointSetType["pointComponentType"] == pointSetType_roundtrip[
        "pointComponentType"]
    assert pointSetType["pointPixelComponentType"] == pointSetType_roundtrip[
        "pointPixelComponentType"]
    assert pointSetType["pointPixelType"] == pointSetType_roundtrip[
        "pointPixelType"]
    assert pointSetType["pointPixelComponents"] == pointSetType_roundtrip[
        "pointPixelComponents"]

    assert itk_pointset_dict["name"] == itk_pointset_roundtrip_dict["name"]

    assert itk_pointset_dict["numberOfPoints"] == itk_pointset_roundtrip_dict[
        "numberOfPoints"]
    assert np.array_equal(itk_pointset_dict["points"],
                          itk_pointset_roundtrip_dict["points"])

    assert itk_pointset_dict[
        "numberOfPointPixels"] == itk_pointset_roundtrip_dict[
            "numberOfPointPixels"]
    assert np.array_equal(itk_pointset_dict["pointData"],
                          itk_pointset_roundtrip_dict["pointData"])
Exemple #2
0
PointType = itk.Point[itk.F, 3]
if os.name == 'nt':
    v_point = itk.VectorContainer[itk.ULL, PointType].New()
else:
    v_point = itk.VectorContainer[itk.UL, PointType].New()
v_point.Reserve(NumberOfPoints)

point = PointType()
for i in range(NumberOfPoints):
    point[0] = i + 1.0
    point[1] = i + 2.0
    point[2] = i + 3.0
    v_point.SetElement(i, point)

arr = itk.array_view_from_vector_container(v_point)
points_vc = itk.vector_container_from_array(arr.flatten())

mesh.SetPoints(points_vc)

# Set Cells in the Mesh as Triangle Cell
cells_array = np.zeros([NumberOfCells, Dimension], np.uint64)

# Insert point ids in that cell
for i in range(NumberOfCells):
    cells_array[i, :] = [i * 1, (i + 1) * 2, (i + 2) * 3]

# Insert the cells in mesh by converting to 1D array
cells_vector = itk.vector_container_from_array(cells_array.flatten())
# Test the API for same type of cells
mesh.SetCellsArray(cells_vector, itk.CommonEnums.CellGeometry_TRIANGLE_CELL)
PointType = itk.Point[itk.F, 3]
if os.name == 'nt':
    v_point = itk.VectorContainer[itk.ULL, PointType].New()
else:
    v_point = itk.VectorContainer[itk.UL, PointType].New()
v_point.Reserve(NumberOfPoints)

point = PointType()
for i in range(NumberOfPoints):
    point[0] = i + 1.0
    point[1] = i + 2.0
    point[2] = i + 3.0
    v_point.SetElement(i, point)

arr = itk.array_view_from_vector_container(v_point)
points_vc = itk.vector_container_from_array(arr.flatten())

point_set.SetPoints(points_vc)

# Check the serialization of mesh
serialize_deserialize = pickle.loads(pickle.dumps(point_set))

assert serialize_deserialize.GetNumberOfPoints(
) == point_set.GetNumberOfPoints()
assert serialize_deserialize.GetObjectName() == point_set.GetObjectName()

# Check if points are same
p1 = itk.array_from_vector_container(serialize_deserialize.GetPoints())
p2 = itk.array_from_vector_container(point_set.GetPoints())
assert np.array_equal(p1, p2)
Exemple #4
0
    def test_NumPyBridge_VectorContainer(self):
        "Try to convert a itk.VectorContainer into a Numpy array and back."

        if not (hasattr(itk.VectorContainer, "ULLF") and hasattr(
                itk.PyVectorContainer, "F") and hasattr(itk.Point, "F3")
                and hasattr(itk.VectorContainer, "ULLPF3")
                and hasattr(itk.Point, "F2")
                and hasattr(itk.VectorContainer, "ULLPF2")):
            # There is insufficient wrapping to perform this test; skip it.
            print('Insufficient wrapping to perform itkPyVectorContainerTest')
            return

        v1 = itk.VectorContainer[itk.ULL, itk.F].New()
        v1.Reserve(4)
        v1.SetElement(0, 1.2)
        v1.SetElement(1, 2)
        v1.SetElement(2, 4)
        v1.SetElement(3, 5)
        arr = itk.array_view_from_vector_container(v1)
        v2 = itk.vector_container_from_array(arr)
        self.assertEqual(v1.Size(), arr.shape[0])
        self.assertEqual(v1.Size(), v2.Size())
        # Compute difference between the original vector and numpy array view
        diff = 0.0
        for ii in range(0, v1.Size()):
            diff += abs(v1.GetElement(ii) - arr[ii])
        self.assertEqual(0, diff)
        # Compute difference between the two vectors
        diff = 0.0
        for ii in range(0, v1.Size()):
            diff += abs(v1.GetElement(ii) - v2.GetElement(ii))
        self.assertEqual(0, diff)
        # Test view
        v1.SetElement(0, 1)
        self.assertEqual(v1.GetElement(0), arr[0])
        # Test deep copy
        arr_cp = itk.array_from_vector_container(v1)
        self.assertEqual(v1.GetElement(0), arr_cp[0])
        v1.SetElement(0, 0)
        self.assertNotEqual(v1.GetElement(0), arr_cp[0])
        v2_cp = itk.vector_container_from_array(arr_cp)
        arr_cp[0] = 2
        self.assertNotEqual(v2_cp.GetElement(0), arr_cp[0])

        PointType = itk.Point[itk.F, 3]
        v_point = itk.VectorContainer[itk.ULL, PointType].New()
        v_point.Reserve(2)
        point = PointType()
        point[0] = 1.0
        point[1] = 2.0
        point[2] = 4.0
        v_point.SetElement(0, point)
        point[0] = 6.0
        point[1] = 8.0
        point[2] = 9.0
        v_point.SetElement(1, point)
        arr = itk.array_view_from_vector_container(v_point)
        self.assertTrue(
            np.array_equal(arr, np.array([[1.0, 2.0, 4.0], [6.0, 8.0, 9.0]])))

        PointType = itk.Point[itk.F, 2]
        v_point = itk.VectorContainer[itk.ULL, PointType].New()
        v_point.Reserve(2)
        point = PointType()
        point[0] = 1.0
        point[1] = 2.0
        v_point.SetElement(0, point)
        point[0] = 6.0
        point[1] = 8.0
        v_point.SetElement(1, point)
        arr = itk.array_view_from_vector_container(v_point)
        self.assertTrue(np.array_equal(arr, np.array([[1.0, 2.0], [6.0,
                                                                   8.0]])))