靜止背景下的多目標(biāo)追蹤_第1頁
靜止背景下的多目標(biāo)追蹤_第2頁
靜止背景下的多目標(biāo)追蹤_第3頁
靜止背景下的多目標(biāo)追蹤_第4頁
靜止背景下的多目標(biāo)追蹤_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、word靜止背景下的多目標(biāo)追蹤隨著計(jì)算機(jī)技術(shù)以及智能汽車行業(yè)的開展,多目標(biāo)的檢測與追蹤的實(shí)用性與研究價值逐漸提高。在計(jì)算機(jī)視覺的三層結(jié)構(gòu)中,目標(biāo)跟蹤屬于中間層,是其他高層任務(wù),例如動作識別以及行為分析等的根底。其主要應(yīng)用可包括視頻監(jiān)控,檢測異常行為人機(jī)交互,對復(fù)雜場景中目標(biāo)交互的識別與處理,以及虛擬現(xiàn)實(shí)及醫(yī)學(xué)圖像。目標(biāo)跟蹤又包括單目標(biāo)跟蹤和多目標(biāo)跟蹤。單目標(biāo)跟蹤可以通過目標(biāo)的表觀建?;蛘哌\(yùn)動建模,以處理光照、形變、遮擋等問題,而多目標(biāo)跟蹤問題那么更加復(fù)雜,除了單目標(biāo)跟蹤回遇到的問題外,還需要目標(biāo)間的關(guān)聯(lián)匹配。另外在多目標(biāo)跟蹤任務(wù)中經(jīng)常會碰到 目標(biāo)的頻繁遮擋、軌跡開始終止時刻未知、目標(biāo)太小、表觀

2、相似、目標(biāo)間交互、低幀率等等問題。 靜止背景下的多目標(biāo)追蹤可分為兩步來實(shí)現(xiàn),第一步是在視頻文件的每幀中檢測出移動的目標(biāo),第二步是將檢測到的目標(biāo)與跟蹤軌跡實(shí)時匹配。在本次實(shí)驗(yàn)中,利用混合高斯模型進(jìn)行背景減除,使用形態(tài)學(xué)操作消除噪聲,通過卡爾曼濾波預(yù)測目標(biāo)位置,最后利用匈牙利算法進(jìn)行匹配,實(shí)現(xiàn)靜止背景下的多目標(biāo)追蹤。1 實(shí)驗(yàn)原理1.1 混合高斯模型單高斯模型是利用高維高斯分布概率來進(jìn)行模式分類:其中用訓(xùn)練樣本均值代替,用樣本方差代替,X為d維的樣本向量。通過高斯概率公式就可以得出類別C屬于正負(fù)樣本的概率。而混合高斯模型就是數(shù)據(jù)從多個高斯分布中產(chǎn)生,每個GMM由k個單高斯分布線性疊加而成。相當(dāng)于對各

3、個高斯分布進(jìn)行加權(quán),權(quán)系數(shù)越大,那么這個數(shù)據(jù)屬于這個高斯分布的可能性越大。利用混合高斯模型(GMM)可以進(jìn)行背景減除,將前后景別離,得到移動的目標(biāo)。對每個像素點(diǎn)建立由k個單高斯模型線性疊加而成的模型,在這些混合高斯背景模型中,認(rèn)為像素之間的顏色信息互不相關(guān),對各像素點(diǎn)的處理都是相互獨(dú)立的。單個像素點(diǎn)在t時刻服從混合高斯分布概率密度函數(shù):其中k為分布模式總數(shù),為t時刻第i個高斯分布,為其均值,為其協(xié)方差矩陣。在獲得新一幀圖像后更新混合高斯模型。用圖像中的每個像素點(diǎn)與混合高斯模型匹配,如果成功那么判定該點(diǎn)為背景點(diǎn), 否那么為前景點(diǎn)。當(dāng)背景更新完成后,高斯模型與背景相關(guān)程度越大,標(biāo)準(zhǔn)差就越小,權(quán)值越

