MITK 基礎概念 流水線(Pipeline)

2021-09-26 15:17:43 字數 1800 閱讀 9144

mitk中的影象處理大量使用了流水線(pipelining)的概念,在使用mitk進行開發的過程中,對其有個清晰的理解至關重要。本文件將首先闡明流水線背後的一般思想,然後討論一些你應該了解的mitk細節。

在現實世界中,管道將某種型別的源和使用者連線起來。 因此,我們確定了三個關鍵概念:

(1)源(source):生成某種型別的資料;

(2)管道(pipeline):傳輸資料,許多不同的管道段可以組合接通成管線,從而實現該功能;

(3)使用者(consumer):使用這些資料來滿足自己的需要。

將mitk中的管道和真實的管道相比較的話,有一點不妥當的是:物理管道永遠不會處理它的內容,而在軟體開發過程中,管道通常會這樣做(這就是它們經常也被稱為濾波器的原因)。有人可能會問,為什麼不在使用者物件本身中實現處理邏輯,因為它明顯知道如何處理它的資料。兩個主要原因是可重用性和靈活性。比如說,有人想要顯示ct影象中的骨骼分割結果,他可以構建乙個單獨的類來解決這個問題,或者在顯示類和源之間構建乙個管道。我們知道在ct掃瞄中骨骼非常亮,所以我們使用乙個閾值濾波器,然後使用乙個分割濾波器來解決這個問題。

現在讓我們進一步假設,在成功將這種新技術**給一家大公司後,我們計畫利用超聲成像技術做同樣的事情。超聲影象的亮度關係(與ct)基本相同,但超聲影象有很多雜訊,對比度明顯更低。由於我們使用了流水線,所以這不成問題:我們不需要更改原有的分割類,只需在原有的管道前插入兩個新的濾波器即可:

管道中的資料流只在使用者呼叫update()函式時觸發。然後,管道的每個部分依次觸發它前面(濾波器等)的update()方法。最後,源使用自己的generatedata()方法建立一批新的資料,並通知其後續者新資料可用。然後,管道可以開始處理資料,直到完成的資料被最後乙個濾波器輸出。

除使用者(可以是任何類)之外,管道所有部分的基類都是mitk::baseprocess。該類引入了處理資料的能力,具備輸出和輸入。但是,這個類很少被直接使用。

幾個源類擴充套件了baseprocess。由它們提供的資料型別,imagesource,pointsetsource和su***cesource都標誌著管道的開始。

濾波器自身擴充套件了其中乙個源類。這可能不會立即有意義,但從根本上來說濾波器就是乙個具有額外輸入的源。

//建立參與者

mitk::usvideodevice::pointer videodevice = mitk::usvideodevice::

new(

"-1"

,"manufacturer"

,"model");

testusfilter::pointer filter = testusfilter::

new();

//使videodevice產生它的第乙個資料集,這樣它的輸出就不為空

videodevice-

>

update()

;//將濾波器的輸入連線到裝置的輸出

filter-

>

setinput

(videodevice-

>

getoutput()

);//現在管道就起作用了

filter-

>

update()

;

流水線技術概念簡介

對於一條具體的指令執行過程,通常可以分為五個部分 取指令,指令解碼,取運算元,運算,寫結果.其中前三步一般由指令控制器完成,後兩步則由運算器完成 若採用順序執行的方式,則執行前三步時運算器空閒,執行後兩步時指令控制器空閒.流水線技術的基本原理是 指令控制器完成了對第一條指令的處理後,不等待運算器完成...

數電基礎 流水線

流水線設計將原來乙個時鐘週期完成的較大的組合邏輯,通過切割後分由多個時鐘完成,形式上,在切割處安排乙個暫存器。例如乙個組合邏輯由a0,a1,a2四個部分組成,每一部分延遲都是1ns,在流水線形式之前總共延遲3ns,暫存器建立時間1ns,那 時鐘週期最小tclk1 tsetup tpd critica...

流水線排程

n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 你可以安排每個作業的執行順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最少。求這個最少的時間...