Strona www.adaptive-vision.com używa plików cookie do obsługi użytkowników oraz do celów statystycznych.
Zgodnie z nowymi przepisami mamy obowiązek Państwa o tym poinformować.
Szczegółowe informacje znajdą Państwo w naszej polityce prywatności.

Zamknij tę informację
POL ENG GER 中文(繁體) 中文(简体)

Przykłady kodu

Na tej stronie za pomocą krótkich fragmentów kodu prezentujemy możliwości oraz styl biblioteki Zebra Aurora™ Vision Library. Przykłady kompletnych inspekcji oraz całych aplikacji dostępne są wraz z instalatorem biblioteki.

Przetwarzanie obrazu

Jednym z typowych narzędzi przetwarzania obrazów są filtry wygładzające. Poniżej prezentujemy usuwanie szumu metodą Gaussa oraz medianową. image1 jest obrazem wejściowym, a image2 obrazem wyjściowym.

SmoothImage_Gauss( image1, NIL, 2.0f, 2.0f, 2.5f, image2 );
SmoothImage_Median( image1, NIL, NIL, SmoothImageMedianKernel::Box, 3, NIL, image2 );

Obraz wejściowy:

Wynik (Gauss):

Wynik (Median):

Analiza regionów

Region to zbiór lokacji pikseli tudzież skompresowany obraz binarny. Poniższy kod demonstruje wydobycie regionu czerwonych pikseli oraz jego dalszą obróbkę.

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);

Dane wejściowe:

Dane wyjściowe:

Odczytywanie kodów

Kody macierzowe (DataMatrix) odczytywane są w dwóch etapach: w pierwszym etapie wykrywani są kandydaci, po czym odczytywane są kody w odnalezionych lokacjach.

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);
}

Dane wejściowe:

Dane wyjściowe:

Dopasowanie kształtów

Dopasowanie kształtów (Shape Fitting) pozwala na precyzyjne zlokalizowanie kształtów, których orientacyjne położenie zostało zdefiniowane wcześniej. W tym przykładzie pokazujemy dopasowanie odcinka w dwóch etapach: stworzenie mapy dopasowania oraz właściwe dopasowanie.

// 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);
}

Dane wejściowe:

Dane wyjściowe:

Dane diagnostyczne:

Wyszukiwanie wzorca wg krawędzi

Metody wyszukiwania wzorca (Template Matching) umożliwiają zlokalizowanie obiektów w dowolnym miejscu i rotacji. Przykładem typowej aplikacji jest detekcja markerów na układzie scalonym:

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);
	}
}

Wzorzec:

Dane wejściowe:

Dane wyjściowe:

Akwizycja obrazu poprzez interfejs GigE Vision

Zebra Aurora™ Vision Library wspiera pobieranie obrazu między innymi z kamer i frame grabberów kompatybilnych z GigE Vision and GenICam. Ten przykład pokazuje schemat akwizycji obrazu z urządzenia GigE Vision:

// 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);