色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲

常州機(jī)器視覺培訓(xùn)

常州上位機(jī)軟件開發(fā)

常州工業(yè)機(jī)器人編程設(shè)計(jì)培訓(xùn)

常州PLC培訓(xùn)

常州PLC

常州PLC編程培訓(xùn)

常州電工培訓(xùn)

常州和訊plc培訓(xùn)中心歡迎您!
當(dāng)前位置:網(wǎng)站首頁 > 新聞中心 新聞中心
使用Python進(jìn)行二維圖像的三維重建(上)-常州機(jī)器視覺培訓(xùn),常州上位機(jī)培訓(xùn)
日期:2023-12-18 16:10:28人氣:  標(biāo)簽:常州機(jī)器視覺培訓(xùn) 常州上位機(jī)培訓(xùn)

 

2D圖像的三維重建是從一組2D圖像中創(chuàng)建對象或場景的三維模型的過程。這個(gè)技術(shù)廣泛應(yīng)用于計(jì)算機(jī)視覺、機(jī)器人技術(shù)和虛擬現(xiàn)實(shí)等領(lǐng)域。

在本文中,我們將解釋如何使用Python執(zhí)行從2D圖像到三維重建的過程。我們將使用TempleRing數(shù)據(jù)集作為示例,逐步演示這個(gè)過程。該數(shù)據(jù)集包含了在對象周圍的一個(gè)環(huán)上采樣的阿格里真托(Agrigento)“Dioskouroi神廟”復(fù)制品的47個(gè)視圖。


三維重建的關(guān)鍵概念


在深入了解如何使用Python從2D圖像執(zhí)行三維重建的詳細(xì)步驟之前,讓我們首先回顧一些與這個(gè)主題相關(guān)的關(guān)鍵概念。


深度圖


深度圖是一幅圖像,其中每個(gè)像素代表攝像機(jī)和場景中相應(yīng)點(diǎn)之間的距離。深度圖常用于計(jì)算機(jī)視覺和機(jī)器人技術(shù)中,用于表示場景的三維結(jié)構(gòu)。


有許多不同的方法可以從2D圖像計(jì)算深度圖,包括立體對應(yīng)、結(jié)構(gòu)光和飛行時(shí)間等。在本文中,我們將使用立體對應(yīng)來從示例數(shù)據(jù)集計(jì)算深度圖。


Point Cloud


點(diǎn)云是表示對象或場景形狀的三維空間中的一組點(diǎn)。點(diǎn)云常用于計(jì)算機(jī)視覺和機(jī)器人技術(shù)中,用于表示場景的三維結(jié)構(gòu)。


一旦我們計(jì)算出代表場景深度的深度圖,我們可以使用它來計(jì)算一個(gè)三維點(diǎn)云。這涉及使用有關(guān)攝像機(jī)內(nèi)部和外部參數(shù)的信息,將深度圖中的每個(gè)像素投影回三維空間。


網(wǎng)格


網(wǎng)格是一個(gè)由頂點(diǎn)、邊和面連接而成的表面表示。網(wǎng)格常用于計(jì)算機(jī)圖形學(xué)和虛擬現(xiàn)實(shí)中,用于表示對象或場景的形狀。


一旦我們計(jì)算出代表對象或場景形狀的三維點(diǎn)云,我們可以使用它來生成一個(gè)網(wǎng)格。這涉及使用諸如Marching Cubes或Poisson表面重建等算法,將表面擬合到點(diǎn)云上。


逐步實(shí)現(xiàn)


現(xiàn)在我們已經(jīng)回顧了與2D圖像的三維重建相關(guān)的一些關(guān)鍵概念,讓我們看看如何使用Python執(zhí)行這個(gè)過程。我們將使用TempleRing數(shù)據(jù)集作為示例,逐步演示這個(gè)過程。下面是一個(gè)執(zhí)行Temple Ring數(shù)據(jù)集中圖像的三維重建的示例代碼:


安裝庫:


pip install numpy scipy

導(dǎo)入庫:


#importing libraries 

import cv2

import numpy as np

import matplotlib.pyplot as plt

import os

加載TempleRing數(shù)據(jù)集的圖像:


