image — strojni vid¶
Modul image srce je OpenMV-ovog sustava za strojni vid. Izlaže klasu Image – međuspremnik piksela u memoriji nad kojim radi svaka rutina za crtanje, filtriranje, transformaciju i izvlačenje značajki – zajedno s pratećim objektima rezultata koje te rutine vraćaju (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) te pomoćnim klasama koje se koriste za njihovo konfiguriranje (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).
Dohvaćanje slike¶
Postoje četiri načina da se Image dovede u RAM:
Snimanje uživo sa senzora kamere. Pozovite
csi.CSI.snapshot()da uhvatite sljedeću sličicu izravno u međuspremnik slike; vraćeniImagereferencira taj međuspremnik.Iz datoteke. Proslijedite putanju konstruktoru
Image(image.Image("/sd/photo.jpg")); podržani formati na disku su BMP, PPM/PGM, JPEG, PNG i OpenMV-ov format zapisaImageIO.Iz ndarray-a. Proslijedite float32
(h, w)ili(h, w, 3)ndarraykonstruktoruImage. Pikseli se skaliraju iz raspona0.0 -- 255.0u sliku formata GRAYSCALE odnosno RGB565. Koristite ovo da izlaz tenzora izml(ili bilo kojegulabcjevovoda) vratite u sliku po kojoj se može crtati.Prazan međuspremnik. Konstruirajte
Imagezadane veličine i formata piksela (image.Image(320, 240, image.RGB565)) za crtanje od nule ili kao radnu površinu za aritmetiku nad slikom.
Formati piksela¶
Svaka Image ima jedan od sljedećih formata piksela; izbor predstavlja kompromis između memorije, troška obrade i toga koji algoritmi mogu raditi nad njom. Koristite BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG ili PNG kao argument pixformat pri konstruiranju slike ili konfiguriranju senzora kamere:
BINARY (1 bpp) – jedan bit po pikselu. Najmanji format; koristi se interno u rutinama za pragiranje i morfologiju, ali se rijetko snima izravno sa senzora.
GRAYSCALE (8 bpp) – jedan bajt po pikselu (Y kanal formata YUV422). Najbrži format za većinu algoritama strojnog vida (AprilTag, detekcija rubova, optički tok).
RGB565 (16 bpp) – dva bajta po pikselu, 5-bitno crveno / 6-bitno zeleno / 5-bitno plavo. Zadani format boje.
BAYER (8 bpp) – sirovi podaci boje u Bayer uzorku izravno sa senzora. Korisno za prilagođeno de-mozaikiranje ili za pohranu više piksela u manje memorije prije debayeriranja po potrebi.
YUV422 (16 bpp) – 4:2:2 kromatski poduzorkovana boja, dva bajta po pikselu. Korisno kada želite algoritme specifične za krominanciju bez plaćanja punog troška RGB-a.
JPEG / PNG – komprimirani međuspremnici. Najbolji za pohranu i mrežni prijenos. Operacije na razini piksela najprije zahtijevaju
Image.to_grayscale()iliImage.to_rgb565().
Rad s rezultatima¶
Metode za detekciju / izvlačenje značajki na Image vraćaju objekte po kojima možete iterirati i kombinirati ih – poziv Image.find_blobs() vraća popis Blob, poziv Image.find_apriltags() vraća popis AprilTag i tako dalje. Svaka klasa rezultata izlaže geometrijska svojstva detekcije (centroid, granični okvir, površina, vrijednost koda itd.) tako da možete izravno djelovati na njih ili ih proslijediti natrag metodama za crtanje (Image.draw_rectangle(), Image.draw_string(), …).
Pomoćnici za prostore boja¶
Modul također izlaže male čiste funkcije za pretvaranje pojedinačnih vrijednosti piksela između binarnog / sivotonskog / RGB / LAB / YUV prostora boja. Korisne su kada trebate u Pythonu pretvoriti vrijednosti praga ili stavke palete prije nego što ih proslijedite operacijama nad slikom – za pretvorbu cijele slike koristite to_* metode klase Image, koje su mnogo brže od pozivanja ovih pomoćnika u petlji.
Klase¶
- klasa Image – objekt slike
- class ImageIO – objekt ImageIO
- class HaarCascade – deskriptor značajki
- class Similarity – objekt Similarity
- class Histogram – objekt Histogram
- class Percentile – objekt Percentile
- class Threshold – Threshold objekt
- class Statistics – objekt Statistics
- class Blob – objekt Blob
- class Line – objekt Line
- class Circle – objekt Circle
- class Rect – objekt Rectangle
- class QRCode – objekt QRCode
- class AprilTag – AprilTag objekt
- class DataMatrix – objekt DataMatrix
- class BarCode – objekt BarCode
- class Displacement – objekt Displacement
- class kptmatch – Objekt podudaranja ključnih točaka
Funkcije¶
Pomoćnici za pretvorbu prostora boja¶
Svaka od X_to_Y funkcija u nastavku obavlja pojedinačnu pretvorbu vrijednosti piksela. Sve uzimaju/vraćaju vrijednosti u kanonskim OpenMV rasponima:
binarno –
int0 – 1.sivi tonovi –
int0 – 255.RGB –
(r, g, b)tuple 8-bitnih cijelih brojeva (svaki 0 – 255).LAB –
(l, a, b)tuple sLu rasponu 0 – 100 iA/Bu rasponu -128 – 127.YUV –
(y, u, v)tuple sYu rasponu 0 – 255 iU/Vu rasponu -128 – 127.
Za pretvorbu cijele slike koristite to_* metode klase Image, koje su mnogo brže od pozivanja ovih pomoćnika u petlji.
- image.grayscale_to_rgb(value: int) Tuple[int, int, int]¶
Pretvara sivotonsku vrijednost u RGB tuple.
- image.grayscale_to_lab(value: int) Tuple[int, int, int]¶
Pretvara sivotonsku vrijednost u LAB tuple.
- image.grayscale_to_yuv(value: int) Tuple[int, int, int]¶
Pretvara sivotonsku vrijednost u YUV tuple.
- image.rgb_to_grayscale(value: Tuple[int, int, int]) int¶
Pretvara RGB tuple u sivotonsku vrijednost.
- image.lab_to_grayscale(value: Tuple[int, int, int]) int¶
Pretvara LAB tuple u sivotonsku vrijednost.
Deskriptori značajki¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Učitava Haar Cascade i vraća rukovatelj
Cascadeza uporabu sImage.find_features().pathmože biti:doslovni niz
"frontalface"ili"eye"za učitavanje jedne od dviju kaskada ugrađenih u ROM ugrađenog programa (firmware), iliputanja u datotečnom sustavu do prilagođene binarne
.cascadedatoteke koju proizvode OpenMV-ovi alati za pretvorbu kaskada.
stagesodabire koliko stupnjeva kaskade treba vrednovati pri detekciji.-1koristi svaki stupanj pohranjen u datoteci. Smanjenje ove vrijednosti ubrzava detekciju po cijenu više lažnih pozitiva.
- image.load_descriptor(path: str) kp_desc | lbp_desc¶
Učitava deskriptor iz datoteke na putanji
pathi vraća ga. Interna oznaka tipa u datoteci odabire koja se klasa deskriptora rekonstruira:ORB deskriptor ključnih točaka – spremljen pomoću
Image.find_keypoints()nakon čega slijediimage.save_descriptor().LBP deskriptor – spremljen pomoću
Image.find_lbp()nakon čega slijediimage.save_descriptor().
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
Serijalizira
descriptor(ORB deskriptor ključnih točaka ili LBP deskriptor) u datoteku na putanjipathu OpenMV formatu datoteke deskriptora. Ista se datoteka kasnije može ponovno učitati pomoćuimage.load_descriptor().
- image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch¶
Uspoređuje dva deskriptora istog tipa.
Za dva LBP deskriptora – vraća cjelobrojnu Hammingovu udaljenost između njih (manje znači bliže podudaranje).
Za dva ORB deskriptora ključnih točaka – vraća
kptmatchkoji opisuje klaster podudarenih ključnih točaka, iliNoneako nijedno podudaranje ne prolazithreshold.
threshold(0 – 100) postavlja koliko je strogo ORB podudaranje pri prihvaćanju para ključnih točaka. Niže vrijednosti pooštravaju podudaranje odbacujući slaba podudaranja najbližeg susjeda.filter_outliersomogućuje odbacivanje stršećih vrijednosti u stilu RANSAC-a kroz skup podudarenih ključnih točaka. Koristite ga kada očekujete jednu krutu transformaciju između dvaju pogleda; isključite ga kada podudarene ključne točke obuhvaćaju više objekata.
Pomoćnici za geometriju mrlje¶
Ovi pomoćnici uzimaju Blob (kako ga vraća Image.find_blobs()) i po potrebi izračunavaju dodatna geometrijska svojstva. Smješteni su na razini modula – a ne na Blob – tako da osnovni find_blobs() put ne plaća njihovu cijenu osim ako to ne zatražite.
- image.get_solidity(blob: blob) float¶
Vraća čvrstoću (
blob.pixels / convex_hull_area) zablob. Float, 0 – 1; 1.0 znači da mrlja u potpunosti ispunjava svoju konveksnu ljusku.
- image.get_convexity(blob: blob) float¶
Vraća konveksnost (
convex_hull_perimeter / blob.perimeter) zablob. Float, 0 – 1; 1.0 je savršeno konveksna mrlja.
- image.get_major_axis_line(blob: blob) line¶
Vraća
Lineduž glavne osi zablob(dulje od dviju glavnih osi rotiranog pravokutnika minimalne površine).
- image.get_minor_axis_line(blob: blob) line¶
Vraća
Lineduž sporedne osi zablob(kraće od dviju glavnih osi rotiranog pravokutnika minimalne površine).
- image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]¶
Vraća 5-člani tuple
(cx, cy, a, b, rotation)koji opisuje elipsu upisanu u rotirani pravokutnik minimalne površine okoblob:cx/cy– središte elipse u pikselima (cijeli broj).a/b– duljine poluosi u pikselima (cijeli broj).rotation– rotacija elipse u stupnjevima (cijeli broj).
Ovo je običan tuple, a ne attrtuple, pa su polja dostupna samo putem indeksa.
Konstante¶
Formati piksela¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument pixformat konstruktoru Image ili metodi csi.CSI.pixformat().
- image.BINARY: int¶
Bitmapa s 1 bitom po pikselu. Najmanji format – koristi se interno za pragiranje i morfologiju, rijetko se snima izravno sa senzora.
- image.GRAYSCALE: int¶
Sivi tonovi s 8 bita po pikselu (jedan bajt po pikselu). Najbrži format za većinu algoritama strojnog vida (AprilTag, detekcija rubova, optički tok).
- image.RGB565: int¶
Boja s 16 bita po pikselu pakirana kao 5 bita crvene / 6 bita zelene / 5 bita plave. Zadani format boje.
- image.BAYER: int¶
Sirovi Bayer podaci s 8 bita po pikselu izravno sa senzora. Većina metoda obrade slike nije dostupna na Bayer slikama; koristite ovo kada želite debayerirati po potrebi ili pohraniti više piksela u manje memorije.
- image.YUV422: int¶
4:2:2 kromatski poduzorkovana boja, dva bajta po pikselu, pakirana kao
Y1, U, Y2, Vpo paru piksela. Samo neke metode obrade slike rade izravno na YUV422.
- image.JPEG: int¶
Komprimirani JPEG međuspremnik. Operacije na razini piksela najprije zahtijevaju
Image.to_grayscale()iliImage.to_rgb565().
- image.PNG: int¶
Komprimirani PNG međuspremnik. Operacije na razini piksela najprije zahtijevaju
Image.to_grayscale()iliImage.to_rgb565().
Palete boja¶
Proslijedite bilo koju od sljedećih vrijednosti metodama Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) ili csi.CSI.color_palette() za obojenje sivotonske slike.
- image.PALETTE_IRONBOW: int¶
Nelinearna „ironbow” paleta koja oponaša izgled tražila termalne kamere FLIR Lepton.
- image.PALETTE_DEPTH: int¶
Paleta za dubinske slike. Dostupna samo na verzijama s podrškom za senzor dubine (ToF cjevovod – npr. OpenMV Cam AE3 ili bilo koja kamera s priključenim ToF Pmod).
- image.PALETTE_EVT_DARK: int¶
Paleta za vizualizaciju sličica GENX320 event-kamere na tamnoj pozadini. Proslijedite je
csi.CSI.color_palettekako bi GENX320 upravljački program emitirao obojene RGB565 sličice u histogramskom načinu rada, ili metodiImage.draw_image()putemcolor_palette=pri obojenju sivotonske event-slike.Dostupno samo na verzijama s podrškom za GENX320 (OpenMV Cam AE3 i GENX320 Pmod).
- image.PALETTE_EVT_LIGHT: int¶
Paleta za vizualizaciju sličica GENX320 event-kamere na svijetloj pozadini. Isto otpremanje i dostupnost kao
PALETTE_EVT_DARK.
Načini skaliranja¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument hint metodama Image.draw_image(), Image.scale() ili sličnim metodama skaliranja.
Naputci za crtanje / draw_image¶
Bitovno-ILI (Bit-OR) bilo koje od ovih i proslijedite kao argument hint metode Image.draw_image().
- image.CENTER: int¶
Centrira izvor na odredištu. Sva eksplicitna x/y odstupanja tada postaju odstupanja od središta umjesto od gornjeg lijevog kuta.
- image.EXTRACT_RGB_CHANNEL_FIRST: int¶
Pri izvlačenju RGB kanala putem
Image.draw_image(), izvlači kanal prije skaliranja. Bez ovog naputka kanal se izvlači nakon skaliranja.
- image.APPLY_COLOR_PALETTE_FIRST: int¶
Pri primjeni palete boja putem
Image.draw_image(), primjenjuje paletu prije skaliranja. Bez ovog naputka paleta se primjenjuje nakon skaliranja.
- image.SCALE_ASPECT_KEEP: int¶
Skalira izvor da stane unutar odredišta uz zadržavanje omjera slike (dodaje crne rubove kada se omjeri razlikuju).
- image.SCALE_ASPECT_EXPAND: int¶
Skalira izvor da ispuni odredište uz zadržavanje omjera slike (obrezuje kada se omjeri razlikuju).
- image.BLACK_BACKGROUND: int¶
Govori putu alfa-stapanja da je odredište poznato kao crno pa može preskočiti učitavanje odredišnog piksela. Ubrzava alfa-efekte na svježe očišćenim međuspremnicima.
JPEG poduzorkovanje¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument subsampling metodama Image.to_jpeg(), Image.compress() ili Image.save() pri zapisivanju JPEG-a.
- image.JPEG_SUBSAMPLING_AUTO: int¶
Automatski odabire kromatsko poduzorkovanje na temelju postavke kvalitete JPEG-a.
- image.JPEG_SUBSAMPLING_444: int¶
Prisiljava 4:4:4 kromatsko poduzorkovanje (bez kompresije krominancije).
Podudaranje predložaka¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument search metode Image.find_template().
Detekcija rubova¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument algorithm metode Image.find_edges().
- image.EDGE_CANNY: int¶
Canny detektor rubova – magnituda gradijenta + potiskivanje ne-maksimuma + histereza. Veće kvalitete, sporiji.
- image.EDGE_SIMPLE: int¶
Detektor rubova s pragiranim visokopropusnim filtrom. Brži, ali proizvodi deblje i šumovitije rubove od
EDGE_CANNY.
ORB detektori kutova¶
Proslijedite bilo koju od sljedećih vrijednosti kao argument corner_detector metode Image.find_keypoints().
- image.CORNER_FAST: int¶
FAST detektor kutova. Brži od
CORNER_AGAST, ali manje precizan.
- image.CORNER_AGAST: int¶
AGAST detektor kutova. Sporiji od
CORNER_FAST, ali proizvodi stabilnije ključne točke.
AprilTag obitelji¶
Bitovno-ILI (Bit-OR) bilo koju kombinaciju sljedećih i proslijedite kao argument families metode Image.find_apriltags(). Svaka obitelj uvjetovana je vlastitom opcijom izgradnje u ugrađenom programu (firmware); nepodržane obitelji odsutne su tijekom izvođenja, umjesto da su uvijek nula.
- image.TAG36H10: int¶
AprilTag obitelj
36h10(2320 jedinstvenih ID-ova, do 3-bitni ispravak pogrešaka).
Simbologije crtičnog koda¶
Vrijednosti prijavljene u BarCode.type za stavke koje vraća Image.find_barcodes().
- image.PDF417: int¶
PDF417 2D složeni crtični kod. Konstanta postoji radi potpunosti, ali dekoder crtičnog koda trenutno ne implementira PDF417 –
Image.find_barcodes()neće vraćati detekcije ovog tipa.