image — konenäkö

image-moduuli on OpenMV:n konenäköpinon sydän. Se tarjoaa Image-luokan – muistissa olevan pikselipuskurin, jonka päällä jokainen piirto-, suodatus-, muunnos- ja piirteenpoimintarutiini toimii – yhdessä niiden rutiinien palauttamien tulosobjektien kanssa (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) sekä niiden määrittelyyn käytettävien apuluokkien kanssa (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).

Kuvan hankkiminen

On neljä tapaa saada Image RAM-muistiin:

  • Reaaliaikainen kaappaus kamerasensorilta. Kutsu csi.CSI.snapshot() kaapataksesi seuraavan kehyksen suoraan kehyspuskuriin; palautettu Image viittaa tuohon puskuriin.

  • Tiedostosta. Anna polku Image-konstruktorille (image.Image("/sd/photo.jpg")); tuetut levyformaatit ovat BMP, PPM/PGM, JPEG, PNG ja OpenMV:n ImageIO-tallennusmuoto.

  • Ndarray-objektista. Anna float32-tyyppinen (h, w)- tai (h, w, 3)-muotoinen ndarray Image-konstruktorille. Pikselit skaalataan välistä 0.0 -- 255.0 GRAYSCALE- tai vastaavasti RGB565-kuvaksi. Käytä tätä tuodaksesi ml-moduulin (tai minkä tahansa ulab-putken) tensorituloksen takaisin piirrettäväksi kuvaksi.

  • Tyhjä puskuri. Luo Image annetulla koolla ja pikseliformaatilla (image.Image(320, 240, image.RGB565)) piirtääksesi siihen tyhjästä tai käyttääksesi sitä apupintana kuvan aritmetiikassa.

Pikseliformaatit

Jokaisella Image-objektilla on yksi seuraavista pikseliformaateista; valinta tasapainottaa muistinkäytön, prosessointikustannuksen ja sen, mitä algoritmeja sillä voi ajaa. Käytä arvoja BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG tai PNG pixformat-argumenttina kuvaa luotaessa tai kamerasensoria määriteltäessä:

  • BINARY (1 bpp) – yksi bitti pikseliä kohden. Pienin formaatti; sitä käyttävät sisäisesti kynnystys- ja morfologiarutiinit, mutta sitä kaapataan harvoin suoraan sensorilta.

  • GRAYSCALE (8 bpp) – yksi tavu pikseliä kohden (YUV422:n Y-kanava). Nopein formaatti useimmille konenäköalgoritmeille (AprilTag, reunantunnistus, optinen virtaus).

  • RGB565 (16 bpp) – kaksi tavua pikseliä kohden, 5-bittinen punainen / 6-bittinen vihreä / 5-bittinen sininen. Oletusväriformaatti.

  • BAYER (8 bpp) – raaka Bayer-kuviollinen väridata suoraan sensorilta. Hyödyllinen mukautettuun demosaikointiin tai useamman pikselin tallentamiseen pienempään muistiin ennen tarvittaessa tehtävää debayerointia.

  • YUV422 (16 bpp) – 4:2:2-krominanssialinäytteistetty väri, kaksi tavua pikseliä kohden. Hyödyllinen kun haluat krominanssikohtaisia algoritmeja maksamatta täyttä RGB-hintaa.

  • JPEG / PNG – pakatut puskurit. Parhaita tallennukseen ja verkkosiirtoon. Pikselitason operaatiot edellyttävät ensin Image.to_grayscale()- tai Image.to_rgb565()-kutsua.

Tulosten käsittely

Image-luokan tunnistus- ja piirteenpoimintametodit palauttavat objekteja, joiden yli voit iteroida ja joita voit yhdistellä – Image.find_blobs()-kutsu palauttaa listan Blob-objekteja, Image.find_apriltags()-kutsu palauttaa listan AprilTag-objekteja jne. Jokainen tulosluokka tarjoaa tunnistuksen geometriset ominaisuudet (keskipisteen, rajauslaatikon, pinta-alan, koodiarvon jne.), joten voit toimia niiden pohjalta suoraan tai välittää ne takaisin piirtometodeille (Image.draw_rectangle(), Image.draw_string(), …).