4、大。按照權(quán)值與標(biāo)準(zhǔn)差的比值從大到小進(jìn)行排序,取前B個模型作為背景。1.2 卡爾曼濾波卡爾曼濾波是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測數(shù)據(jù),對系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的算法。其核心思想是,根據(jù)當(dāng)前的測量值、上一時間的預(yù)測值以及誤差,計(jì)算得到當(dāng)前值,并可以持續(xù)預(yù)測下一時間的值。試驗(yàn)中利用卡爾曼濾波計(jì)算并預(yù)測每個軌跡在下一幀中的位置,建立幀間軌跡的關(guān)系。卡爾曼濾波將跟蹤分為5種狀態(tài):新目標(biāo)出現(xiàn)、目標(biāo)匹配、目標(biāo)遮擋、目標(biāo)別離以及目標(biāo)消失。其狀態(tài)方程如下所示:其中x,y,w,h分別表示目標(biāo)外接矩形的橫縱坐標(biāo)以及長、寬,為不相關(guān)的高斯白噪聲。定義其觀測方程為。定義好了觀測方程與狀態(tài)方程之后就可以用卡

5、爾曼濾波器實(shí)現(xiàn)運(yùn)動目標(biāo)的跟蹤,步驟如下:1計(jì)算運(yùn)動目標(biāo)的特征信息運(yùn)動質(zhì)心,以及外接矩形。2用得到的特征信息初始化卡爾曼濾波器。3用卡爾曼濾波器對下一幀中對應(yīng)的目標(biāo)區(qū)域進(jìn)行預(yù)測,當(dāng)下一幀到來時,在預(yù)測區(qū)域內(nèi)進(jìn)行目標(biāo)匹配。4如果匹配成功,那么更新卡爾曼濾波器。1.3 匈牙利匹配算法匈牙利匹配算法是一種利用增廣路徑求取二分圖最大匹配的算法。匈牙利樹一般由寬度優(yōu)先搜索BFS構(gòu)成。從一個未匹配點(diǎn)出發(fā)運(yùn)行 BFS,且必須走交替路,直至不能再擴(kuò)展為止。交替路指的是,從一個未匹配點(diǎn)出發(fā),依次經(jīng)過非匹配邊、匹配邊.循環(huán)往復(fù),形成的路徑稱為交替路。示意圖如圖1所示:圖1 匈牙利樹匹配匈牙利算法的要點(diǎn)如下:1) 從

6、左邊第一個頂點(diǎn)開始,挑選未匹配點(diǎn)進(jìn)行搜索,尋找增廣路。2) 如果經(jīng)過一個未匹配點(diǎn),那么尋找成功。更新路徑信息,匹配變數(shù)+1,停止搜索。3) 如果一直沒有找到增廣路,那么不再從這個點(diǎn)開始搜索。4) 找到增廣路之后需要沿著路徑更新匹配,通過prev 數(shù)組來記錄路徑上的點(diǎn)。在實(shí)驗(yàn)中,用匈牙利算法將新一幀圖片中檢測到的運(yùn)動物體匹配到對應(yīng)的軌跡。匹配的過程是通過最小化卡爾曼預(yù)測得到的質(zhì)心與檢測到的質(zhì)心之間的歐氏距離之和實(shí)現(xiàn)的。通過卡爾曼濾波計(jì)算并預(yù)測每個軌跡在下一幀中的位置,然后計(jì)算預(yù)測的軌跡位置和每個新檢測到的目標(biāo)之間的歐幾里得距離,將度量結(jié)果作為損失函數(shù)矩陣。損失矩陣的大小為M,N,其中M

7、是軌跡數(shù)目,N是檢測到的運(yùn)動物體數(shù)目。2 實(shí)驗(yàn)內(nèi)容2.1 目標(biāo)檢測要實(shí)現(xiàn)目標(biāo)檢測,首先利用混合高斯模型區(qū)分前景背景。通過調(diào)用函數(shù)vision.ForegroundDetector設(shè)置檢測子為混合高斯模型,其中參數(shù)分別為高斯核數(shù)目、訓(xùn)練背景幀數(shù)以及背景閾值。函數(shù)的返回值為一個二進(jìn)制掩碼,其中1的像素值對應(yīng)前景,0的像素值對應(yīng)背景。在實(shí)驗(yàn)中,選取前150幀圖像作為背景幀,并設(shè)置閾值為0.6,高斯核數(shù)目為3。完成背景減除后,通過設(shè)置blob分析子來尋找連通域,函數(shù)設(shè)置的參數(shù)為最小區(qū)域面積,返回值為目標(biāo)面積、質(zhì)心和邊界框。實(shí)驗(yàn)中,設(shè)置最小區(qū)域面積為400,代碼如下所示:obj.detector = v

