專為工程師設計的機器視覺軟體
產品簡介

Aurora Vision Library 所提供的函式與 Aurora Vision Studio 的過濾器幾乎直接對應,因為流程圖圖控介面底下也是呼叫 Library 寫的。 因此,如果您習慣於圖形環境下的開發流程,您可以用 Aurora Vision Studio 的轉換功能轉到 C++或 .NET 進行更細部的開發;即使不這麼做,打算從無到有直接使用 C++ 或 .NET 呼叫 Aurora Vision Library 來深度客製化您的應用程式,在語法風格、參數上也與 Aurora Vision Studio 相當接近,減少您撰寫程式碼查詢手冊的時間。
為何選擇Aurora Vision Library ?
性能
在 Aurora Vision Library 中,我們精心設計的演算法與世界廣泛採用的硬體優化緊密結合,支援 SSE/AVX/NEON 指令集與多核處理器上的平行計算,從而使其成為是世界上最快的函示庫之一。
現代設計
函式庫所有的資料型別均具有自動記憶體管理功能,支援錯誤異常顯式處理的,此外還支援用于型別安全的特殊值 Optional 資料型別。針對執行續,全部函式都是 Thread-Safe 的,並且在可能的情況下,內部使用 data parallelism。
簡單、一致性
函式庫是一種以具有單一 header 對應單個 DLL 或 SO 檔案的形式,提供的型別和函式的簡單集合。為了獲得最大的可讀性,所有的函式遵循一套一致的命名風格(比如 SmoothImage、RotateVector 動詞 + 賓語的形式)。 函示所有輸出結果都用 Reference 來輸出。
C++ 開發示範
以下用簡短的 C++ 範例顯示出 Aurora Vision Library 的功能與風格,您可以看到函示命名風格為【動詞】+【受詞】+【細項描述】,清晰明瞭。詳細請參考與 Aurora Vision Library 安裝資料夾內有更多的範例來示範檢測應用。
影像處理
平滑化過濾器是影像處理最典型的工具之一。在此,我們顯示高斯濾波與中值濾波去噪。注意,image1 是輸入,image2 是輸出。
SmoothImage_Gauss( image1, NIL, 2.0f, 2.0f, 2.5f, image2 ); SmoothImage_Median( image1, NIL, NIL, SmoothImageMedianKernel::Box, 3, NIL, image2 ); ); |
輸入
輸出 (SmoothImage_Gauss)
輸出 (SmoothImage_Median)
Region 分析
Region 是一種型別,用來表示一堆 pixel 的集合。還是很難理解 ? 想像一下,一張影像做了二值化,前景變成是 1,背景變成是 0,這就是 binary image,我們用 Region 型別來儲存這張 binary image。以下程式碼簡單示範 Region 的處理,我們把最後一個步驟的 reiogn3 畫成綠色,region4 畫成紅色並顯示出來。
Region region1, region2, region3, region4;
ThresholdToRegion_HSx(image1, NIL, HSxColorModel::HSV, 0, 10, 190, 255, 65, 255, region1);
CloseRegion(region1, KernelShape::Ellipse, 15, 15, region2);
FillRegionHoles(region2, RegionConnectivity::EightDirections, NIL, 10000, region3);
DrawRegion(image1, region3, NIL, Pixel(0, 255, 0), 1.0);
OpenRegion(region3, KernelShape::Ellipse, 15, 15, region4);
DrawRegion(image1, region4, NIL, Pixel(255, 0, 0), 1.0););
|
輸入
輸出
條碼識別
辨識二維碼(DataMatrix)分為兩個環節: 一是偵測條碼位置,二是到在搜尋到疑似條碼的位置來識別文字。
DataMatrixCodeParams codeParams;
DataMatrixDetectionParams detectionParams;
Conditional<DataCode> code;
Array<Path> candidates;
ReadSingleDataMatrixCode(image1, NIL, NIL, codeParams, detectionParams, code, candidates);
if (code != NIL)
{
DrawingStyle style(DrawingMode::HighQuality, 1.0f, 3.0f, false, NIL, 2.0);
DrawPath(image1, code.Get().Outline(), NIL, Pixel(255, 0, 0), style);
DrawString(image1, code.Get().Text(), Location(10, 10), NIL, Anchor2D::TopLeft, Pixel(255, 0, 0), style, 18.0f, 0.0f, NIL);
}
|
輸入
輸出
形狀擬合
Shape Fitting (形狀擬合) 可以找線段、圓、弧或者曲線。第一步要指定想擬合的是甚麼 (線段、圓、弧或者曲線),並且交代搜尋範圍,如下 Create shape fitting map 步驟;第二步則是給定影像來執行搜尋動作,以下是找尋邊緣直線段的範例。
// Create shape fitting map SegmentFittingField field(Segment2D(40.0f, 30.0f, 40.0f, 130.0f), 30.0f); SegmentFittingMap map; ImageFormat imageFormat(image1.Width(), image1.Height(), PlainType::UInt8, 3); CreateSegmentFittingMap(imageFormat, field, NIL, 12, 5, InterpolationMethod::Bilinear, map); // Fit the shape EdgeScanParams params; params.minMagnitude = 10.0f; params.edgeTransition = EdgeTransition::BrightToDark; Conditional<Segment2D> segment; FitSegmentToEdges(image1, map, params, Selection::Best, NIL, 0.1f, NIL, segment); if (segment != NIL) { DrawingStyle style(DrawingMode::HighQuality, 1.0f, 2.0f, false, NIL, 0.0f); DrawSegment(image1, segment.Get(), NIL, Pixel(255, 0, 0), style, MarkerType::None, 0.0f); } ); |
輸入
輸出
搜尋擬合原理
Edge-based 基於邊緣特徵的樣板對位
Template Matching 也有人稱做 Pattern Matching,中文可翻譯為樣板對位、模板匹配等等,這類技術用於在影像中尋找與事先準備好的標準圖案 (Golden Model) 匹配的圖案,抓到它在影像中的位置、旋轉角度等等 。典型的應是在電子電路中尋找十字記號:
Image image1; LoadImage("fiducial_template.png", false, image1); Conditional<EdgeModel> model; CreateEdgeModel(image1, NIL, NIL, 0, NIL, 0.0f, 35.0f, 15.0f, -45.0f, +45.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, model); Image image2; LoadImage("fiducial_input.png", false, image2); Conditional<Object2D> object; if (model != NIL) { LocateSingleObject_Edges(image2, NIL, model.Get(), 1, 3, 10.0f, EdgePolarityMode::MatchStrictly, EdgeNoiseLevel::High, false, 0.7f, object); if (object != NIL) { DrawingStyle style(DrawingMode::HighQuality, 1.0f, 3.0f, false, NIL, 2.0); DrawRectangle(image2, object.Get().Match(), NIL, Pixel(255, 0, 0), style); } } |
Golden Model
輸入
輸出
GigE Vision 取像
Aurora Vision Library 支援所有與 GigE Vision 及 GenICam 協定相容的相機與影像擷取卡。這裡我們示範擷取 GigE Vision 相機影像的 C++ 範例:
// Initialize acquisition GigEHandle hDev = GigEVision_OpenDevice("169.254.1.81"); GigEVision_StartAcquisition(hDev, "Mono8"); Image image1; while (true) { // Grab image GigEVision_ReceiveImage(hDev, image1); // Process image ProcessImage(image1); } // Finalize acquisition avl::GigEVision_StopAcquisition(hDev); avl::GigEVision_CloseHandle(hDev); |
C# 開發示範
.NET Frameworks (C# / VB) 是機台設備 PC Based 開發程式語言中,非常常見的開發框架,Aurora Vision Library 亦支援 .NET Frameworks (C# / VB) 語言,讓您輕鬆使用它去撰寫視覺取像 + 辨識演算法 + 工業控制系統 + 操作 UI。
Aurora Vision Libray 系統整合示範
承接一套視覺應用專案往往需要各式各樣的功能,一般不是單一工具就能把專案做好,Aurora Vision 是一套具備 2D + 3D + AI 的完整的開發平台,減少您需要集成各種工具的寶貴時間。