Väriavaruuden apufunktiot

Moduuli tarjoaa myös pieniä puhtaita funktioita yksittäisten pikseliarvojen muuntamiseen binääri- / harmaasävy- / RGB- / LAB- / YUV-väriavaruuksien välillä. Nämä ovat hyödyllisiä kun sinun täytyy muuntaa kynnysarvoja tai palettimerkintöjä Pythonissa ennen niiden välittämistä kuvaoperaatioihin – koko kuvan muuntamiseen käytä Image-luokan to_*-metodeja, jotka ovat paljon nopeampia kuin näiden apufunktioiden kutsuminen silmukassa.

Luokat

Funktiot

Väriavaruuden muunnoksen apufunktiot

Jokainen alla olevista X_to_Y-funktioista suorittaa yhden pikseliarvon muunnoksen. Ne kaikki ottavat/palauttavat arvoja OpenMV:n kanonisilla väleillä:

  • binary – int 0 – 1.

  • grayscale – int 0 – 255.

  • RGB – (r, g, b)-monikko 8-bittisistä kokonaisluvuista (kukin 0 – 255).

  • LAB – (l, a, b)-monikko, jossa L on välillä 0 – 100 ja A/B välillä -128 – 127.

  • YUV – (y, u, v)-monikko, jossa Y on välillä 0 – 255 ja U/V välillä -128 – 127.

Koko kuvan muuntamiseen käytä Image-luokan to_*-metodeja, jotka ovat paljon nopeampia kuin näiden apufunktioiden kutsuminen silmukassa.

image.binary_to_grayscale(value: int) int

Muuntaa binääriarvon harmaasävyarvoksi.

image.binary_to_rgb(value: int) Tuple[int, int, int]

Muuntaa binääriarvon RGB-monikoksi.

image.binary_to_lab(value: int) Tuple[int, int, int]

Muuntaa binääriarvon LAB-monikoksi.

image.binary_to_yuv(value: int) Tuple[int, int, int]

Muuntaa binääriarvon YUV-monikoksi.

image.grayscale_to_binary(value: int) int

Muuntaa harmaasävyarvon binääriarvoksi.

image.grayscale_to_rgb(value: int) Tuple[int, int, int]

Muuntaa harmaasävyarvon RGB-monikoksi.

image.grayscale_to_lab(value: int) Tuple[int, int, int]

Muuntaa harmaasävyarvon LAB-monikoksi.

image.grayscale_to_yuv(value: int) Tuple[int, int, int]

Muuntaa harmaasävyarvon YUV-monikoksi.

image.rgb_to_binary(value: Tuple[int, int, int]) int

Muuntaa RGB-monikon binääriarvoksi.

image.rgb_to_grayscale(value: Tuple[int, int, int]) int

Muuntaa RGB-monikon harmaasävyarvoksi.

image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa RGB-monikon LAB-monikoksi.

image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa RGB-monikon YUV-monikoksi.

image.lab_to_binary(value: Tuple[int, int, int]) int

Muuntaa LAB-monikon binääriarvoksi.

image.lab_to_grayscale(value: Tuple[int, int, int]) int

Muuntaa LAB-monikon harmaasävyarvoksi.

image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa LAB-monikon RGB-monikoksi.

image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa LAB-monikon YUV-monikoksi.

image.yuv_to_binary(value: Tuple[int, int, int]) int

Muuntaa YUV-monikon binääriarvoksi.

image.yuv_to_grayscale(value: Tuple[int, int, int]) int

Muuntaa YUV-monikon harmaasävyarvoksi.

image.yuv_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa YUV-monikon RGB-monikoksi.

image.yuv_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

Muuntaa YUV-monikon LAB-monikoksi.

Piirrekuvaajat

image.HaarCascade(path: str, stages: int = -1) Cascade

Lataa Haar-kaskadi ja palauttaa Cascade-kahvan käytettäväksi Image.find_features()-metodin kanssa.

