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 Adaptive 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, 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, RegionMorphologyKernel::Ellipse, 15, 15, region2);
FillRegionHoles(region2, RegionConnectivity::EightDirections, NIL, 10000, region3);
DrawRegion(image1, region3, NIL, Pixel(0, 255, 0), 1.0);
OpenRegion(region3, RegionMorphologyKernel::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, true, 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

Adaptive 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 (...)
{
	// Grab image
	GigEVision_ReceiveImage(hDev, image1);

	// Process image
	...
}

// Finalize acquisition
avl::GigEVision_StopAcquisition(hDev);
avl::GigEVision_CloseHandle(hDev);