亚洲mv大片欧洲mv大片入口,国产粉嫩无码一区二区三区,国内精品自产拍在线观看91,久久久亚洲欧洲日产国码二区,中文字幕人妻久久一区二区三区

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

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

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

常州PLC培訓(xùn)

常州PLC

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

常州電工培訓(xùn)

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

 

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

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


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


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


深度圖


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


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


Point Cloud


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


一旦我們計(jì)算出代表場(chǎng)景深度的深度圖,我們可以使用它來(lái)計(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í)中,用于表示對(duì)象或場(chǎng)景的形狀。


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


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


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


安裝庫(kù):


pip install numpy scipy

導(dǎo)入庫(kù):


#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ì)算深度圖。它遍歷灰度立體圖像列表,并為每一對(duì)相鄰圖像計(jì)算深度圖。

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

相關(guān)信息:
版權(quán)所有 CopyRight 2006-2017 江蘇和訊自動(dòng)化設(shè)備有限公司 常州自動(dòng)化培訓(xùn)中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務(wù)廣場(chǎng)2號(hào)樓1409室
蘇ICP備14016686號(hào)-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)系
亚洲mv大片欧洲mv大片入口,国产粉嫩无码一区二区三区,国内精品自产拍在线观看91,久久久亚洲欧洲日产国码二区,中文字幕人妻久久一区二区三区