path voi olla joko:

  • kirjaimellinen merkkijono "frontalface" tai "eye" ladatakseen toisen kahdesta laiteohjelmiston ROM-muistiin sisäänrakennetusta kaskadista, tai

  • tiedostojärjestelmäpolku mukautettuun .cascade-binääritiedostoon, joka on tuotettu OpenMV:n kaskadinmuunnostyökaluilla.

stages valitsee, kuinka monta kaskadivaihetta arvioidaan tunnistushetkellä. -1 käyttää jokaista tiedostoon tallennettua vaihetta. Tämän arvon pienentäminen nopeuttaa tunnistusta useampien väärien positiivisten tulosten kustannuksella.

image.load_descriptor(path: str) kp_desc | lbp_desc

Lataa kuvaajan tiedostosta polussa path ja palauttaa sen. Tiedoston sisäinen tyyppimerkintä valitsee, mikä kuvaajaluokka rekonstruoidaan:

image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None

Sarjallistaa argumentin descriptor (ORB-avainpiste- tai LBP-kuvaaja) tiedostoon polussa path OpenMV:n kuvaajatiedostomuodossa. Saman tiedoston voi myöhemmin ladata uudelleen image.load_descriptor()-metodilla.

image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch

Sovittaa kaksi samantyyppistä kuvaajaa.

  • Kahdelle LBP-kuvaajalle – palauttaa kokonaislukuna niiden välisen Hamming-etäisyyden (pienempi tarkoittaa lähempää osumaa).

  • Kahdelle ORB-avainpistekuvaajalle – palauttaa kptmatch-objektin, joka kuvaa sovitettujen avainpisteiden ryppään, tai None, jos mikään osuma ei ylitä arvoa threshold.

threshold (0 – 100) asettaa, kuinka tiukkaa ORB-sovitus on avainpisteparia hyväksyttäessä. Pienemmät arvot tiukentavat sovitusta hylkäämällä heikot lähimmän naapurin osumat.

filter_outliers ottaa käyttöön RANSAC-tyylisen poikkeavien arvojen hylkäyksen sovitettujen avainpisteiden joukossa. Käytä sitä, kun odotat yhtä jäykkää muunnosta kahden näkymän välillä; poista se käytöstä, kun sovitetut avainpisteet kattavat useita kohteita.

Blobin geometrian apufunktiot

Nämä apufunktiot ottavat Blob-objektin (sellaisena kuin Image.find_blobs() sen palauttaa) ja laskevat lisää geometrisia ominaisuuksia tarvittaessa. Ne sijaitsevat moduulitasolla – eivät Blob-luokassa – joten perustason find_blobs()-polku ei maksa niistä, ellet sitä pyydä.

image.get_solidity(blob: blob) float

Palauttaa argumentin blob jähmeyden (blob.pixels / convex_hull_area). Liukuluku, 0 – 1; 1.0 tarkoittaa, että blob täyttää konveksin verhonsa kokonaan.

image.get_convexity(blob: blob) float

Palauttaa argumentin blob konveksisuuden (convex_hull_perimeter / blob.perimeter). Liukuluku, 0 – 1; 1.0 on täysin konveksi blob.

image.get_major_axis_line(blob: blob) line

Palauttaa Line-objektin argumentin blob pääakselia pitkin (pienimmän pinta-alan kierretyn suorakulmion kahdesta pääakselista pidemmän).

image.get_minor_axis_line(blob: blob) line

Palauttaa Line-objektin argumentin blob sivuakselia pitkin (pienimmän pinta-alan kierretyn suorakulmion kahdesta pääakselista lyhyemmän).

image.get_enclosing_circle(blob: blob) circle

Palauttaa Circle-objektin, joka ympäröi argumentin blob.

image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]

Palauttaa 5-monikon (cx, cy, a, b, rotation), joka kuvaa argumentin blob ympärille piirretyn pienimmän pinta-alan kierretyn suorakulmion sisään asetetun ellipsin:

  • cx / cy – ellipsin keskipiste pikseleinä (kokonaisluku).

  • a / b – puoliakselien pituudet pikseleinä (kokonaisluku).

  • rotation – ellipsin kierto asteina (kokonaisluku).