8、ision.ForegroundDetector('NumGaussians', 3, . 'NumTrainingFrames', 150, 'MinimumBackgroundRatio', 0.6); obj.blobAnalyser = vision.BlobAnalysis('BoundingBoxOutputPort', true,'AreaOutputPort', true, 'CentroidOutputPort', true, 'MinimumBlobArea',

9、400);完成混合高斯混合模型以及blob分析子后,逐幀讀取視頻,為后續(xù)目標(biāo)檢測以及追蹤的過程做準(zhǔn)備: frame = obj.reader.step();在檢測目標(biāo)的過程中,利用形態(tài)學(xué)運(yùn)算中的開運(yùn)算以及閉運(yùn)算可以消除噪聲,使目標(biāo)檢測更為準(zhǔn)確。開運(yùn)算是通過先腐蝕再膨脹,去除孤立的像素點(diǎn)、總的位置和結(jié)構(gòu)不變。而閉運(yùn)算是先膨脹再腐蝕,彌合小裂縫,而總的位置和形狀不變,通過填充圖像的凹角來濾波圖像。其效果如圖2所展示: 圖2.1 原始像素點(diǎn) 圖2.2 開運(yùn)算效果圖圖2.3 閉運(yùn)算效果圖圖2 形態(tài)學(xué)運(yùn)算效果圖實(shí)驗(yàn)中,首先使用檢測子,即混合高斯模型得到前景圖,對前景圖使用8*8矩形進(jìn)行開運(yùn)算,切斷臨近物

10、體間的聯(lián)系。再使用15*15矩形進(jìn)行閉運(yùn)算,消除細(xì)小物體,最后填補(bǔ)物體中間的空洞。濾除噪聲后,使用blob分析得到所有連通域的中心以及邊界框的大小。代碼如下所示: function centroids, bboxes, mask = detectObjects(frame) % Detect foreground. mask = obj.detector.step(frame); % Apply morphological operations to remove noise and fill in holes. mask = imopen(mask, strel('rectangle

11、', 8,8); mask = imclose(mask, strel('rectangle', 15,15); mask = imfill(mask, 'holes'); % Perform blob analysis to find connected components. , centroids, bboxes = obj.blobAnalyser.step(mask); end視頻中對移動目標(biāo)的檢測結(jié)果如圖3.1,圖3.2所示: 圖3.1 移動目標(biāo)檢測結(jié)果1 圖3.2 移動目標(biāo)檢測結(jié)果22.2 目標(biāo)跟蹤要進(jìn)行目標(biāo)跟蹤,首先需要進(jìn)行軌跡初始化,通

12、過函數(shù)initializeTracks()來進(jìn)行初始化,每一個軌跡代表視頻中一個移動的目標(biāo)。軌跡的結(jié)構(gòu)包含如下信息:1) ID,軌跡編號;2) Bbox,目標(biāo)的邊界框;3) kalmanFilter,用于預(yù)測目標(biāo)位置的卡爾曼濾波器;4) Age,目標(biāo)被檢測到的總幀數(shù);5) totalVisibleCount,目標(biāo)可被檢測到的全部幀數(shù);6) consecutiveInvisibleCount:連續(xù)未檢測到目標(biāo)的幀數(shù)。代碼如下所示:function tracks = initializeTracks() % create an empty array of tracks tracks = stru

13、ct(. 'id', , . 'bbox', , . 'kalmanFilter', , . 'age', , . 'totalVisibleCount', , . 'consecutiveInvisibleCount', ); end為消除噪聲對目標(biāo)追蹤的影響,僅在totalVisibleCount超過閾值時才顯示目標(biāo)的軌跡。當(dāng)連續(xù)幾幀沒有檢測到與跟蹤相關(guān)的信息時,那么假設(shè)該對象已經(jīng)離開了可視圖畫面。通過參數(shù)consecutiveinvisiblecount可判斷這種情況,當(dāng)其超過閾值時,刪除跟蹤

