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.