Tämä on tavallinen monikko, ei attrtuple, joten kenttiin pääsee käsiksi vain indeksin perusteella.

Vakiot

Pikseliformaatit

Anna mikä tahansa seuraavista pixformat-argumenttina Image-konstruktorille tai csi.CSI.pixformat()-metodille.

image.BINARY: int

1 bitti pikseliä kohden -bittikartta. Pienin formaatti – sitä käyttävät sisäisesti kynnystys ja morfologia, sitä kaapataan harvoin suoraan sensorilta.

image.GRAYSCALE: int

8 bittiä pikseliä kohden -harmaasävy (yksi tavu pikseliä kohden). Nopein formaatti useimmille konenäköalgoritmeille (AprilTag, reunantunnistus, optinen virtaus).

image.RGB565: int

16 bittiä pikseliä kohden -väri pakattuna muotoon 5 bittiä punainen / 6 bittiä vihreä / 5 bittiä sininen. Oletusväriformaatti.

image.BAYER: int

8 bittiä pikseliä kohden -raaka Bayer-data suoraan sensorilta. Useimmat kuvankäsittelymetodit eivät ole käytettävissä Bayer-kuville; käytä tätä kun haluat debayeroida tarvittaessa tai tallentaa useampia pikseleitä pienempään muistiin.

image.YUV422: int

4:2:2-krominanssialinäytteistetty väri, kaksi tavua pikseliä kohden, pakattuna muotoon Y1, U, Y2, V pikseliparia kohden. Vain osa kuvankäsittelymetodeista toimii suoraan YUV422:n päällä.

image.JPEG: int

Pakattu JPEG-puskuri. Pikselitason operaatiot edellyttävät ensin Image.to_grayscale()- tai Image.to_rgb565()-kutsua.

image.PNG: int

Pakattu PNG-puskuri. Pikselitason operaatiot edellyttävät ensin Image.to_grayscale()- tai Image.to_rgb565()-kutsua.

Väripaletit

Anna mikä tahansa seuraavista Image.to_rainbow()-, Image.to_ironbow()- tai Image.draw_image()-metodille (color_palette=) tai csi.CSI.color_palette()-metodille värittääksesi harmaasävykuvan.

image.PALETTE_RAINBOW: int

Pehmeä sateenkaarivärikiekko. OpenMV:n oletuspaletti lämpökuville.

image.PALETTE_IRONBOW: int

Epälineaarinen ”ironbow”-paletti, joka jäljittelee FLIR Lepton -lämpökameran etsimen ulkoasua.

image.PALETTE_DEPTH: int

Syvyyskuvapaletti. Saatavilla vain käännöksissä, joissa on syvyyssensorituki (ToF-putki – esim. OpenMV Cam AE3 tai mikä tahansa kamera, johon on liitetty ToF Pmod).

image.PALETTE_EVT_DARK: int

Paletti GENX320-tapahtumakamerakehysten visualisointiin tummalla taustalla. Anna se csi.CSI.color_palette-metodille saadaksesi GENX320-ajurin tuottamaan väritetyt RGB565-kehykset histogrammitilassa, tai Image.draw_image()-metodille color_palette= värittäessäsi harmaasävyisen tapahtumakuvan.

Saatavilla vain käännöksissä, joissa on GENX320-tuki (OpenMV Cam AE3 ja GENX320 Pmod).

image.PALETTE_EVT_LIGHT: int

Paletti GENX320-tapahtumakamerakehysten visualisointiin vaalealla taustalla. Sama lähetyslogiikka ja saatavuus kuin PALETTE_EVT_DARK-paletilla.

Skaalaustilat

Anna mikä tahansa seuraavista hint-argumenttina Image.draw_image()-, Image.scale()- tai vastaaville skaalausmetodeille.

image.AREA: int

Pinta-alaa keskiarvoistava skaalain. Käytetään pienennettäessä; suurennettaessa käytetään lähimmän naapurin menetelmää.