14、軌跡。如果跟蹤時間較短,并且在大多數(shù)幀中標(biāo)記為不可見,那么軌跡也可能作為噪聲被刪除。軌跡初始化完成后,通過卡爾曼濾波計(jì)算并預(yù)測每個軌跡在下一幀的位置,函數(shù)輸出為邊框預(yù)測中心。然后調(diào)整目標(biāo)邊界框的位置,使其中心到達(dá)預(yù)測位置,并將結(jié)果作為軌跡的跟蹤矩形框,代碼如下所示: function predictNewLocationsOfTracks() for i = 1:length(tracks) bbox = tracks(i).bbox; % Predict the current location of the track. predictedCentroid = predict(tracks

15、(i).kalmanFilter); %根據(jù)以前的軌跡,預(yù)測當(dāng)前位置 % Shift the bounding box so that its center is at % the predicted location. predictedCentroid = int32(predictedCentroid) - bbox(3:4) / 2; tracks(i).bbox = predictedCentroid, bbox(3:4); end end完成位置預(yù)測后,創(chuàng)立損失函數(shù)矩陣,航代表軌跡,列代表檢測到的目標(biāo)。損失矩陣的大小為M,N,其中M是軌跡數(shù)目,N是檢測到的運(yùn)動物體數(shù)目。對每個軌跡計(jì)

16、算其卡爾曼濾波預(yù)測的軌跡位置和每個新檢測到的目標(biāo)之間的歐幾里得距離,將度量結(jié)果作為損失函數(shù)矩陣。function assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment() nTracks = length(tracks); nDetections = size(centroids, 1); % Compute the cost of assigning each detection to each track. cost = zeros(nTracks, nDetections);

17、for i = 1:nTracks cost(i, :) = distance(tracks(i).kalmanFilter, centroids); end通過函數(shù)assignDetectionsToTracks(cost, costOfNonAssignment)利用匈牙利匹配算法將新一幀圖片中檢測到的運(yùn)動物體匹配到對應(yīng)的軌跡。其中輸入的參數(shù)為損失矩陣以及閾值,低于閾值時,取消匹配。返回值為匹配的結(jié)果以及未匹配成功的軌跡以及目標(biāo)。完成匹配后,對已分配的軌跡,將其更新至當(dāng)前幀目標(biāo)所在位置,對未分配的軌跡,增加其連續(xù)不可見幀數(shù)。設(shè)置兩個閾值,invisibleForLong代表當(dāng)連續(xù)不可見幀數(shù)

18、大于它時,刪除軌跡;ageThreshold代表當(dāng)總出現(xiàn)幀數(shù)小于它時,當(dāng)該參數(shù)與總可見幀數(shù)的比值小于0.6時,刪除軌跡。目標(biāo)檢測與軌跡跟蹤的操作循環(huán)進(jìn)行,直至視頻結(jié)束,顯示最終跟蹤結(jié)果。2.3 總結(jié)實(shí)驗(yàn)程序可分解為11個局部,創(chuàng)立系統(tǒng)對象、初始化軌跡、讀取視頻幀、檢測目標(biāo)、預(yù)測已跟蹤軌跡的新位置、分配新檢測目標(biāo)給軌跡、更新已分配的軌跡、更新未分配的軌跡、刪除喪失的軌跡、創(chuàng)立新軌跡以及顯示跟蹤結(jié)果。其中創(chuàng)立系統(tǒng)對象包含創(chuàng)立視頻對象,設(shè)置檢測子為高斯混合模型以及設(shè)置blob分析子。在預(yù)測已跟蹤軌跡的新位置時,使用卡爾曼濾波器進(jìn)行預(yù)測,并調(diào)整位置,顯示預(yù)測結(jié)果矩形框。在更新已分配的軌跡局部中,根據(jù)軌

