HALCON 21.11 Fremskridt

En hurtig adgang til funktionaliteten i HALCON, Version 21.11.0.0
Alle rettigheder forbeholdes. Ingen del af denne publikation må gengives, lagres i et genfindingssystem eller transmitteres i nogen form eller på nogen måde, elektronisk, mekanisk, fotokopiering, optagelse eller på anden måde, uden forudgående skriftlig tilladelse fra udgiveren.
Copyright © 2003-2021 af MVTec Software GmbH, München, Tyskland
Beskyttet af følgende patenter: US 7,239,929, US 7,751,625, US 7,953,290, US 7,953,291, US 8,260,059, US 8,379,014, US 8,830,229. Yderligere patenter afventer.
Microsoft, Windows, Windows Server 2008/2012/2012 R2/2016, Windows 7/8/8.1/10, Microsoft .NET, Visual C++ og Visual Basic er enten varemærker eller registrerede varemærker tilhørende Microsoft Corporation.
Linux er et varemærke tilhørende Linus Torvalds.
macOS og OpenCL er varemærker tilhørende Apple Inc.
NVIDIA, CUDA, cuBLAS og cuDNN er enten varemærker eller registrerede varemærker tilhørende NVIDIA Corporation.
OpenGL er et varemærke tilhørende Silicon Graphics, Inc.
Alle andre nationalt og internationalt anerkendte varemærker og handelsnavne anerkendes hermed.
Mere information om HALCON kan findes på: http://www.halcon.com/
Om denne manual
Denne manual introducerer dig til HALCON. Den er beregnet til begyndere uden forudgående kendskab til HALCON.
Denne manual kan også bruges som en referencevejledning til flere andre HALCON-manualer, da den forbinder dem med følgende emner:
- Installation af HALCON (side 7)
Dette kapitel introducerer MVTec Software Manager (SOM). - HALCON Architecture (side 9)
Noget teoretisk baggrund nødvendig for at forstå, hvad HALCON er, og hvordan det virker. - Sådan udvikles applikationer (side 15)
Dette kapitel forklarer tre grundlæggende tilgange til udvikling med HALCON og guider dig gennem et første programmeringseksempelample. - Sådan fortsætter du (side 19)
Dette kapitel henviser til yderligere informationskilder.
Installerer HALCON
For Linux- og Windows-brugere anbefaler vi at downloade og installere HALCON via MVTec Software Manager (SOM). SOM er en installationsmanager for softwarepakker. Det giver adgang til et fjernkatalog med produkter og understøtter blandt andre funktioner, download og installation af pakker. En trinvis introduktion til, hvordan man installerer HALCON via SOM, kan findes i installationsvejledningen.
HALCON arkitektur
HALCONs grundlæggende arkitektur er afbildet i figur 2.1. Hoveddelen er billedbehandlingsbiblioteket, som består af mere end 2000 operatører. Du kan også udvikle dine egne operatører i form af såkaldte ex-tension-pakker (side 11). Du bruger operatørerne i din applikation via sproggrænseflader (side 11) som HALCON/C++ eller HALCON/Python. Disse er biblioteker, som tillader en direkte brug af operatørerne i den typiske programmeringsstil for de forskellige programmeringssprog.