image.BILINEAR: int

Bilineaarinen skaalain. Alinäytteistää pienennettäessä.

image.BICUBIC: int

Bikuubinen skaalain. Laadukkaampi kuin BILINEAR, mutta hitaampi. Alinäytteistää pienennettäessä.

Piirto- / draw_image-vihjeet

Yhdistä bittitason TAI-operaatiolla mikä tahansa näistä ja anna Image.draw_image()-metodin hint-argumenttina.

image.VFLIP: int

Kääntää lähteen pystysuunnassa piirron aikana.

image.HMIRROR: int

Peilaa lähteen vaakasuunnassa piirron aikana.

image.TRANSPOSE: int

Transponoi (vaihtaa x/y) lähteen piirron aikana.

image.CENTER: int

Keskittää lähteen kohteeseen. Mahdollisista eksplisiittisistä x/y-siirtymistä tulee tällöin siirtymiä keskeltä eikä vasemmasta yläkulmasta.

image.EXTRACT_RGB_CHANNEL_FIRST: int

Kun poimitaan RGB-kanava Image.draw_image()-metodilla, poimii kanavan ennen skaalausta. Ilman tätä vihjettä kanava poimitaan skaalauksen jälkeen.

image.APPLY_COLOR_PALETTE_FIRST: int

Kun käytetään väripalettia Image.draw_image()-metodilla, soveltaa paletin ennen skaalausta. Ilman tätä vihjettä paletti sovelletaan skaalauksen jälkeen.

image.SCALE_ASPECT_KEEP: int

Skaalaa lähteen mahtumaan kohteen sisään säilyttäen kuvasuhteen (lisää kirjekuoripalkit, kun suhteet eroavat).

image.SCALE_ASPECT_EXPAND: int

Skaalaa lähteen täyttämään kohteen säilyttäen kuvasuhteen (rajaa, kun suhteet eroavat).

image.SCALE_ASPECT_IGNORE: int

Skaalaa lähteen täyttämään kohteen kuvasuhdetta huomioimatta.

image.BLACK_BACKGROUND: int

Kertoo alfasekoituspolulle, että kohteen tiedetään olevan musta, jolloin se voi ohittaa kohdepikselin takaisinluvun. Nopeuttaa alfatehosteita juuri tyhjennetyissä puskureissa.

image.ROTATE_90: int

Pikakomento komennolle VFLIP | TRANSPOSE (kierto 90 astetta myötäpäivään).

image.ROTATE_180: int

Pikakomento komennolle HMIRROR | VFLIP (kierto 180 astetta).

image.ROTATE_270: int

Pikakomento komennolle HMIRROR | TRANSPOSE (kierto 270 astetta myötäpäivään).

JPEG-alinäytteistys

Anna mikä tahansa seuraavista subsampling-argumenttina Image.to_jpeg()-, Image.compress()- tai Image.save()-metodille JPEG:tä kirjoitettaessa.

image.JPEG_SUBSAMPLING_AUTO: int

Valitse krominanssin alinäytteistys automaattisesti JPEG-laatuasetuksen perusteella.

image.JPEG_SUBSAMPLING_444: int

Pakota 4:4:4-krominanssin alinäytteistys (ei krominanssin pakkausta).

image.JPEG_SUBSAMPLING_422: int

Pakota 4:2:2-krominanssin alinäytteistys. Suositeltavaa, kun MJPEG:tä striimataan kolmannen osapuolen videosoittimille, jotka käyttäytyvät virheellisesti 4:2:0:n kanssa.

image.JPEG_SUBSAMPLING_420: int

Pakota 4:2:0-krominanssin alinäytteistys.

Mallisovitus

Anna jompikumpi seuraavista search-argumenttina Image.find_template()-metodille.

image.SEARCH_EX: int

Tyhjentävä haku – arvioi jokaisen sijainnin kohdealueella. Hitain mutta takaa parhaan osuman löytymisen.

image.SEARCH_DS: int

