繁体   English   中英

VTK将2D图像转换为3D(C ++)

[英]vtk convert 2d image to 3d (c++)

我已经读了好几天的doxygen和vtk wiki了,但我仍然不是100%地确定我要问的事情甚至可能。

我要完成的工作是以通用格式(即PNG)拍摄2d图像并输出3d模型(PNG-> Model / Mesh或2d-> 3d)。 一个很好的例子是,如果我在MS Paint中绘制一个多维数据集并将图形另存为PNG,然后读取图像并生成该多维数据集的3D模型。 所以我的第一个问题是可能吗? IT部门似乎应该采取某种方法来获取图像数据并将其转换为多数据,然后从那里开始建立模型。 这就是我的想法(在C ++中):

int main(int argc, char *argv[])
{
//Verify correct number of input arguements 
if(argc < 2)
{
    fprintf(stderr, "Usage: %s Filename(.png)\n");
    return EXIT_FAILURE;
}   
std::string fileName = argv[1];
//Read file
vtkSmartPointer<vtkImageReader2Factory> readerFactory =         vtkSmartPointer<vtkImageReader2Factory>::New();
vtkImageReader2 *imageReader = readerFactory->CreateImageReader2(inputFilename.c_str());
imageReader->Update();

//Get the image Data
    vtkSmartPointer<vtkImageDataGeometryFilter> imageDataGeometryFilter = 
vtkSmartPointer<vtkImageDataGeometryFilter>::New();

imageDataGeometryFilter-> SetInputConnection(imageReader-> GetOutputPort()); imageDataGeometryFilter->更新();

因此,如果第一个问题的答案是肯定的,那么这似乎还遥遥无期吗?

我怀疑VTK是否提供了将通用2d形状处理为3d模型的现成算法。 这基本上是一个反问题,意味着解决方案可能很多。 如果不应用对象形状的某些约束或假设,这将很困难。

VTK可能会帮助您表达处理图像的步骤(例如,提取显着特征,例如角和线),以及在数据结构中提供更多选择。 在我看来,您的代码中显示的想法仅显示了从2d到3d的一般处理流程,但是细节(例如几何过滤器)可能需要由您自己实现。

您要完成的实际任务是一个算法问题,例如,这项工作在CAD领域(将清晰的2d工程图绘制到3d模型中)具有研究兴趣。

将3D对象投影到2D平面并栅格化不是一个可逆的过程,因为这样做会丢失大量信息(深度,隐藏的曲面,拓扑等)。 您所能做的就是尝试通过明智的猜测来恢复丢失的信息。

即使是具有立体视觉,相当大的并行处理能力和巨大的上下文信息数据库(人类)的高度专业化的系统,也很容易被这一点( 光学错觉错视 画法 )所迷惑。

用计算机来解决这个问题非常复杂,结果很可能令人失望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM