image — maskinseende

Modulen image är hjärtat i OpenMV:s stack för maskinseende. Den exponerar klassen Image – pixelbufferten i minnet som alla rutiner för ritning, filtrering, transformation och särdragsextraktion arbetar på – tillsammans med de stödjande resultatobjekt som dessa rutiner returnerar (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) samt de hjälpklasser som används för att konfigurera dem (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).

Hämta en bild

Det finns fyra sätt att få in en Image i RAM:

  • Direktinfångning från kamerasensorn. Anropa csi.CSI.snapshot() för att fånga in nästa bildruta direkt till bildbufferten; den returnerade Image refererar till den bufferten.

  • Från en fil. Skicka en sökväg till konstruktorn för Image (image.Image("/sd/photo.jpg")); de format som stöds på disk är BMP, PPM/PGM, JPEG, PNG och OpenMV:s inspelningsformat ImageIO.

  • Från en ndarray. Skicka en float32 (h, w) eller (h, w, 3) ndarray till konstruktorn för Image. Pixlarna skalas från 0.0 -- 255.0 till en GRAYSCALE- respektive RGB565-bild. Använd detta för att föra tensorutdata från ml (eller någon ulab-pipeline) tillbaka till en ritbar bild.

  • Tom buffert. Konstruera en Image med en given storlek och ett pixelformat (image.Image(320, 240, image.RGB565)) att rita i från grunden, eller att använda som en arbetsyta för bildaritmetik.

Pixelformat

Varje Image har ett av följande pixelformat; valet är en avvägning mellan minne, processeringskostnad och vilka algoritmer som kan köras på det. Använd BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG eller PNG som argumentet pixformat när du konstruerar en bild eller konfigurerar kamerasensorn:

  • BINARY (1 bpp) – en bit per pixel. Det minsta formatet; används internt av tröskel- och morfologirutiner men fångas sällan in direkt från sensorn.

  • GRAYSCALE (8 bpp) – en byte per pixel (Y-kanalen i YUV422). Det snabbaste formatet för de flesta algoritmer för datorseende (AprilTag, kantdetektering, optiskt flöde).

  • RGB565 (16 bpp) – två byte per pixel, 5-bitars rött / 6-bitars grönt / 5-bitars blått. Standardfärgformatet.

  • BAYER (8 bpp) – rå färgdata i Bayer-mönster direkt från sensorn. Användbart för anpassad demosaicing eller för att lagra fler pixlar på mindre minne innan debayering på begäran.

  • YUV422 (16 bpp) – 4:2:2 kroma-subsamplad färg, två byte per pixel. Användbart när du vill köra kroma-specifika algoritmer utan att betala den fulla RGB-kostnaden.

  • JPEG / PNG – komprimerade buffertar. Bäst för lagring och nätverksöverföring. Operationer på pixelnivå kräver först Image.to_grayscale() eller Image.to_rgb565().

Arbeta med resultat

Metoderna för detektering / särdragsextraktion på Image returnerar objekt som du kan iterera över och kombinera – ett anrop till Image.find_blobs() returnerar en lista med Blob, ett anrop till Image.find_apriltags() returnerar en lista med AprilTag, osv. Varje resultatklass exponerar de geometriska egenskaperna för detekteringen (centroid, begränsningsruta, area, kodvärde, osv.) så att du kan agera på dem direkt eller skicka tillbaka dem till ritmetoder (Image.draw_rectangle(), Image.draw_string(), …).

Hjälpfunktioner för färgrymd

Modulen exponerar också små rena funktioner för att konvertera enskilda pixelvärden mellan färgrymderna binär / gråskala / RGB / LAB / YUV. Dessa är användbara när du behöver konvertera tröskelvärden eller palettposter i Python innan du skickar in dem i bildoperationer – för konvertering av hela bilder, använd to_*-metoderna på Image, som är mycket snabbare än att anropa dessa hjälpfunktioner i en loop.

Klasser

Funktioner

Hjälpfunktioner för färgrymdskonvertering

Var och en av X_to_Y-funktionerna nedan utför en enstaka pixelvärdeskonvertering. De tar/returnerar alla värden i OpenMV:s kanoniska intervall:

  • binär – int 0 – 1.

  • gråskala – int 0 – 255.

  • RGB – (r, g, b)-tupel med 8-bitars heltal (var och en 0 – 255).

  • LAB – (l, a, b)-tupel med L i 0 – 100 och A/B i -128 – 127.

  • YUV – (y, u, v)-tupel med Y i 0 – 255 och U/V i -128 – 127.

För konvertering av hela bilder, använd to_*-metoderna på Image, som är mycket snabbare än att anropa dessa hjälpfunktioner i en loop.

image.binary_to_grayscale(value: int) int

Konvertera ett binärt värde till ett gråskalevärde.

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

Konvertera ett binärt värde till en RGB-tupel.

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

Konvertera ett binärt värde till en LAB-tupel.

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

Konvertera ett binärt värde till en YUV-tupel.

image.grayscale_to_binary(value: int) int

Konvertera ett gråskalevärde till ett binärt värde.

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

Konvertera ett gråskalevärde till en RGB-tupel.

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

Konvertera ett gråskalevärde till en LAB-tupel.

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

Konvertera ett gråskalevärde till en YUV-tupel.

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

Konvertera en RGB-tupel till ett binärt värde.

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

Konvertera en RGB-tupel till ett gråskalevärde.

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

Konvertera en RGB-tupel till en LAB-tupel.

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

Konvertera en RGB-tupel till en YUV-tupel.

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

Konvertera en LAB-tupel till ett binärt värde.

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

Konvertera en LAB-tupel till ett gråskalevärde.

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

Konvertera en LAB-tupel till en RGB-tupel.

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

Konvertera en LAB-tupel till en YUV-tupel.

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

Konvertera en YUV-tupel till ett binärt värde.

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

Konvertera en YUV-tupel till ett gråskalevärde.

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

Konvertera en YUV-tupel till en RGB-tupel.

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

Konvertera en YUV-tupel till en LAB-tupel.

Särdragsdeskriptorer

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

Ladda en Haar Cascade och returnera ett Cascade-handtag för användning med Image.find_features().

path kan vara antingen:

  • den bokstavliga strängen "frontalface" eller "eye" för att ladda en av de två cascades som är inbakade i firmware-ROM, eller

  • en sökväg i filsystemet till en anpassad binär .cascade-fil som producerats av OpenMV:s cascade-konverteringsverktyg.

stages väljer hur många cascade-steg som ska utvärderas vid detektering. -1 använder varje steg som lagras i filen. Att minska detta värde snabbar upp detekteringen till priset av fler falska positiva.

image.load_descriptor(path: str) kp_desc | lbp_desc

Ladda en deskriptor från filen vid path och returnera den. Filens interna typtagg avgör vilken deskriptorklass som rekonstrueras:

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

Serialisera descriptor (en ORB-nyckelpunkts- eller LBP-deskriptor) till filen vid path i OpenMV:s deskriptorfilformat. Samma fil kan senare laddas in igen via image.load_descriptor().

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

Matcha två deskriptorer av samma typ.

  • För två LBP-deskriptorer – returnerar ett heltal för Hamming-avståndet mellan dem (lägre är en närmare matchning).

  • För två ORB-nyckelpunktsdeskriptorer – returnerar en kptmatch som beskriver klustret av matchade nyckelpunkter, eller None om ingen matchning klarar threshold.

threshold (0 – 100) anger hur strikt ORB-matchningen är när ett nyckelpunktspar accepteras. Lägre värden skärper matchningen genom att avvisa svaga närmaste-granne-matchningar.

filter_outliers aktiverar avvisning av avvikare i RANSAC-stil över mängden matchade nyckelpunkter. Använd det när du förväntar dig en enda stel transform mellan de två vyerna; inaktivera det när de matchade nyckelpunkterna spänner över flera objekt.

Hjälpfunktioner för blob-geometri

Dessa hjälpfunktioner tar en Blob (som returneras av Image.find_blobs()) och beräknar ytterligare geometriska egenskaper på begäran. De finns på modulnivå – inte på Blob – så den grundläggande find_blobs()-vägen betalar inte för dem om du inte ber om det.

image.get_solidity(blob: blob) float

Returnerar soliditeten (blob.pixels / convex_hull_area) för blob. Flyttal, 0 – 1; 1.0 betyder att bloben helt fyller sitt konvexa hölje.

image.get_convexity(blob: blob) float

Returnerar konvexiteten (convex_hull_perimeter / blob.perimeter) för blob. Flyttal, 0 – 1; 1.0 är en perfekt konvex blob.

image.get_major_axis_line(blob: blob) line

Returnerar en Line längs huvudaxeln för blob (den längre av de två huvudaxlarna i den roterade rektangeln med minsta area).

image.get_minor_axis_line(blob: blob) line

Returnerar en Line längs den mindre axeln för blob (den kortare av de två huvudaxlarna i den roterade rektangeln med minsta area).

image.get_enclosing_circle(blob: blob) circle

Returnerar en Circle som omsluter blob.

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

Returnerar en 5-tupel (cx, cy, a, b, rotation) som beskriver den ellips som är inskriven i den roterade rektangeln med minsta area runt blob:

  • cx / cy – ellipsens centrum i pixlar (heltal).

  • a / b – halvaxlarnas längder i pixlar (heltal).

  • rotation – ellipsens rotation i grader (heltal).

Detta är en vanlig tupel, inte en attrtuple, så fälten är endast åtkomliga via index.

Konstanter

Pixelformat

Skicka något av följande som argumentet pixformat till konstruktorn för Image eller till csi.CSI.pixformat().

image.BINARY: int

1-bit-per-pixel bitmapp. Det minsta formatet – används internt av tröskling och morfologi, fångas sällan in direkt från en sensor.

image.GRAYSCALE: int

8-bit-per-pixel gråskala (en byte per pixel). Det snabbaste formatet för de flesta algoritmer för datorseende (AprilTag, kantdetektering, optiskt flöde).

image.RGB565: int

16-bit-per-pixel färg packad som 5 bitar rött / 6 bitar grönt / 5 bitar blått. Standardfärgformatet.

image.BAYER: int

8-bit-per-pixel rå Bayer-data direkt från sensorn. De flesta bildbehandlingsmetoder är inte tillgängliga på Bayer-bilder; använd detta när du vill debayera på begäran eller lagra fler pixlar på mindre minne.

image.YUV422: int

4:2:2 kroma-subsamplad färg, två byte per pixel, packad som Y1, U, Y2, V per pixelpar. Endast vissa bildbehandlingsmetoder fungerar direkt på YUV422.

image.JPEG: int

Komprimerad JPEG-buffert. Operationer på pixelnivå kräver först Image.to_grayscale() eller Image.to_rgb565().

image.PNG: int

Komprimerad PNG-buffert. Operationer på pixelnivå kräver först Image.to_grayscale() eller Image.to_rgb565().

Färgpaletter

Skicka något av följande till Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) eller till csi.CSI.color_palette() för att färglägga en gråskalebild.

image.PALETTE_RAINBOW: int

Mjukt regnbågsfärghjul. OpenMV:s standardpalett för värmebilder.

image.PALETTE_IRONBOW: int

Icke-linjär ”ironbow”-palett som efterliknar utseendet hos FLIR Lepton-värmesökaren.

image.PALETTE_DEPTH: int

Djupbildspalett. Endast tillgänglig på byggen med stöd för djupsensor (ToF-pipelinen – t.ex. OpenMV Cam AE3 eller någon kamera med en ToF Pmod ansluten).

image.PALETTE_EVT_DARK: int

Palett för att visualisera bildrutor från GENX320-händelsekameran mot en mörk bakgrund. Skicka till csi.CSI.color_palette för att låta GENX320-drivrutinen sända ut färglagda RGB565-bildrutor i histogramläge, eller till Image.draw_image() color_palette= när en gråskalehändelsebild ska färgläggas.

Endast tillgänglig på byggen med GENX320-stöd (OpenMV Cam AE3 och GENX320 Pmod).

image.PALETTE_EVT_LIGHT: int

Palett för att visualisera bildrutor från GENX320-händelsekameran mot en ljus bakgrund. Samma utskick och tillgänglighet som PALETTE_EVT_DARK.

Skalningslägen

Skicka något av följande som argumentet hint till Image.draw_image(), Image.scale() eller liknande skalningsmetoder.

image.AREA: int

Skalare med ytmedelvärdesberäkning. Används vid nedskalning; Nearest-Neighbor används vid uppskalning.

image.BILINEAR: int

Bilinjär skalare. Subsamplar vid nedskalning.

image.BICUBIC: int

Bikubisk skalare. Högre kvalitet än BILINEAR men långsammare. Subsamplar vid nedskalning.

Tips för ritning / draw_image

Bit-OR:a ihop någon av dessa och skicka som argumentet hint till Image.draw_image().

image.VFLIP: int

Vänd källan vertikalt under ritning.

image.HMIRROR: int

Spegla källan horisontellt under ritning.

image.TRANSPOSE: int

Transponera (byt x/y) källan under ritning.

image.CENTER: int

Centrera källan på destinationen. Eventuella explicita x/y-förskjutningar blir då förskjutningar från centrum i stället för från övre vänstra hörnet.

image.EXTRACT_RGB_CHANNEL_FIRST: int

Vid extrahering av en RGB-kanal via Image.draw_image(), extrahera kanalen före skalning. Utan detta tips extraheras kanalen efter skalning.

image.APPLY_COLOR_PALETTE_FIRST: int

Vid tillämpning av en färgpalett via Image.draw_image(), tillämpa paletten före skalning. Utan detta tips tillämpas paletten efter skalning.

image.SCALE_ASPECT_KEEP: int

Skala källan så att den passar inuti destinationen med bibehållet bildförhållande (letterboxar när förhållandena skiljer sig åt).

image.SCALE_ASPECT_EXPAND: int

Skala källan så att den fyller destinationen med bibehållet bildförhållande (beskär när förhållandena skiljer sig åt).

image.SCALE_ASPECT_IGNORE: int

Skala källan så att den fyller destinationen, utan hänsyn till bildförhållande.

image.BLACK_BACKGROUND: int

Tala om för alfa-blandningsvägen att destinationen är känt svart så att den kan hoppa över återinläsningen av destinationspixeln. Snabbar upp alfaeffekter på nyligen rensade buffertar.

image.ROTATE_90: int

Genväg för VFLIP | TRANSPOSE (rotera 90 grader medurs).

image.ROTATE_180: int

Genväg för HMIRROR | VFLIP (rotera 180 grader).

image.ROTATE_270: int

Genväg för HMIRROR | TRANSPOSE (rotera 270 grader medurs).

JPEG-subsampling

Skicka något av följande som argumentet subsampling till Image.to_jpeg(), Image.compress() eller Image.save() när en JPEG skrivs.

image.JPEG_SUBSAMPLING_AUTO: int

Välj kroma-subsampling automatiskt baserat på JPEG-kvalitetsinställningen.

image.JPEG_SUBSAMPLING_444: int

Tvinga 4:4:4 kroma-subsampling (ingen kromakomprimering).

image.JPEG_SUBSAMPLING_422: int

Tvinga 4:2:2 kroma-subsampling. Rekommenderas när du strömmar MJPEG till tredjeparts videospelare som beter sig fel med 4:2:0.

image.JPEG_SUBSAMPLING_420: int

Tvinga 4:2:0 kroma-subsampling.

Mallmatchning

Skicka något av följande som argumentet search till Image.find_template().

image.SEARCH_EX: int

Uttömmande sökning – utvärderar varje position i ROI:n. Långsammast men garanterat att hitta den bästa matchningen.

image.SEARCH_DS: int

Diamantsökning – grov-till-fin sökning som är mycket snabbare än SEARCH_EX men kan missa det globala optimumet på mallar som är starkt självlika.

Kantdetektering

Skicka något av följande som argumentet algorithm till Image.find_edges().

image.EDGE_CANNY: int

Canny-kantdetektor – gradientmagnitud + icke-max-undertryckning + hysteres. Högre kvalitet, långsammare.

image.EDGE_SIMPLE: int

Tröskelbaserad kantdetektor med högpassfilter. Snabbare men producerar tjockare, brusigare kanter än EDGE_CANNY.

ORB-hörndetektorer

Skicka något av följande som argumentet corner_detector till Image.find_keypoints().

image.CORNER_FAST: int

FAST-hörndetektor. Snabbare än CORNER_AGAST men mindre exakt.

image.CORNER_AGAST: int

AGAST-hörndetektor. Långsammare än CORNER_FAST men producerar stabilare nyckelpunkter.

AprilTag-familjer

Bit-OR:a valfri kombination av följande och skicka som argumentet families till Image.find_apriltags(). Varje familj är villkorad av sin egen byggalternativ i firmware; familjer som inte stöds saknas vid körning i stället för att alltid vara noll.

image.TAG16H5: int

AprilTag-familjen 16h5 (30 unika ID:n, 0-bitars felkorrigering).

image.TAG25H9: int

AprilTag-familjen 25h9 (35 unika ID:n, upp till 3-bitars felkorrigering).

image.TAG36H10: int

AprilTag-familjen 36h10 (2320 unika ID:n, upp till 3-bitars felkorrigering).

image.TAG36H11: int

AprilTag-familjen 36h11 (587 unika ID:n, upp till 4-bitars felkorrigering). Den vanligaste familjen.

image.TAGCIRCLE21H7: int

AprilTag-familjen Circle21h7.

image.TAGCIRCLE49H12: int

AprilTag-familjen Circle49h12.

image.TAGCUSTOM48H12: int

AprilTag-familjen Custom48h12.

image.TAGSTANDARD41H12: int

AprilTag-familjen Standard41h12.

image.TAGSTANDARD52H13: int

AprilTag-familjen Standard52h13.

Streckkodssymboliker

De värden som rapporteras i BarCode.type för poster som returneras av Image.find_barcodes().

image.EAN2: int

EAN-2 tilläggsstreckkod.

image.EAN5: int

EAN-5 tilläggsstreckkod.

image.EAN8: int

EAN-8-streckkod.

image.UPCE: int

UPC-E-streckkod.

image.ISBN10: int

ISBN-10-streckkod.

image.UPCA: int

UPC-A-streckkod.

image.EAN13: int

EAN-13-streckkod.

image.ISBN13: int

ISBN-13-streckkod.

image.I25: int

Interleaved 2-of-5-streckkod.

image.DATABAR: int

GS1 DataBar-streckkod.

image.DATABAR_EXP: int

GS1 DataBar Expanded-streckkod.

image.CODABAR: int

Codabar-streckkod.

image.CODE39: int

Code 39-streckkod.

image.PDF417: int

PDF417 2D-staplad streckkod. Konstanten finns för fullständighetens skull, men streckkodsavkodaren implementerar för närvarande inte PDF417 – Image.find_barcodes() returnerar inte detekteringar av denna typ.

image.CODE93: int

Code 93-streckkod.

image.CODE128: int

Code 128-streckkod.