mvtec3d

以bagel为例,其中有calibration、

bagel			# 百吉圈(硬面包)
	calibration
		camera_parameters.json
	test
		combined
			gt	# 缺陷部位的分割剪影png
			rgb	# 原图png
			xyz	# tiff
		contamination	# 污染物
			同上
		crack
			同上
		good
			同上		
		hole
			同上		
	train
		good
			rgb
			xyz
	validation
		good
			同train
	class_ids.json
		

camera_parameters.json

{
  "camera_type": "area_scan_division",
  "focus": 0.0103431,
  "kappa": -2205.03,
  "sx": 3.74983e-06,
  "sy": 3.75e-06,
  "cx": 252.046,
  "cy": 450.07,
  "image_width": 800,
  "image_height": 800
}

class_ids.json如下
mvtec3d_第1张图片
其余类别

cable_gland	缆线接头,缺陷:弯曲、末端破裂或者头部凹陷、洞、螺纹损坏
carrot	胡萝卜,缺陷:污染、裂纹、割痕、洞
cookie	饼干
dowel	暗榫(识图的话应该叫塑料膨胀管)
foam	鸡蛋托盘
peach
potato
rope	绞绳,缺陷:污染、裂痕、蓬松
tire

顺便记一下在gpt那问到的处理tiff的代码,可能用到?

import tifffile as tiff

# Attempt to read the TIFF file using tifffile
try:
    tiff_data = tiff.imread(file_path)
    # Display the shape of the array to understand its dimensions
    tiff_data_shape = tiff_data.shape
except Exception as e:
    tiff_data_shape = str(e)

tiff_data_shape

(800, 800, 3)

要从这种类型的图像中生成点云,我们可以遵循以下步骤:

将图像转换为灰度图。 遍历每个像素,使用其 x 和 y 坐标以及灰度值(作为 z 坐标)来生成点云。
我将进行这些转换并提供一个点云数据的示例。 ​​

# Convert the image to grayscale
gray_image = np.mean(tiff_data, axis=2)

# Generate point cloud data 
points = [] 
for y in range(gray_image.shape[0]):
    for x in range(gray_image.shape[1]):
        z = gray_image[y][x]  # Grayscale value as height
        points.append([x, y, z])

# Convert to numpy array for better handling 
point_cloud = np.array(points)

# Show the shape of the point cloud and a small sample of the data 
point_cloud_shape = point_cloud.shape 
point_cloud_sample = point_cloud[:5]  # First 5 points as a sample

point_cloud_shape, point_cloud_sample 
((640000, 3),  
array([[0. , 0.        , 0.14262693],
        [1.        , 0.        , 0.14268805],
        [2.        , 0.        , 0.14277673],
        [3.        , 0.        , 0.14286469],
        [4.        , 0.        , 0.14295126]]))

成功将图像转换为点云数据。生成的点云由 640,000 个点组成,每个点有三个坐标:x, y, 和 z。
这些坐标中,x 和 y 是像素的位置,而 z 是基于灰度值的高度(或深度)。

现在你可以使用 CloudCompare、MeshLab 或其他点云可视化工具来查看和分析这些数据。如果你选择使用 Python 进行可视化,可以使用 matplotlib、plotly 或类似库来创建三维散点图。

dl

你可能感兴趣的:(3d)