如何从 2D 掩模图像生成 3D 网格

问题描述 投票:0回答:1

我已经训练了分割模型并检测了平面图的墙壁。现在我想创建这个遮罩的 3D 网格,并以可以轻松在网络上显示的格式构建墙壁。这是使用 ai 生成的遮罩

这些是墙

现在我想将墙壁拉伸到特定高度并制作 3D 模型。

这是提取墙壁的代码,下一步是用它创建 3D 模型。我怎样才能做到这一点?

import cv2
import os
import numpy as np
import matplotlib.pyplot as plt

# Parameters
wall_height = 150
img_path = 'output_mask.png'

# Load the image
img = cv2.imread(img_path)

# Get the original dimensions of the image
original_height, original_width = img.shape[:2]

# Resize the image while preserving aspect ratio
new_width = 1024
new_height = int((new_width / original_width) * original_height)
img_resized = cv2.resize(img, (new_width, new_height))

# Create a blank mask for the walls
walls = np.zeros(img_resized.shape[:2], dtype=np.uint8)

# Extract the walls (walls are white in the image)
walls[(img_resized == [255, 255, 255]).all(axis=2)] = 255
python 3d gltf slt
1个回答
0
投票

一种解决方案是:

  1. 使用 Hough TransformRANSAC 或任何其他合适的技术检测第二个图像中的线条。
  2. 检查这些线在 2D/图像空间中的交点。这些是 3D 网格顶点(z 坐标 = 0)。连接这些顶点的线是边。
  3. 使用先前顶点的 x 和 y 坐标并将 z 替换为墙壁高度 (z_height) 来创建新顶点。
  4. 将这些顶点连接到其他顶点:具有相同 x 和 y 坐标(但 z=0 和 z=z_height)的顶点共享一条边,并且 z=0 平面中的边与 z=z_height 平面中的边相同。
  5. 从边缘创建四边形面(或根据需要将它们分成三角形面)。请注意,顶点/边的顺序必须保持一致(通常是逆时针)。
  6. 以您想要的任何格式将结果保存在文件中:STLOBJOFF等。
© www.soinside.com 2019 - 2024. All rights reserved.