VTK之图像数据结构

1.VTK图像数据结构

       数字图像文件内容由两个部分组成:图像头信息和数据。图像头信息定义了图像的基本信息,主要包括原点位置(Origin)、像素间隔(Space)和维数(Dimension)。通过这三个参数即可以确定图像空间位置和大小。图像可以看作空间中的一个规则的网格,网格中的每个最小单元称为像素(二维)或体素(三维),网格在每个方向上的像素或体素个数即为图像在该方向的维数。像素索引表示每个像素在图像网格中的位置,是图像内部的网格坐标(x,y,z)。对于普通的一张图像而言,z方向维数为1。

图像数据即为图像像素的像素值,一般采用一维数组来表示和存储。VTK中图像数据结构由类vtkImageData来表示。这种数据类型是结构化的,这意味着只要用很少的参数(原点位置、像素间隔和维数)就能准确定义每个数据点的位置。

virtual void *GetScalarPointer(int coordinates[3]);// 根据给定的像素索引得到指定的像素值,注意:此处返回的是第(x,y,z)个像素值的地址
virtual void *GetScalarPointer(int x, int y, int z);//根据给定的像素索引得到指定的像素值,注意:此处返回的是第(x,y,z)个像素值的地址
virtual void *GetScalarPointer();//返回图像数据数组的头指针,然后根据头指针可以一次访问并设置索引像素,图像数据数组采用一维数组
vtkSmartPointer<vtkBMPReader> reader =
		vtkSmartPointer<vtkBMPReader>::New();
	reader->SetFileName(argv[1]);
	reader->Update();

	int dims[3];
	reader->GetOutput()->GetDimensions(dims);

	double origin[3]; 
	reader->GetOutput()->GetOrigin(origin);
	//reader->GetOutput()->SetOrigin(10,0,0);

	double space[3];
	reader->GetOutput()->SetSpacing(20, 20, 1);
	reader->GetOutput()->GetSpacing(space);
	



	std::cout << dims[0] << "   " << dims[1] << "   " << dims[2] << endl;
	std::cout << origin[0] << "   " << origin[1] << "   " << origin[2] << endl;
	std::cout << space[0] << "   " << space[1] << "   " << space[2] << endl;
	int nbOfComp;
	nbOfComp = reader->GetOutput()->GetNumberOfScalarComponents();//获取像素的元组组分数,确定是灰度图、梯度图还是RGB图

	for(int k=0; k<dims[2]; k++)
	{
		for(int j=0; j<dims[1]; j++)
		{
			for(int i=0; i<dims[0]; i++)
			{
				if(i<100 && j<100)
				{
					unsigned char * pixel = 
						(unsigned char *) ( reader->GetOutput()->GetScalarPointer(i, j, k) );
					*pixel = i;
					*(pixel+1) = j;
					*(pixel+2) = 0;
				}
			}
		}
	}

 

猜你喜欢

转载自blog.csdn.net/mao827935969/article/details/83143623
今日推荐