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

常州機(jī)器視覺(jué)培訓(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)站首頁(yè) > 新聞中心 新聞中心
使用Python進(jìn)行二維圖像的三維重建(下)-常州機(jī)器視覺(jué)培訓(xùn),常州上位機(jī)培訓(xùn)
日期:2023-12-18 16:04:15人氣:  標(biāo)簽:常州機(jī)器視覺(jué)培訓(xùn) 常州上位機(jī)培訓(xùn)

 

結(jié)果比較

# importing the libraries

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D


# Create a figure with two subplots

fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# Visualize the original image in the first subplot

axs9.jpg.imshow(images9.jpg, cmap='gray')

axs9.jpg.axis('off')

axs9.jpg.set_title('Original')

# Visualize the reconstructed mesh in the second subplot

ax = fig.add_subplot(1, 2, 2, projection='3d')

ax.plot_trisurf(verts[:, 0], verts[:, 1], verts[:, 2], triangles=faces)

ax.set_title('Reconstructed')

# Show the figure

plt.show()

9.jpg

解釋:在此代碼中,使用matplotlib創(chuàng)建了包含兩個(gè)子圖的圖形。在第一個(gè)圖中,顯示了來(lái)自數(shù)據(jù)集的原始圖像。在第二個(gè)圖中,使用3D三角形表面圖可視化了重建的3D網(wǎng)格。


方法2


以下是執(zhí)行來(lái)自TempleRing數(shù)據(jù)集圖像的3D重建的另一個(gè)示例代碼:


引入模塊:


import cv2

import numpy as np

import matplotlib.pyplot as plt

from google.colab.patches import cv2_imshow

加載兩個(gè)Temple Ring數(shù)據(jù)集圖像:


# Load the PNG images (replace with your actual file paths)

image1 = cv2.imread('/content/drive/MyDrive/templeRing/templeR0001.png')

image2 = cv2.imread('/content/drive/MyDrive/templeRing/templeR0002.png'

解釋:該代碼使用OpenCV的cv2.imread函數(shù)從TempleRing數(shù)據(jù)集加載兩個(gè)圖像。


轉(zhuǎn)換為灰度圖:


# Convert images to grayscale

gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)

gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)


該代碼使用OpenCV將兩個(gè)圖像轉(zhuǎn)換為灰度圖像。它們以單通道表示,其中每個(gè)像素的值表示其強(qiáng)度,并且沒(méi)有顏色通道。


查找SIFT關(guān)鍵點(diǎn)和描述符:


# Initialize the SIFT detector

sift = cv2.SIFT_create()


# Detect keypoints and compute descriptors for both images

kp1, des1 = sift.detectAndCompute(gray1, None)

kp2, des2 = sift.detectAndCompute(gray2, None)


該代碼使用尺度不變特征變換(SIFT)算法在兩個(gè)圖像中查找關(guān)鍵點(diǎn)和描述符。它使用OpenCV的cv2.SIFT_create()函數(shù)創(chuàng)建一個(gè)SIFT對(duì)象,并調(diào)用其detectAndCompute方法來(lái)計(jì)算關(guān)鍵點(diǎn)和描述符。


使用FLANN匹配器匹配描述符:


# Create a FLANN-based Matcher object

flann = cv2.FlannBasedMatcher({'algorithm': 0, 'trees': 5}, {})


# Match the descriptors using KNN (k-nearest neighbors)

matches = flann.knnMatch(des1, des2, k=2)


解釋:該代碼使用Fast Library for Approximate Nearest Neighbors(FLANN)匹配器對(duì)描述符進(jìn)行匹配。它使用OpenCV的cv2.FlannBasedMatcher函數(shù)創(chuàng)建FLANN匹配器對(duì)象,并調(diào)用其knnMatch方法來(lái)找到每個(gè)描述符的k個(gè)最近鄰。


使用Lowe的比率測(cè)試篩選出好的匹配項(xiàng)


# Apply Lowe's ratio test to select good matches

good_matches = []

for m, n in matches:

    if m.distance < 0.7 * n.distance:

        good_matches.append(m)