19、跡對應(yīng)的檢測目標(biāo)位置中心修正其卡爾曼濾波器,并修正軌跡存在幀數(shù)、目標(biāo)檢測到的總幀數(shù)以及連續(xù)未檢測到目標(biāo)的幀數(shù)。在刪除喪失軌跡中,刪除連續(xù)不可見幀數(shù)大于閾值或當(dāng)軌跡存在幀數(shù)小于10時,根據(jù)總可見幀數(shù)與軌跡存在幀數(shù)的比值丟棄軌跡。主函數(shù)代碼如下:obj = setupSystemObjects(); %創(chuàng)立系統(tǒng)對象tracks = initializeTracks(); % 初始化軌跡nextId = 1; % ID of the next track% Detect moving objects, and track them across video frames.while isDone(o

20、bj.reader) frame = readFrame(); %讀取一幀 centroids, bboxes, mask = detectObjects(frame); predictNewLocationsOfTracks(); assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment(); updateAssignedTracks(); updateUnassignedTracks(); deleteLostTracks(); createNewTracks(); displayT

21、rackingResults();end可見完成創(chuàng)立系統(tǒng)對象以及初始化軌跡后,循環(huán)剩余9個步驟,直至處理完整個視頻。3 實(shí)驗(yàn)結(jié)果分析在本次試驗(yàn)中,通過混合高斯模型背景減除,形態(tài)學(xué)操作消除噪聲,利用卡爾曼濾波預(yù)測每個軌跡在下一幀中的位置,最后通過匈牙利匹配算法完成目標(biāo)與軌跡之間的匹配。實(shí)現(xiàn)了在靜止背景下的多目標(biāo)檢測與跟蹤。如圖4所示可見,對于勻速移動的目標(biāo),檢測效果較好,可以實(shí)現(xiàn)較好的目標(biāo)檢測與跟蹤。 圖4 勻速移動目標(biāo)檢測結(jié)果但靜止背景下,基于動態(tài)的多目標(biāo)追蹤,很容易受到環(huán)境的影響。當(dāng)檢測目標(biāo)為行人時,風(fēng)吹動樹葉或是有車輛經(jīng)過,甚至是光照導(dǎo)致的影子變化都會很大程度地影響跟蹤效果。圖5展示了明顯

22、的失敗樣例:圖5 目標(biāo)追蹤失敗樣例在實(shí)驗(yàn)中使用的卡爾曼濾波預(yù)測目標(biāo)下一幀所在位置的模型,只適用于勻速變化,而汽車存在加速運(yùn)動。從右邊的二值圖像可以看出,汽車的車燈造成像素點(diǎn)大量變化,只使用幀間相減以及形態(tài)學(xué)操作來得到檢測目標(biāo)的本實(shí)驗(yàn)并不適用于此。造成了較大的誤差,導(dǎo)致檢測以及跟蹤目標(biāo)失敗。要躲避由前景中不同物體造成的實(shí)驗(yàn)誤差,可使用其他方法在前景檢測中對檢測到的物體進(jìn)行分類。通過屢次試驗(yàn)發(fā)現(xiàn),程序參數(shù)的魯棒性較差,在進(jìn)行形態(tài)學(xué)計(jì)算時,不同的視頻調(diào)整開運(yùn)算以及閉運(yùn)算的結(jié)構(gòu)元素,目標(biāo)檢測的效果差異很大。在后續(xù)的學(xué)習(xí)過程中可以繼續(xù)對本次實(shí)驗(yàn)進(jìn)行更新修正,得到更好的實(shí)驗(yàn)效果。.word附錄functi

23、on objectracking()obj = setupSystemObjects(); %初始化tracks = initializeTracks(); % 初始化軌跡nextId = 1; % ID of the next track% Detect moving objects, and track them across video frames.while isDone(obj.reader) frame = readFrame(); %讀取一幀 centroids, bboxes, mask = detectObjects(frame); predictNewLocationsO

