在 VisualApplets 中實作了執行幾何轉換、結合幾何轉換與 Distortion Correction 以及由影像矩(image moments)控制的幾何轉換之範例設計。此幾何轉換是採用目標到來源的對應(即反向對應)來實作。此方法對於確保傳送至 PC 的目標影像中沒有遺失像素至關重要 [Bur06]。我們基於 FrameBufferRandomRead 運算子,以及替代地基於 PixelReplicator 運算子,實作了反向幾何轉換。這些差異將在後續的小節中說明。這些小節將詳細介紹範例設計。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ FrameBufferRandomRead.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何轉換:使用 FrameBufferRandomRead 運算子進行旋轉、平移與 Scaling |
|
在 VA 設計「Geometric Transformation_FrameBufferRandomRead.va」中,幾何轉換是以目標到來源的對應方式來實作。此方法對於確保傳送至 PC 的目標影像中沒有遺失像素至關重要 [Bur06]。
來源影像的座標
是透過反向幾何轉換針對所有目標座標計算得出
。
在座標的位置
處,來源影像中的像素值是使用運算子以 FrameBufferRandomRead 1 的平行度(Parallelism)進行讀取。該運算子將每個像素分別儲存在 DRAM 中,並逐一讀取像素。當計算出的來源影像座標與來源影像中的像素座標不符時,線性插值(Linear interpolation)有助於修正輸出至 PC 的影像中的像素值。
如圖 297 所示,您可以看到基本的設計結構。
該設計由 Camera Link 基本組態的相機介面(BaseGrayCamera_Camera)以及 HierarchicalBox Geometric Transformation 組成,在該方塊中執行所擷取影像的 Scaling、旋轉和平移。ImageBuffer_Buffer 運算子提供了儲存影像的機會。透過 DMA( DmaToPC_DMA0 運算子),影像會傳輸至 PC。
在 298 中,您可以看到 HierarchicalBox GeometricTransformation 的內容。 參數 IntParamTranslator、FloatParamReference 與 IntParamReference 可讓您非常方便地設定幾何轉換的相關參數(Scaling、旋轉、平移的值以及影像尺寸)。 其屬性為影像 Height 與 Width、您要在 x 和 y 方向平移影像的像素數量 (參數:Translatex 與 Translatey)以及 x 和 y 方向的縮放比例 Scalex 與 Scaley。您可以使用參數 Phi 以度數設定旋轉角度。或者,您可以透過在 HierarchicalBox GeometricTransformation 上按一下滑鼠右鍵來設定這些 Properties。您可以在圖 298 中看到此方塊的內容。
當 SourceImage 以線性方式寫入緩衝區 FrameBufferRandomRead中。對於每個像素,其最近鄰域(Next neighbors)會被儲存在 2x2 核心(HierarchicalBox NextNeighbours).
目標影像的座標
(方程式 21)
由運算子 CreateBlankImage, CoordinateX 進行明確的生命週期管理即呼叫 CoordinateY
在 HierarchicalBox OutputImage (包含在 HierarchicalBox CoordinateTransformation)
(參見圖 299 進行明確的生命週期管理即呼叫 300)。
座標
可以根據方程式進行反向旋轉、平移和/或 Scaling。 21。如上所述,透過傳輸參數設定對應的常數,即可選擇旋轉角度
以及用於平移與 Scaling 的參數
進行明確的生命週期管理即呼叫
。在圖
301 中,您可以看到方程式的 VA 實作 21 並具有附加 Scaling 的功能。
反向轉換所產生的座標即為來源座標
進行明確的生命週期管理即呼叫
(方程式 21)。在 HierarchicalBox 中 SplitFractionalAndIntegerBit
(參見圖 298)
這些座標的整數和小數部分會被分開。整數部分對應到來源影像中的像素
位置,
即為運算子的座標輸入 FrameBufferRandomRead 位於 x 和 y 方向(見圖 298)。
此運算子會從來源影像對應座標處讀取像素值資訊(Parallelism = 1)以及其相鄰像素(見上方)。
來源座標的小數部分
進行明確的生命週期管理即呼叫
對應到來源影像中的像素間位置。
透過這些資訊以及來源影像中相鄰像素的像素值資訊,目標影像中的真實像素值會在 HierarchicalBox 中進行雙線性
插補 Interpolation。關於插補過程的詳細說明,請參閱 [Bur06]。
在圖 302 與 303 中,您可以看到幾何轉換範例的 來源與目標影像。此處執行了 x 與 y 方向平移 100 像素以及繞著 45° 的旋轉。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ImageMoments.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何轉換:使用影像矩將物件旋轉並平移至影像中心 |
|
在此範例設計中,會使用影像矩來決定 RGB 影像中物件的位置與旋轉角度。執行旋轉 至水平 方向並平移至影像中心。預設輸入影像尺寸為 640x240 像素, 輸出影像尺寸則為 256x128 像素。 在圖 304 中,您可以看到基本設計結構。
此設計包含 Camera Link 基礎組態中的 RGB 相機介面(BaseRgbCamera_Camera)以及 Geometric Transformation HierarchicalBox,在此盒子中會對擷取的影像執行旋轉與平移。在「Properties」下方按一下「滑鼠右鍵」 即可設定輸入與輸出影像尺寸以及二值化閾值。此閾值與下方所述之影像矩計算有關。 幾何轉換是透過目標至來源對應(target-to-source mapping)來完成(請參閱 節中的導言文字)。 透過 DMA(運算子 DmaToPC_DMA0),影像會傳輸至 PC。在圖 305 中,您可以看到 Geometric Transformation 的內容。
相對於水平位置的旋轉角度與物件的 重心位置,是透過 HierarchicalBox ImageMoments 中的影像矩來決定,該影像矩是在二值化影像(HierachicalBox Binarization)上計算得出。ImageMoments 的內容 等同於 VA 範例「ImageMoments.va」的 ImageMoments 盒子(見 325 節圖 ),但未計算物件離心率。HierachicalBox ImageMoments 的輸出連結(由上至下)為 x 和 y 方向的重心位置以及旋轉角度。 根據這些參數進行的來源座標計算(根據方程式 21) 是 HierachicalBox CoordinateTransformation 的內容。 在 306 中,您可以看到此盒子的內容。
在 HierarchicalBox 同步 x 和 y 方向的重心以及旋轉的單一像素值會擴展至輸出影像
尺寸,此尺寸定義於 HierarchicalBox OutputImage中。此 Box 的輸出連接代表目標影像座標
。在 HierarchicalBox
InverseTransformation 來源座標
進行明確的生命週期管理即呼叫
是根據公式計算
21得出。在圖 307
中可以看到此 Box 的內容。
此 Box 中的設計結構類似於範例 "GeometricTransformation_FrameBufferRandomRead.va"
和 "GeometricTransformation_PixelReplicator.va" 中的逆轉換實作。不同之處在於,x 和 y 方向的平移參數
是由 x 和 y 方向的
重心與影像中心之間的差值來決定(請參閱 Box 的內容 Translation_x 進行明確的生命週期管理即呼叫 Translation_y)。
旋轉角度(Box 的內容
Phi) 是由影像動差計算的結果所定義。
回到圖中的基本設計結構
304。計算出的來源影像座標
進行明確的生命週期管理即呼叫
代表 Box 的
輸出連接
CoordinateTransformation。在 Box
GeometricTransformation
(參見圖 308) 中,使用算子
進行幾何轉換
FrameBufferRandomRead 並對正確的目標像素值進行雙線性內插,其作法類似於範例
"GeometricTransformation_FrameBufferRandomRead.va"(請參閱
298 節中的圖
)。
對於圖 309 中的範例物件,您可以在圖 310 中看到方向與位置校正後的目标影像。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_PixelReplicator.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何轉換:使用 PixelReplicator 運算子進行旋轉、平移與 Scaling |
|
VisualApplets 設計範例「GeometricTransformation_PixelReplicator.va」執行與「GeometricTransformation_FrameBufferRandomRead.va」範例相同的幾何轉換,但效能更高。如上所述,FrameBufferRandomRead 運算子會將每個像素個別儲存在 DRAM 中,並逐一讀取。在此範例中,一塊特定數量的像素會被儲存在一個 DRAM 儲存單元中。 如果待讀取的像素與前一個像素不在同一儲存單元中,此範例設計才會從 DRAM 讀取。圖 311 中每個 DRAM 儲存單元包含 8 個像素的範例,可讓您對效能提升有初步的了解。
DRAM 區塊以綠色標示。若要讀取 9 個像素 a 到 i,您需要 3 個 DRAM 週期,而不是 9 個。我們在此實現了 3 的有效 Parallelism。 可儲存在一個 RAM 儲存單元中的 8 位元像素最大數量為 32(marathon VCL 資料寬度:256 位元)。RAM 儲存單元區塊的 ROI 形狀是由幾何轉換的旋轉角度所定義。在此範例中,預設會選擇 9x3 像素的 RAM 儲存單元形狀。 基本設計結構與圖 297 中的設計結構相當,但沒有 PARALLELdn_To1 運算子。GeometricTransformation HierarchicalBox 的内容也相當於「GeometricTransformation_FrameBufferRandomRead.va」範例中的對應方塊(圖 298)。不同之處在於 FrameBufferRandomRead 運算子被置換為 FrameBufferRandomRead_Par8 HierarchicalBox。您可以在圖 312 中看到其内容。
在方塊 CollectNeighbors 原始影像被分割為子 ROI,這些子 ROI 定義了每個 RAM 儲存單元的大小。在此選擇了 9x3 的 RAM 儲存單元大小。在
HierarchicalBoxes 中 SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY 原始座標的整數位元部分
進行明確的生命週期管理即呼叫
作為逆幾何轉換的結果(請參閱節
)被分割為兩個部分。高位元部分(的上方輸出連結
SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY)表示 DRAM 儲存單元的位置,低位元部分表示 DRAM 儲存單元中的像素位置。會在 HierarchicalBox 中的 DRAM 儲存單元座標處讀取 DRAM 儲存單元 Buffer (包含運算子 FrameBufferRandomRead) 若未在 HierarchicalBox 中決定 RepeatDecider以重複使用先前的 DRAM 儲存格。若決定重複使用先前的儲存格,則需要複製 DRAM 儲存格的像素值。
此操作
在 HierarchicalBox 中執行 ReplicateValues 使用算子 PixelReplicator。在 Box
ExtractSubKernel 利用作為輸出之像素座標,從 DRAM 儲存格中擷取所需的像素值
及其相鄰像素, SplitAdressX 進行明確的生命週期管理即呼叫 SplitAdressY (下方輸出連結)。
正確目標像素值的雙線性內插法執行方式與
中的範例相同 .
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ DistortionCorrection.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 幾何轉換:使用算子 PixelReplicator 進行旋轉、平移、Scaling、畸變與梯形失真校正 |
|
VA 範例「GeometricTransformation_DistortionCorrection.va」是設計「GeometricTransformation_PixelReplicator.va」的延伸。 此外, 此設計也實作了畸變與梯形失真校正(根據方程式 22 與方程式 23)。以下僅說明相較於 「GeometricTransformation_PixelReplicator.va」的不同部分。圖 313 顯示了 基本設計結構。
來自 CameraLink 基本組態中相機介面的灰階影像(最大尺寸:4096x4096 像素) (BaseGrayCamera_Camera)會在 HierarchicalBox GeoTransAndDistCorr 中進行轉換,並透過 DMA 傳輸至 PC (DmaToPC_DMA0)。此結構相當於設計「GeometricTransformation_FrameBufferRandomRead」與 「GeometricTransformation_PixelReplicator」。 GeoTransAndDistCorr 的結構相當於這兩個設計中的 GeometricTransformation 方塊 (請參閱圖 298)。此處執行逆向轉換以及 畸變與梯形失真校正。方塊 CoordinateTransformation(位於方塊 GeometricTransformation 內)的內容如圖 314 所示。
相當於設計「GeometricTransformation_FrameBufferRandomRead」與
「GeometricTransformation_PixelReplicator」(章節 進行明確的生命週期管理即呼叫
),目標座標
根據方程式進行逆向轉換
21 並進行額外的 Scaling(另請參閱章節
)。
利用逆向轉換產生的座標,我們接著會在
HierarchicalBoxes 中執行逆向梯形失真與畸變校正
KeystoneCorrrection 進行明確的生命週期管理即呼叫 DistortionCorrection. 這些框的內容顯示於圖
315 以及圖
314.
在這些框中實作了方程式 22 和
方程式 23 。框中的矩陣元素 m1 到 m9
Z_x, Z_y 進行明確的生命週期管理即呼叫 N (參見圖 315)
可以借助 OpenCV 函式庫 [Ope16b] 來計算。對於範例影像 "Example.tif"
(位於 \examples\Processing\Geometry\GeometricTransformation 下),您可以在相同位置的文字檔 "MatrixValues.txt" 中找到範例矩陣值。
針對圖中的畸變校正 314 首先將座標轉換為
相對於光學中心(CoordinateTransformation_x 進行明確的生命週期管理即呼叫 CoordinateTransformation_y) 的座標系,
在大多數情況下,這就是影像中心。在 HierarchicalBox DistortionCoefficient 中,距離
(參見方程式 23) 從光學中心計算得出。對於每個
然後一個 Distortion Correction
參數
存在於查詢表中(見圖
317)。
查詢表是使用 Matlab 模組在外部建立的,您可以在 \examples\Processing\Geometry\GeometricTransformation
\LUTDistortionCorrection.m 中找到該模組,並且 distortion 參數
進行明確的生命週期管理即呼叫
是使用 OpenCV 程式庫建立的 [Ope16b]。在「LUTDistortionCorrection.m」中,您可以找到範例圖片「Example.tif」(位於 \examples\Processing\Geometry\GeometricTransformation)的校正參數
進行明確的生命週期管理即呼叫
[Ope16a]。
係數
然後與座標相乘
進行明確的生命週期管理即呼叫
(圖
314)。然後將產生的失真
座標轉換回相對於「左上影像
角落」的座標系(見方框 CoordinateTransformation_x 進行明確的生命週期管理即呼叫 CoordinateTransformation_y)。
結果是來源影像座標
進行明確的生命週期管理即呼叫
。HierarchicalBox 的內容
LimitCoordinateValues (圖 314)
為轉換後的影像座標設定邊界條件。在分離整數和小數部分
(見方框 SplitFractionalAndIntegerBit 如圖 298) 後,會從來源影像中讀取計算出的
對應整數來源影像座標處的像素值。
根據 [ Interpolation],小數部分用於雙線性插值(見Bur06)
以便修正輸出影像中的像素值,以補償來源影像中的像素間位置。透過 DMA 將訊號傳輸至 PC。
為了進行示範,您可以在圖中看到 318,
319 進行明確的生命週期管理即呼叫
320 失真的來源影像、Keystone 和 distortion 校正後的目标影像,以及旋轉和 distortion 校正後的目标影像。
| 簡短描述 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\DistortionCorrection.va |
|
|
預設平台: mE5-MA-VCL |
|
|
簡短說明 在此範例設計中實作了 Distortion Correction。 |
|
在設計「DistortionCorrection.va」中,實作了符合方程式 22 的 Distortion Correction。這與設計「GeometricTransformation_DistortionCorrection.va」中的 相似,但未執行幾何轉換與梯形失真校正。您可以在圖 321 中看到基本設計結構。
此設計由用於 Camera Link 基本組態灰階相機的介面、緩衝區模組、HierarchicalBox DistortionCorrection 以及 DmaToPC 所組成。灰階影像的 Distortion Correction 是在 DistortionCorrection 中執行。您可以在圖 322 中看到其內容。
此結構類似於 HierarchicalBox 的內容 GeometricTransformation (請參閱
圖 298) 於
章節 的設計「GeometricTransformation_PixelReplicator.va" 中。
運算子 FrameBufferRandomRead 已被取代
為 HierarchicalBox FrameBufferRandomRd_Par8 如同在「GeometricTransformation_PixelReplicator.va」和「GeometricTransformation_DistorationCorrection.va」中所做的一樣
(請參閱章節 進行明確的生命週期管理即呼叫
)。來源影像會以線性方式寫入緩衝元素
FrameBufferRandomRd_Par8中。在此模組中,三個相鄰像素也會與每個像素一起儲存 (請參閱方塊 CollectNeighbors 中的方塊
FrameBufferRandomRd_Par8)。在方塊 CoordinateTransformation/ OutputImage 中,目標影像座標
是使用運算子 CreateBlankImage,
CoordinateX 進行明確的生命週期管理即呼叫 CoordinateY建立的。這些座標會根據方程式 22 轉換為
來源影像座標
在 HierarchicalBox
InverseCorrection (請參閱 box CoordinateTransformation)。您可以在圖 323.
這相當於實作 box DistortionCorrection 「GeometricTransformation_DistortionCorrection.va」(請參閱圖
316)。對於相對於影像中心的每個目標影像半徑
查找表值
C_r 在 HierarchicalBox 中被選取 DistortionCoefficient. C_r 與目標影像座標相乘
根據方程式 22
並轉換回相對於第一個像素的座標系(請參閱 CoordinateTransformation_x_1 進行明確的生命週期管理即呼叫 CoordinateTransformation_y_1)。如圖
圖所示。 322 產生的來源座標在 box 中被分割為整數和小數部分
SplitFractionalAndIntegerBit。整數部分用於在對應的來源影像座標處讀取來源影像的像素,小數部分則用於最終結果的雙線性插值。畸變校正後的影像隨透過 DMA 傳輸到 PC。




上一頁