Figur 2.1: Grundlæggende arkitektur af HALCON.
Til adgang til billedoptagelsesenheder tilbyder HALCON billedopsamlingsgrænseflader (side 13), som giver dig mulighed for at bruge ganske forskellige opsamlingsenheder på en fælles måde. Bibliotekerne, der indeholder de enhedsspecifikke implementeringer, indlæses dynamisk, når det er nødvendigt. På samme måde er der adgang til I/O-enheder via enhedsspecifikke I/O-grænseflader (side 13).
Operatører
Når der bruges nogen form for funktionalitet fra HALCON-biblioteket, sker det via en operatør. De fleste af dem omfatter flere metoder, som vælges via parametre. En komplet liste over alle operatører kan findes i HALCON Operator Reference tilgængelig i HDevelop, .NET, Python, C++ og C syntaks. Vigtige funktioner for operatører er:
- Der er intet hierarki blandt operatører. Fra softwarearkitekturpunktet view, alle operatører er på samme niveau.
- Selvfølgelig er der logiske grupper af operatører. F.eksample, kan dette ses af de klasser, der tilbydes til C++ og .NET, hvor operatører, der behandler den samme datatype, er medlemsfunktioner af de tilsvarende klasser.
- Udformningen af operatørerne følger reglerne for den åbne arkitektur. Derfor kan du oprette dine egne operatører og dermed udvide HALCON (se afsnit 2.2). Programmeringsmanualen til udvidelsespakken indeholder detaljerede oplysninger om udvidelse af operatørbiblioteket.
- Mange operatører kan gøre gennemsigtig brug af automatisk parallelisering, hvilket giver en nem måde at fremskynde programmet på, når der bruges store billeder på en multi-processor eller multi-core computer. Detaljeret information om parallel programmering kan findes i den tekniske note Parallel Programmering samt i programmeringsvejledningen.
- Operatører har standardiserede regler for bestilling af input- og outputparametre: inputikonisk, outputikonisk, inputkontrol og outputkontrol (se afsnit 2.1.1). Ikke alle grupperne er muligvis nødvendige for en given operatør. Generelt ændres inputparametre for operatører ikke, hvilket resulterer i en klar og enkel semantik. Der er kun få undtagelser til dette design, f.eks. set_grayval, overpaint_gray og overpaint_region.
Parametre og datastrukturer
HALCON har to grundlæggende typer parametre: ikoniske data og kontroldata. Billeder, områder og XLD'er (eXtented Line Description) hører til de ikoniske data.
Billeder består hovedsageligt af kanaler, dvs. matricer, der indeholder pixelværdier. Alle kanaler i et billede har samme størrelse. For detaljeret information om pixels og kanaler, læs venligst kapitlet "Billede" i HALCON Operator Reference.
For hvert billede angiver den såkaldte region of interest (ROI) hvilken del af billedet, der behandles. ROI kan defineres meget fleksibelt (fra et simpelt rektangel til et sæt uforbundne pixels). For detaljer om ROI-håndtering se Solution Guide I, Region of Interest på side 27.
Regioner er et sæt pixels. Pixels i en region behøver ikke at være forbundet. Selv en vilkårlig samling af pixels kan håndteres som en enkelt region. Med operatørforbindelsen kan et område opdeles i dets forbundne områder, dvs. komponenter bestående af forbundne pixels.
XLD'er omfatter alle kontur- og polygonbaserede data. Subpixel-nøjagtige operatorer som edges_sub_pix returnerer konturerne som XLD-data. En kontur er en sekvens af 2D kontrolpunkter, som er forbundet med linjer. Typisk er afstanden mellem kontrolpunkter omkring en pixel. XLD-objekter indeholder, udover kontrolpunkterne, såkaldte lokale og globale attributter. Typisk examples for disse er f.eks. kanten amplituden af et kontrolpunkt eller regressionsparametrene for et kontursegment. Udover udtrækning af XLD-objekter, understøtter HALCON yderligere behandling. Eksamples for dette er udvælgelsen af konturer baseret på givne funktionsområder til segmentering af en kontur i linjer, buer, polygoner eller paralleller.
Kontroldataene inkluderer håndtag og grundlæggende datatyper som heltal, ægte, streng.
Håndtag er referencer til komplekse datastrukturer, fx en forbindelse til en billedoptagelsesgrænseflade eller en model for den formbaserede matchning. Af effektivitets- og datasikkerhedsmæssige årsager overføres ikke hele strukturen, men kun håndtaget mellem operatørerne. Håndtag er magiske værdier, som ikke må ændres og kan variere fra udførelse til udførelse og version til version. De slettes automatisk, når alle referencer er overskrevet. Eksamples hvor håndtag bruges er grafikvinduer, files, sockets, billedoptagelsesgrænseflader, OCR, OCV, måling og matchning.
Udvidelsespakker
HALCON kan blive forlænget af nye operatører. Selvom HALCON allerede indeholder et rigeligt sæt af operatører til forskellige opgaver, kan du ønske at implementere nye operatører, f.eks. for at få adgang til en speciel hardware eller for at implementere en alternativ algoritme. For at gøre dette leverer HALCON Extension Package Interface, som tillader integration af nye operatører (implementeret i C) i form af såkaldte udvidelsespakker. Extension Package Interface indeholder flere foruddefinerede rutiner og makroer til nem håndtering af billeddata og hukommelsesobjekter i C. Når en ny operatør er blevet integreret med succes, kan den bruges som enhver anden HALCON operatør. Programmeringsmanualen til udvidelsespakken indeholder detaljerede oplysninger om udvidelse af operatørbiblioteket.
Sproggrænseflader
Som vist i figur 2.1 på side 9, leverer HALCON såkaldte sproggrænseflader. Disse er modersmålsbindinger, som gør det muligt for dig at ringe til operatører og bruge HALCON-datatyper direkte fra din applikation, hvad enten det er Python, C, C++ eller .NET.
For at starte udviklingen anbefaler vi først at tjekke en af de køreklare exampde programmer. Her kan du se, hvordan projektet skal sættes op, og hvordan operatører og typer bruges.
For hver sproggrænseflade kan navnene på typer, klasser, navnekonventioner for operatører osv. variere for at være i overensstemmelse med de typiske regler, der gælder for det valgte sprog. Operatørsignaturerne for de understøttede programmeringssprog er dokumenteret i HALCON Operator Reference.
HALCON/Python
Python-grænsefladen skiller sig ud for sin enkelhed og dens evne til hurtig prototyping. HALCON-operatører kaldes direkte som selvstændige funktioner efter import af HALCON/Python-modulet. Bemærk også, at operatørparametre i HALCON/Python er opdelt i funktionsparametre (input) og returværdier (output).
Example
Den følgende kode læser et billede og beregner antallet af forbundne områder (side 10) i det.
img = ha.read_image('pcb')
region = ha.threshold(img, 0, 122)
num_regions = ha.count_obj(ha.connection(region))
print(f'Antal regioner: {antal_regioner}')
For forudsætninger og en detaljeret gennemgang, se venligst Programmers vejledning, del 4, A First Example.
HALCON/C
C-grænsefladen er den enkleste grænseflade, der understøttes af HALCON. Hver operatør er repræsenteret af enten en eller to globale funktioner, hvor operatørnavnet og parametersekvensen er identiske med HDevelop-sproget.
Example
Den følgende kode læser et billede og beregner antallet af forbundne områder (side 10) i det.
Hobject img;
read_image(&img, "pcb");
Hobject region;
tærskel(img, ®ion, 0, 122);
Hobject connected_regions;
forbindelse (område, &forbundne_områder);
Hlange antal_regioner = 0;
count_obj(forbundne_regioner, &num_regioner);
printf("Antal regioner: %" PRIdPTR "\n", antal_regioner);
For forudsætninger og en detaljeret gennemgang, se venligst Programmers vejledning, del 5, A First Example.
HALCON/C++
C++-grænsefladen er meget mere sofistikeret end C-grænsefladen. Her, advanentages af C++ og objektorienteret programmering bruges, dvs. automatisk typekonvertering, konstruktion og destruktion, eller gruppering af funktioner sammen med deres data i klasser. Ligesom i C-grænsefladen er globale funktioner for hver HALCON-operatør tilvejebragt for en proceduremæssig programmeringsstil.
Example
Den følgende kode læser et billede og beregner antallet af forbundne områder (side 10) i det.
HImage img{"pcb"};
HRegion region = img.Threshold(0, 122);
Hlong numRegions = region.Connection().CountObj();
std::cout << “Antal regioner: ” << numRegions << '\n';
For forudsætninger og en detaljeret gennemgang, se venligst Programmers vejledning, del 2, A First Example.
HALCON/.NET
C# og Visual Basic .NET bruger HALCON via .NET-grænsefladen.
Analogt med C++ tilbydes to programmeringstyper: proceduremæssig og objektorienteret. Til den proceduremæssige stil giver klassen HOperatorSet alle HALCON-operatorer, hvor HObject bruges til at håndtere ikoniske data og HTuple bruges til kontroldata. For den objektorienterede stil er klasser som HDataCode2d, HMeasure eller HShapeModel tilvejebragt for den centrale funktionalitet. Derudover er klasser til ikoniske data, f.eks. HImage eller HRegion, tilgængelige.
Example
Den følgende kode læser et billede og beregner antallet af forbundne områder (side 10) i det.
HImage img = new HImage(“pcb”);
HRegion region = img.Threshold(0d, 122d);
int numRegions = region.Connection().CountObj();
Console.WriteLine(“Antal regioner: ” + antalRegioner);
For forudsætninger og en detaljeret gennemgang, se venligst Programmers vejledning, del 3, A First Example.
Billedoptagelsesgrænseflader
HALCONs billedoptagelsesgrænseflader danner broen mellem software leveret af producenten af billedoptagelsesenheden og HALCON. De danner en fælles, generisk grænseflade, der kun kræver et lille sæt operatører. Se venligst Solution Guide II-A for detaljerede oplysninger om dette emne.
I øjeblikket leverer HALCON grænseflader til mere end 50 frame grabbers og hundredvis af industrielle kameraer i form af dynamisk indlæsbare biblioteker (Windows: DLL'er; Unix-lignende systemer: delte biblioteker). Biblioteksnavne starter med præfikset hAcq; bibliotekerne, der slutter med suffikset xl, bruges af HALCON XL.
De mest udbredte grænseflader baseret på industristandarder er allerede installeret sammen med HALCON-bibliotekerne. Yderligere interfaces, samt de seneste versioner af allerede inkluderede interfaces kan downloades under https://www.mvtec.com/products/interfaces. HALCON billedoptagelsesgrænseflader kan ændre sig hyppigere end selve HALCON-biblioteket. En grund til dette er, at MVTec løbende udvikler nye grænseflader; desuden, hvis softwaren leveret af producenterne af billedopsamlingsenheder ændres, f.eks. hvis nye funktioner integreres, vil de tilsvarende HALCON-grænseflader blive tilpasset. Se også billedoptagelsesgrænsefladereferencen for en komplet liste over understøttede billedopsamlingsgrænseflader.
Når du har installeret din billedopsamlingsenhed, skal du blot ringe til operatøren open_framegrabber og angive navnet på billedoptagelsesgrænsefladen og nogle yderligere oplysninger, f.eks. vedrørende det tilsluttede kamera. Derefter kan billeder gribes ved at kalde operatøren grab_image (eller grab_image_async).
I / O-grænseflader
HALCON leverer grænseflader til flere I/O-enheder for at muliggøre dataopsamling. Disse grænseflader er tilgængelige som dynamisk indlæsbare biblioteker (Windows: DLL'er; Unix-lignende systemer: delte biblioteker). Biblioteksnavne starter med præfikset hio; bibliotekerne, der slutter med suffikset xl, bruges af HALCON XL.
HALCON I/O-enhedsgrænseflader giver ensartet adgang til forskellige I/O-enheder ved hjælp af et lille sæt operatører. Når du har installeret din I/O-enhed, oprettes en forbindelse ved hjælp af operatøren open_io_device, som angiver navnet på I/O-enhedens interface og eventuelt nogle enhedsspecifikke parametre. Når forbindelsen er etableret, kan en transmissionskanal åbnes ved at kalde open_io_channel. For at læse og skrive værdier på denne kanal skal du bruge henholdsvis operatørerne read_io_channel og write_io_channel.
Bemærk venligst, at HALCON I/O-enhedens grænseflader kan ændre sig hyppigere end selve HALCON-biblioteket. Du kan finde den seneste information sammen med downloadbare grænseflader (inklusive dokumentation) under https://www.mvtec.com/products/interfaces. Se også I/O-enhedsgrænsefladereferencen for en komplet liste over understøttede I/O-enhedsgrænseflader.
Hvordan man udvikler applikationer
Vi anbefaler, at du starter med hurtig prototyping i HDevelop, det interaktive udviklingsmiljø for HALCON machine vision-biblioteket. Du kan bruge HDevelop til at finde de optimale operatorer og parametre til at løse din billedanalyseopgave. Efter at have udviklet et HDevelop-program i henhold til de givne krav, skal det oversættes til det endelige miljø. Til dette kan du vælge mellem følgende tre tilgange, afhængigt af dine præferencer:
- Start fra bunden: At skrive dit program fra bunden betyder at oversætte din HDevelop-kode til målprogrammeringssproget (C++, Python…) manuelt. Som nævnt før kan navnekonventionerne for operatører, navnene på klasser osv. variere mellem programmeringssprog. Tag et kig på HALCON Operator Reference for at få HALCON-operatørsignaturerne for hvert understøttet programmeringssprog. For information om, hvordan du opretter applikationer på dit ønskede målsprog, læs venligst Programmer's Guide.
- Eksporter HDevelop-kode: Oversæt din HDevelop-kode til målprogrammeringssproget automatisk ved hjælp af HDevelops kodeeksport.
- Eksporter biblioteksprojekt: HDevelops bibliotekseksport genererer en projektmappe, der er klar til brug, inklusive wrap-per-kode på målsproget og CMake file at bygge projektet. HDevelops bibliotekseksport bruger HDevEngine, et bibliotek, der fungerer som tolk. HDevEngine lader dig udføre HDevelop-programmer eller -procedurer direkte fra en applikation skrevet i C++ eller et hvilket som helst sprog, der kan integrere .NET-objekter. Du behøver således ikke at rekompilere hele applikationen, når du laver ændringer i HDevelop-koden.
Selvfølgelig kan du bruge HDevEngine uden at bruge HDevelops bibliotekseksportfunktion. Sådan bruges HDevEngine er beskrevet detaljeret i Programmers vejledning, del 6 (Brug af HDevEngine).
HUdvikle
Lad os tage et første kig på HDevelop. Figur 3.1 viser HDevelops brugerflade, efter at et program er blevet indlæst og delvist kørt.
Som standard er disse vinduer synlige, som også er vigtige for udvikling med HDevelop:
- Grafikvindue Viser (mellemliggende) resultater, nemlig ikoniske data (side 10) som billeder, områder og XLD'er.
- Programvindue Det er her du indtaster din programkode ved at bruge operatorer (side 10) for at få adgang til HALCONs billedbehandlingsmetoder.
- Variabelt vindue Viser alle variabler, nemlig ikoniske variabler og kontrolvariabler. Ikoniske variabler indeholder ikoniske data (side 10), og kontrolvariabler indeholder kontroldata (side 10).
Detaljerede oplysninger om HDevelop kan findes i HDevelop Brugervejledning. Vores vejledningsvideoer tilbyder også en god introduktion til HDevelop:
- HDevelop Tutorial 01: GUI og navigation
- HDevelop Tutorial 02: Variabler
- HDevelop Tutorial 03: Visualisering

Figur 3.1: HDevelops brugergrænseflade.
Exampprogrammet
Nu hvor du er blevet introduceret til HDevelops brugergrænseflade og de grundlæggende begreber i HALCON (side 9), lad os udvikle en C++-applikation ved hjælp af Bibliotekeksportmetoden.
Ud over de følgende trin-for-trin instruktioner, anbefaler vi, at du ser vores vejledningsvideoer: Integrer HDevelop-kode i en C++-applikation ved hjælp af Library Project Export
Integrer HDevelop-kode i en C#-applikation ved hjælp af Library Project Export
Videoerne demonstrerer bibliotekseksporten og giver mere baggrundsinformation om emnet.
Opret prototype i HDevelop
Opgaven for følgende example er at læse et billede og tælle antallet af forbundne regioner det det.
- Åbn HDevelop og indtast følgende kode i programvinduet:
read_image (Billede, 'pcb')
tærskel (billede, område, 0, 122)
forbindelse (Region, ConnectedRegions)
count_obj (ConnectedRegions, Number) - Test dit program ved at klikke på Kør i værktøjslinjen eller trykke på F5.
For nemt at integrere denne HDevelop-kode i en egentlig applikation, indkapsler vi maskinsynsdelen i en lokal procedure.
- Fremhæv følgende kodelinjer: threshold (Billede, Region, 0, 122) forbindelse (Region, ConnectedRegions) count_obj (ConnectedRegions, Number)
- Højreklik for at åbne kontekstmenuen.
- Vælg Opret ny procedure.
- Navngiv det count_regions.
- Vælg parametre og skift udvælgelsesskema til først ind, sidst ud.
- Bekræft med OK.
- Gem dit HDevelop-program som hdev_count_regions.hdev
Forbered Visual Studio Project
I dette exampvi vil bruge Visual Studio 2019. 1
- Opret et tomt C++ Windows Console-projekt og navngiv det vs_count_regions. Aktiver venligst indstillingen Placer løsning og projekt i samme mappe. 2
- Tilføj en C++-kilde file (Menu Projekt Tilføj nyt element... C++ File) og navngiv den vs_count_regions.cpp.
- Vælg løsningsplatformen x64 fra rullemenuen på værktøjslinjen.
- Åbn dine projektegenskaber (Menu Project vs_count_regions Properties...) og foretag følgende indstillinger:
- Vælg C/C++ Generelt og tilføj følgende yderligere Inkluderingsmapper:$(HALCONROOT)\include;$(HALCONROOT)\include\halconcpp;
- Vælg Linker Generelt og tilføj følgende ekstra bibliotekskatalog:$(HALCONROOT)\lib\$(HALCONARCH);
- Vælg Linker Input og tilføj følgende yderligere afhængigheder: halconcpp.lib;hdevenginecpp.lib;
Eksporter biblioteksprojekt
Dernæst eksporterer vi vores HDevelop-program hdev_count_regions.hdev til vores Visual Studio-projektmappe.
- Åbn det tidligere oprettede HDevelop-program hdev_count_regions.hdev.
- Åben File Eksporter biblioteksprojekt...
- Foretag følgende indstillinger:
- Input file: Aktuelt program
- Målsprog: C++
- Projektnavn: hdev_count_regions
- Projektplacering: Vælg placeringen af vores Visual Studio-projekt vs_count_regions.
- Navneområde: hdev_count_regions
- Bekræft med eksport.
Nu skal din Visual Studio-projektmappe vs_count_regions indeholde mindst følgende data:
- vs_count_regions.cpp (Kilde File)
- vs_count_regions.sln (løsning)
- hdev_count_regions (mappe fra HDevelop Export)
- cmake
- res_ hdev_ count_ regioner
- hdev _ count_ regioner. hdev
- kilde
- hdev_count_regions.cpp
- hdev_count_regions.h
- CMakeLists.txt
Integrer biblioteksprojektet i Visual Studio
Til sidst skal vi integrere HDevelop-programmet i vores Visual Studio-projekt.
- Åbn Visual Studio Project.
- Åbn Project Add Existing Item... og vælg C++ file hdev_count_regions.cpp og overskriften file hdev_count_regions.h, skabt af HDevelop's Library Export. (De files er placeret i mappen hdev_count_regions source.)
- Indtast følgende kode i vs_count_regions.cpp:
#omfatte
#include "HalconCpp.h"
#include "hdev_count_regions/source/hdev_count_regions.h"
int main()
{
HalconCpp::HImage Image(“pcb”);
hdev_count_regions::SetResourcePath(“hdev_count_regions/res_hdev_count_regions”);
HalconCpp::HTuple Number{};
hdev_count_regions::count_regions(Billede, &Number);
std::cout << “Antal regioner: ” << Antal.L() << '\n';
} - Udfør programmet. → En konsol åbnes, der viser resultatet 'Antal regioner: 43'.
Sådan fortsætter du
For at dykke dybere ned i HALCON tilbyder vi yderligere dokumentation og support.
- HDevelop Exampde programmer
HALCON leverer et omfattende sæt af example programmer, ikke kun til HDevelop, men også til forskellige programmeringssprog. Disse examples kan findes i mappen angivet af miljøvariablen % HALCONEXAMPLES% eller, hvis variablen ikke er indstillet, i underbiblioteket f.eksampfiler af den mappe, hvor du har installeret HALCON.
For at åbne en HDevelop exampi programmet, vælg menuen File Gennemse HDevelop Exampde programmer…. For begyndere anbefaler vi at vælge en example fra kategorien Anvendelsesområde. - Services og support
Vores webwebsted https://www.mvtec.com/services-support tilbyder en bred vifte af support, f.eksample tutorial-videoer, information om workshops og træninger, udviklerhjørnet med tips og tricks og mange flere. - HALCON dokumentation
Dokumentationen giver et væld af information, fra begynderemner til ekspertviden. F.eksample, beskriver vores løsningsvejledninger maskinsynsmetoder, og hvordan man anvender dem i HDevelop. Et godt udgangspunkt er Solution Guide I, som introducerer dig til de vigtigste maskinsynsmetoder.
En overview af alle manualer med en kort beskrivelse kan findes på dokumentationens indtastningsside.
Dokumenter/ressourcer
![]() |
HALCON 21.11 Fremskridt [pdfBrugervejledning 21.11 Fremskridt, 21.11, Fremskridt |





