Aurora Vision (Adaptive Vision)
Aurora Vision Library (函式庫)
Adaptive Vision Library 是一個專為 C++ 和 .NET 程式開發人員的機器視覺函式庫。它具備非常豐富的功能,可以輕鬆的找到對的工具開發視覺檢測程式...
詳細介紹

專為工程師設計的機器視覺軟體

產品簡介

 

Aurora Vision Library,以前稱為 Adaptive Vision Library,簡稱 AVL,是一個專為 C++ 和 .NET 程式開發人員的機器視覺函式庫。它具備非常豐富的功能,可以輕鬆的找到對的工具開發視覺檢測程式。有影像擷取、影像前處理,也有強大的影像工具如 template matching (定位)、measurements (量測)、barcode readers (條碼) 等。以最佳的效能、最先進的演算法和清晰明瞭的程式架構,讓程式設計師可以駕馭自如。

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 檔案的形式,提供的型別和函式的簡單集合。為了獲得最大的可讀性,所有的函式遵循一套一致的命名風格(比如 SmoothImageRotateVector 動詞 + 賓語的形式)。 函示所有輸出結果都用 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 的完整的開發平台,減少您需要集成各種工具的寶貴時間。