24、fTracks(); assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment(); updateAssignedTracks(); updateUnassignedTracks(); deleteLostTracks(); createNewTracks(); displayTrackingResults();end function obj = setupSystemObjects() obj.reader = vision.VideoFileReader('test.mp4

25、'); obj.maskPlayer = vision.VideoPlayer('Position', 740, 400, 700, 400); obj.videoPlayer = vision.VideoPlayer('Position', 20, 400, 700, 400);%創(chuàng)立視頻播放對象 obj.detector = vision.ForegroundDetector('NumGaussians', 3, . 'NumTrainingFrames', 150, 'MinimumBackgroundRat

26、io', 0.6); %GMM前景檢測,高斯核數(shù)目3,前150幀為背景幀,閾值為0.6,返回值為背景 obj.blobAnalyser = vision.BlobAnalysis('BoundingBoxOutputPort', true, . 'AreaOutputPort', true, 'CentroidOutputPort', true, . 'MinimumBlobArea', 400);%返回值為目標(biāo)面積、質(zhì)心和邊界框 end function tracks = initializeTracks() % cre

27、ate an empty array of tracks tracks = struct(. 'id', , . 'bbox', , . 'kalmanFilter', , . 'age', , . 'totalVisibleCount', , . 'consecutiveInvisibleCount', ); end function frame = readFrame() frame = obj.reader.step(); end function centroids, bboxes, mas

28、k = detectObjects(frame) % Detect foreground. mask = obj.detector.step(frame); % Apply morphological operations to remove noise and fill in holes. mask = imopen(mask, strel('rectangle', 8,8); mask = imclose(mask, strel('rectangle', 15,15); mask = imfill(mask, 'holes'); % Perf

29、orm blob analysis to find connected components. , centroids, bboxes = obj.blobAnalyser.step(mask); end function predictNewLocationsOfTracks() for i = 1:length(tracks) bbox = tracks(i).bbox; % Predict the current location of the track. predictedCentroid = predict(tracks(i).kalmanFilter); %根據(jù)以前的軌跡,預(yù)測當(dāng)

30、前位置 % Shift the bounding box so that its center is at % the predicted location. predictedCentroid = int32(predictedCentroid) - bbox(3:4) / 2; tracks(i).bbox = predictedCentroid, bbox(3:4); end end function assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment() nTracks =

31、 length(tracks); nDetections = size(centroids, 1); % Compute the cost of assigning each detection to each track. cost = zeros(nTracks, nDetections); for i = 1:nTracks cost(i, :) = distance(tracks(i).kalmanFilter, centroids); end % Solve the assignment problem. costOfNonAssignment = 20; assignments,

32、unassignedTracks, unassignedDetections = . assignDetectionsToTracks(cost, costOfNonAssignment); end function updateAssignedTracks() numAssignedTracks = size(assignments, 1); for i = 1:numAssignedTracks trackIdx = assignments(i, 1); detectionIdx = assignments(i, 2); centroid = centroids(detectionIdx,

33、 :); bbox = bboxes(detectionIdx, :); correct(tracks(trackIdx).kalmanFilter, centroid); tracks(trackIdx).bbox = bbox; tracks(trackIdx).age = tracks(trackIdx).age + 1; tracks(trackIdx).totalVisibleCount = . tracks(trackIdx).totalVisibleCount + 1; tracks(trackIdx).consecutiveInvisibleCount = 0; end end

34、 function updateUnassignedTracks() for i = 1:length(unassignedTracks) ind = unassignedTracks(i); tracks(ind).age = tracks(ind).age + 1; tracks(ind).consecutiveInvisibleCount = . tracks(ind).consecutiveInvisibleCount + 1; end end % Delete Lost Tracksfunction deleteLostTracks() if isempty(tracks) retu

35、rn; end invisibleForTooLong = 20; ageThreshold = 10; ages = tracks(:).age; totalVisibleCounts = tracks(:).totalVisibleCount; visibility = totalVisibleCounts ./ ages; lostInds = (ages < ageThreshold & visibility < 0.6) | . tracks(:).consecutiveInvisibleCount >= invisibleForTooLong; tracks = tracks(lostInds); endfunction createNewTracks() centroids = centroids(unassignedDetections, :); bboxes = bboxes(unassignedDetections, :); for i = 1:size(centroids, 1) centroid = centroids(i,:); bbox = bboxes

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論