# Directory containing the dataset images

dataset_dir = '/content/drive/MyDrive/templeRing'

# Initialize the list to store images

images = []

# Attempt to load the grayscale images and store them in the list

for i in range(1, 48):  # Assuming images are named templeR0001.png to templeR0047.png

    img_path = os.path.join(dataset_dir, f'templeR{i:04d}.png')

    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)

    if img is not None:

        images.append(img)

    else:

        print(f"Warning: Unable to load 'templeR{i:04d}.png'")

# Visualize the input images

num_rows = 5  # Specify the number of rows

num_cols = 10  # Specify the number of columns

fig, axs = plt.subplots(num_rows, num_cols, figsize=(15, 8))

# Loop through the images and display them

for i, img in enumerate(images):

    row_index = i // num_cols  # Calculate the row index for the subplot

    col_index = i % num_cols   # Calculate the column index for the subplot

    axs[row_index, col_index].imshow(img, cmap='gray')

    axs[row_index, col_index].axis('off')

# Fill any remaining empty subplots with a white background

for i in range(len(images), num_rows * num_cols):

    row_index = i // num_cols

    col_index = i % num_cols

    axs[row_index, col_index].axis('off')

plt.show()

5.jpg

解釋:這段代碼加載灰度圖像序列,將它們排列在網(wǎng)格布局中,并使用matplotlib顯示它們。


為每個(gè)圖像計(jì)算深度圖:


# Directory containing the dataset images

dataset_dir = '/content/drive/MyDrive/templeRing'

# Initialize the list to store images

images = []

# Attempt to load the grayscale images and store them in the list

for i in range(1, 48):  # Assuming images are named templeR0001.png to templeR0047.png

    img_path = os.path.join(dataset_dir, f'templeR{i:04d}.png')

    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)

    if img is not None:

        images.append(img)

    else:

        print(f"Warning: Unable to load 'templeR{i:04d}.png'")

# Initialize the list to store depth maps

depth_maps = []

# Create a StereoBM object with your preferred parameters

stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)

# Loop through the images to calculate depth maps

for img in images:

    # Compute the depth map

    disparity = stereo.compute(img, img)

    # Normalize the disparity map for visualization

    disparity_normalized = cv2.normalize(

        disparity, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)

    # Append the normalized disparity map to the list of depth maps

    depth_maps.append(disparity_normalized)

# Visualize all the depth maps

num_rows = 5  # Specify the number of rows

num_cols = 10  # Specify the number of columns

fig, axs = plt.subplots(num_rows, num_cols, figsize=(15, 8))

for i, depth_map in enumerate(depth_maps):

    row_index = i // num_cols  # Calculate the row index for the subplot

    col_index = i % num_cols   # Calculate the column index for the subplot

    axs[row_index, col_index].imshow(depth_map, cmap='jet')

    axs[row_index, col_index].axis('off')

# Fill any remaining empty subplots with a white background

for i in range(len(depth_maps), num_rows * num_cols):

    row_index = i // num_cols

    col_index = i % num_cols

    axs[row_index, col_index].axis('off')

plt.show()


解釋:這段代碼負(fù)責(zé)使用Stereo Block Matching(StereoBM)算法從一系列立體圖像中計(jì)算深度圖。它遍歷灰度立體圖像列表,并為每一對相鄰圖像計(jì)算深度圖。

本文網(wǎng)址:
下一篇:沒有資料

相關(guān)信息:
版權(quán)所有 CopyRight 2006-2017 江蘇和訊自動化設(shè)備有限公司 常州自動化培訓(xùn)中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務(wù)廣場2號樓1409室
蘇ICP備14016686號-2 技術(shù)支持:常州山水網(wǎng)絡(luò)
本站關(guān)鍵詞:常州PLC培訓(xùn) 常州PLC編程培訓(xùn) 常州PLC編程 常州PLC培訓(xùn)班 網(wǎng)站地圖 網(wǎng)站標(biāo)簽
在線與我們?nèi)〉寐?lián)系
色婷婷AV无码久久精品,久久天天躁狠狠躁夜夜97,羞羞麻豆国产精品1区2区3区,啪影院免费线观看视频,思思久久er99精品亚洲