Vinoneliöhaku – karkeasta hienoon etenevä haku, joka on paljon nopeampi kuin SEARCH_EX, mutta saattaa ohittaa globaalin optimin voimakkaasti itsensäkaltaisilla malleilla.

Reunantunnistus

Anna jompikumpi seuraavista algorithm-argumenttina Image.find_edges()-metodille.

image.EDGE_CANNY: int

Canny-reunantunnistin – gradientin suuruus + ei-maksimien vaimennus + hystereesi. Laadukkaampi, hitaampi.

image.EDGE_SIMPLE: int

Kynnystetty ylipäästösuodatinpohjainen reunantunnistin. Nopeampi, mutta tuottaa paksumpia ja kohinaisempia reunoja kuin EDGE_CANNY.

ORB-kulmantunnistimet

Anna jompikumpi seuraavista corner_detector-argumenttina Image.find_keypoints()-metodille.

image.CORNER_FAST: int

FAST-kulmantunnistin. Nopeampi kuin CORNER_AGAST, mutta epätarkempi.

image.CORNER_AGAST: int

AGAST-kulmantunnistin. Hitaampi kuin CORNER_FAST, mutta tuottaa vakaampia avainpisteitä.

AprilTag-perheet

Yhdistä bittitason TAI-operaatiolla mikä tahansa yhdistelmä seuraavista ja anna families-argumenttina Image.find_apriltags()-metodille. Jokainen perhe on portitettu omalla käännösvalinnallaan laiteohjelmistossa; tukemattomat perheet puuttuvat ajonaikana sen sijaan, että ne olisivat aina nolla.

image.TAG16H5: int

AprilTag 16h5 -perhe (30 uniikkia ID:tä, 0-bittinen virheenkorjaus).

image.TAG25H9: int

AprilTag 25h9 -perhe (35 uniikkia ID:tä, jopa 3-bittinen virheenkorjaus).

image.TAG36H10: int

AprilTag 36h10 -perhe (2320 uniikkia ID:tä, jopa 3-bittinen virheenkorjaus).

image.TAG36H11: int

AprilTag 36h11 -perhe (587 uniikkia ID:tä, jopa 4-bittinen virheenkorjaus). Yleisin perhe.

image.TAGCIRCLE21H7: int

AprilTag Circle21h7 -perhe.

image.TAGCIRCLE49H12: int

AprilTag Circle49h12 -perhe.

image.TAGCUSTOM48H12: int

AprilTag Custom48h12 -perhe.

image.TAGSTANDARD41H12: int

AprilTag Standard41h12 -perhe.

image.TAGSTANDARD52H13: int

AprilTag Standard52h13 -perhe.

Viivakoodisymboliikat

Arvot, jotka raportoidaan kentässä BarCode.type Image.find_barcodes()-metodin palauttamille merkinnöille.

image.EAN2: int

EAN-2-lisäviivakoodi.

image.EAN5: int

EAN-5-lisäviivakoodi.

image.EAN8: int

EAN-8-viivakoodi.

image.UPCE: int

UPC-E-viivakoodi.

image.ISBN10: int

ISBN-10-viivakoodi.

image.UPCA: int

UPC-A-viivakoodi.

image.EAN13: int

EAN-13-viivakoodi.

image.ISBN13: int

ISBN-13-viivakoodi.

image.I25: int

Interleaved 2-of-5 -viivakoodi.

image.DATABAR: int

GS1 DataBar -viivakoodi.

image.DATABAR_EXP: int

GS1 DataBar Expanded -viivakoodi.

image.CODABAR: int

Codabar-viivakoodi.

image.CODE39: int

Code 39 -viivakoodi.

image.PDF417: int

PDF417 2D -pinottu viivakoodi. Vakio on olemassa täydellisyyden vuoksi, mutta viivakoodidekooderi ei tällä hetkellä toteuta PDF417:ää – Image.find_barcodes() ei palauta tämäntyyppisiä tunnistuksia.

image.CODE93: int

Code 93 -viivakoodi.

image.CODE128: int

Code 128 -viivakoodi.