解釋:該代碼使用Lowe的比率測(cè)試篩選出好的匹配項(xiàng)。它使用最近鄰和次近鄰之間距離比的閾值來(lái)確定匹配是否良好。


提取匹配的關(guān)鍵點(diǎn)


# Extract matched keypoints

src_pts = np.float32(

    [kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)

dst_pts = np.float32(

    [kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)


解釋:該代碼從兩組關(guān)鍵點(diǎn)中提取匹配的關(guān)鍵點(diǎn),這些關(guān)鍵點(diǎn)將用于估算對(duì)齊兩個(gè)圖像的變換。這些關(guān)鍵點(diǎn)的坐標(biāo)存儲(chǔ)在'src_pts'和'dst_pts'中。


使用RANSAC找到單應(yīng)矩陣


# Find the homography matrix using RANSAC

H, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)


在這段代碼中,它使用RANSAC算法基于匹配的關(guān)鍵點(diǎn)計(jì)算描述兩個(gè)圖像之間的變換的單應(yīng)矩陣。單應(yīng)矩陣后來(lái)可以用于拉伸或變換一個(gè)圖像,使其與另一個(gè)圖像對(duì)齊。


使用單應(yīng)矩陣將第一個(gè)圖像進(jìn)行變換


# Perform perspective transformation to warp image1 onto image2

height, width = image2.shape[:2]

result = cv2.warpPerspective(image1, H, (width, height))

# Display the result

cv2_imshow(result)

10.jpg

解釋:該代碼使用單應(yīng)矩陣和OpenCV的cv2.warpPerspective函數(shù)將第一個(gè)圖像進(jìn)行變換。它指定輸出圖像的大小足夠大,可以容納兩個(gè)圖像,然后呈現(xiàn)結(jié)果圖像。


顯示原始圖像和重建圖像


# Display the original images and the reconstructed image side by side

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(12, 4))

ax1.imshow(cv2.cvtColor(image1, cv2.COLOR_BGR2RGB))

ax1.set_title('Image 1')

ax1.axis('off')

ax2.imshow(cv2.cvtColor(image2, cv2.COLOR_BGR2RGB))

ax2.set_title('Image 2')

ax2.axis('off')

ax3.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))

ax3.set_title('Reconstructed Image')

ax3.axis('off')

plt.show()

輸出:

11.jpg

解釋:這段代碼展示了在一個(gè)具有三個(gè)子圖的單一圖形中可視化原始圖像和重建圖像的過(guò)程。它使用matplotlib庫(kù)顯示圖像,并為每個(gè)子圖設(shè)置標(biāo)題和軸屬性。


不同的可能方法


有許多不同的方法和算法可用于從2D圖像執(zhí)行3D重建。選擇的方法取決于諸如輸入圖像的質(zhì)量、攝像機(jī)校準(zhǔn)信息的可用性以及重建的期望準(zhǔn)確性和速度等因素。


一些常見(jiàn)的從2D圖像執(zhí)行3D重建的方法包括立體對(duì)應(yīng)、運(yùn)動(dòng)結(jié)構(gòu)和多視圖立體。每種方法都有其優(yōu)點(diǎn)和缺點(diǎn),對(duì)于特定應(yīng)用來(lái)說(shuō),最佳方法取決于具體的要求和約束。


結(jié)論

總的來(lái)說(shuō),本文概述了使用Python從2D圖像進(jìn)行3D重建的過(guò)程。我們討論了深度圖、點(diǎn)云和網(wǎng)格等關(guān)鍵概念,并使用TempleRing數(shù)據(jù)集演示了使用兩種不同方法逐步進(jìn)行的過(guò)程。我們希望本文能幫助您更好地理解從2D圖像進(jìn)行3D重建以及如何使用Python實(shí)現(xiàn)這一過(guò)程。有許多可用于執(zhí)行3D重建的不同方法和算法,我們鼓勵(lì)您進(jìn)行實(shí)驗(yàn)和探索,以找到最適合您需求的方法。


本文網(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,久久久亚洲欧洲日产国码二区,中文字幕人妻久久一区二区三区