image --- visi mesin¶
Modul image adalah inti dari tumpukan visi mesin OpenMV. Modul ini mengekspos kelas Image -- buffer piksel dalam memori yang menjadi tempat beroperasinya setiap rutinitas gambar, penyaringan, transformasi, dan ekstraksi fitur -- bersama dengan objek hasil pendukung yang dikembalikan oleh rutinitas tersebut (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, ...) dan kelas pembantu yang digunakan untuk mengkonfigurasinya (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).
Mendapatkan Citra¶
Ada empat cara untuk mendapatkan Image ke dalam RAM:
Tangkapan langsung dari sensor kamera. Panggil
csi.CSI.snapshot()untuk menangkap bingkai berikutnya langsung ke dalam buffer bingkai;Imageyang dikembalikan merujuk ke buffer tersebut.Dari sebuah berkas. Berikan path ke konstruktor
Image(image.Image("/sd/photo.jpg")); format pada disk yang didukung adalah BMP, PPM/PGM, JPEG, PNG, dan format perekaman OpenMVImageIO.Dari ndarray. Berikan
ndarraybertipe float32 berukuran(h, w)atau(h, w, 3)ke konstruktorImage. Piksel diskalakan dari0.0 -- 255.0menjadi citra GRAYSCALE atau RGB565. Gunakan ini untuk membawa keluaran tensor dariml(atau pipelineulabapapun) kembali menjadi citra yang dapat digambar.Buffer kosong. Buat
Imagedengan ukuran dan format piksel tertentu (image.Image(320, 240, image.RGB565)) untuk digambar dari awal, atau digunakan sebagai permukaan sementara untuk aritmatika citra.
Format piksel¶
Setiap Image memiliki salah satu format piksel berikut; pilihan ini mengorbankan memori, biaya pemrosesan, dan algoritma apa yang dapat berjalan di atasnya. Gunakan BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG, atau PNG sebagai argumen pixformat saat membuat citra atau mengkonfigurasi sensor kamera:
BINARY (1 bpp) -- satu bit per piksel. Format paling kecil; digunakan secara internal oleh rutinitas ambang batas dan morfologi tetapi jarang ditangkap langsung dari sensor.
GRAYSCALE (8 bpp) -- satu byte per piksel (kanal Y dari YUV422). Format tercepat untuk sebagian besar algoritma computer vision (AprilTag, deteksi tepi, optical flow).
RGB565 (16 bpp) -- dua byte per piksel, merah 5-bit / hijau 6-bit / biru 5-bit. Format warna default.
BAYER (8 bpp) -- data warna pola Bayer mentah langsung dari sensor. Berguna untuk de-mosaicing kustom atau untuk menyimpan lebih banyak piksel dalam memori yang lebih sedikit sebelum melakukan debayering sesuai kebutuhan.
YUV422 (16 bpp) -- warna dengan chroma-subsampling 4:2:2, dua byte per piksel. Berguna ketika Anda menginginkan algoritma khusus kroma tanpa membayar biaya penuh RGB.
JPEG / PNG -- buffer terkompresi. Paling baik untuk penyimpanan dan transmisi jaringan. Operasi tingkat piksel memerlukan
Image.to_grayscale()atauImage.to_rgb565()terlebih dahulu.
Bekerja dengan hasil¶
Metode deteksi / ekstraksi fitur pada Image mengembalikan objek yang dapat Anda iterasi dan gabungkan -- panggilan Image.find_blobs() mengembalikan daftar Blob, panggilan Image.find_apriltags() mengembalikan daftar AprilTag, dll. Setiap kelas hasil mengekspos properti geometris dari deteksi (centroid, kotak pembatas, area, nilai kode, dll.) sehingga Anda dapat bertindak langsung atau meneruskannya kembali ke metode penggambaran (Image.draw_rectangle(), Image.draw_string(), ...).
Pembantu ruang warna¶
Modul ini juga mengekspos fungsi murni kecil untuk mengkonversi nilai piksel individual antara ruang warna binary / skala abu-abu / RGB / LAB / YUV. Ini berguna ketika Anda perlu mengkonversi nilai ambang batas atau entri palet di Python sebelum meneruskannya ke operasi citra -- untuk konversi citra penuh gunakan metode to_* dari kelas Image, yang jauh lebih cepat daripada memanggil pembantu ini dalam sebuah loop.
Kelas¶
- kelas Image -- Objek Image
- class ImageIO -- objek ImageIO
- class HaarCascade -- Deskriptor Fitur
- class Similarity -- Objek Similarity
- class Histogram -- Objek Histogram
- class Percentile -- Objek Percentile
- kelas Threshold -- Objek Threshold
- class Statistics -- Objek Statistics
- class Blob -- Objek Blob
- class Line -- objek Line
- class Circle -- Objek Circle
- class Rect -- Objek Rectangle
- class QRCode -- objek QRCode
- kelas AprilTag -- Objek AprilTag
- class DataMatrix -- Objek DataMatrix
- class BarCode -- Objek BarCode
- class Displacement -- Objek Displacement
- kelas kptmatch -- Objek Kecocokan Titik Kunci
Fungsi¶
Pembantu konversi ruang warna¶
Setiap fungsi X_to_Y di bawah ini melakukan konversi nilai piksel tunggal. Semuanya mengambil/mengembalikan nilai dalam rentang kanonik OpenMV:
binary --
int0 -- 1.grayscale --
int0 -- 255.RGB -- tupel
(r, g, b)dari bilangan bulat 8-bit (masing-masing 0 -- 255).LAB -- tupel
(l, a, b)denganLdalam 0 -- 100 danA/Bdalam -128 -- 127.YUV -- tupel
(y, u, v)denganYdalam 0 -- 255 danU/Vdalam -128 -- 127.
Untuk konversi citra penuh gunakan metode to_* dari kelas Image, yang jauh lebih cepat daripada memanggil pembantu ini dalam sebuah loop.
- image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konversi tupel RGB ke tupel LAB.
- image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konversi tupel RGB ke tupel YUV.
- image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konversi tupel LAB ke tupel RGB.
- image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]¶
Konversi tupel LAB ke tupel YUV.
Deskriptor fitur¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Muat Haar Cascade dan kembalikan handle
Cascadeuntuk digunakan denganImage.find_features().pathdapat berupa:string literal
"frontalface"atau"eye"untuk memuat salah satu dari dua cascade yang dimasukkan ke dalam ROM firmware, ataupath filesystem ke berkas biner
.cascadekustom yang dihasilkan oleh alat pengkonversi cascade OpenMV.
stagesmemilih berapa banyak tahap cascade yang akan dievaluasi saat deteksi.-1menggunakan setiap tahap yang tersimpan dalam berkas. Mengurangi nilai ini mempercepat deteksi dengan mengorbankan lebih banyak positif palsu.
- image.load_descriptor(path: str) kp_desc | lbp_desc¶
Muat deskriptor dari berkas di
pathdan kembalikan. Tag tipe internal berkas memilih kelas deskriptor mana yang direkonstruksi:Deskriptor titik kunci ORB -- disimpan oleh
Image.find_keypoints()diikuti denganimage.save_descriptor().Deskriptor LBP -- disimpan oleh
Image.find_lbp()diikuti denganimage.save_descriptor().
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
Serialisasi
descriptor(titik kunci ORB atau deskriptor LBP) ke berkas dipathdalam format berkas deskriptor OpenMV. Berkas yang sama dapat dimuat ulang nanti melaluiimage.load_descriptor().
- image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch¶
Cocokkan dua deskriptor dengan tipe yang sama.
Untuk dua deskriptor LBP -- mengembalikan jarak Hamming integer antara keduanya (lebih rendah berarti kecocokan lebih dekat).
Untuk dua deskriptor titik kunci ORB -- mengembalikan
kptmatchyang mendeskripsikan kluster titik kunci yang cocok, atauNonejika tidak ada kecocokan yang melewatithreshold.
threshold(0 -- 100) mengatur seberapa ketat pencocokan ORB saat menerima pasangan titik kunci. Nilai lebih rendah memperketat pencocokan dengan menolak kecocokan tetangga terdekat yang lemah.filter_outliersmengaktifkan penolakan outlier bergaya RANSAC di seluruh set titik kunci yang cocok. Gunakan ketika Anda mengharapkan satu transformasi kaku antara dua tampilan; nonaktifkan ketika titik kunci yang cocok mencakup beberapa objek.
Pembantu geometri blob¶
Pembantu ini mengambil Blob (seperti yang dikembalikan oleh Image.find_blobs()) dan menghitung properti geometris tambahan sesuai kebutuhan. Mereka berada di lingkup modul -- bukan di Blob -- sehingga path find_blobs() dasar tidak membayar untuk mereka kecuali Anda memintanya.
- image.get_solidity(blob: blob) float¶
Kembalikan soliditas (
blob.pixels / convex_hull_area) dariblob. Float, 0 -- 1; 1.0 berarti blob sepenuhnya mengisi convex hull-nya.
- image.get_convexity(blob: blob) float¶
Kembalikan konveksitas (
convex_hull_perimeter / blob.perimeter) dariblob. Float, 0 -- 1; 1.0 adalah blob yang sempurna cembung.
- image.get_major_axis_line(blob: blob) line¶
Kembalikan
Linesepanjang sumbu utama dariblob(yang lebih panjang dari dua sumbu utama persegi panjang berputar dengan area minimum).
- image.get_minor_axis_line(blob: blob) line¶
Kembalikan
Linesepanjang sumbu minor dariblob(yang lebih pendek dari dua sumbu utama persegi panjang berputar dengan area minimum).
- image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]¶
Kembalikan 5-tupel
(cx, cy, a, b, rotation)yang mendeskripsikan elips yang dituliskan dalam persegi panjang berputar dengan area minimum di sekitarblob:cx/cy-- pusat elips dalam piksel (integer).a/b-- panjang semi-sumbu dalam piksel (integer).rotation-- rotasi elips dalam derajat (integer).
Ini adalah tupel biasa, bukan attrtuple, sehingga field hanya dapat diakses melalui indeks.
Konstanta¶
Format piksel¶
Berikan salah satu dari berikut ini sebagai argumen pixformat ke konstruktor Image atau ke csi.CSI.pixformat().
- image.BINARY: int¶
Bitmap 1-bit-per-piksel. Format terkecil -- digunakan secara internal oleh ambang batas dan morfologi, jarang ditangkap langsung dari sensor.
- image.GRAYSCALE: int¶
Skala abu-abu 8-bit-per-piksel (satu byte per piksel). Format tercepat untuk sebagian besar algoritma computer vision (AprilTag, deteksi tepi, optical flow).
- image.RGB565: int¶
Warna 16-bit-per-piksel yang dikemas sebagai 5 bit merah / 6 bit hijau / 5 bit biru. Format warna default.
- image.BAYER: int¶
Data Bayer mentah 8-bit-per-piksel langsung dari sensor. Sebagian besar metode pemrosesan citra tidak tersedia pada citra Bayer; gunakan ini ketika Anda ingin melakukan debayering sesuai kebutuhan atau menyimpan lebih banyak piksel dalam memori yang lebih sedikit.
- image.YUV422: int¶
Warna dengan chroma-subsampling 4:2:2, dua byte per piksel, dikemas sebagai
Y1, U, Y2, Vper pasangan piksel. Hanya beberapa metode pemrosesan citra yang bekerja langsung pada YUV422.
- image.JPEG: int¶
Buffer JPEG terkompresi. Operasi tingkat piksel memerlukan
Image.to_grayscale()atauImage.to_rgb565()terlebih dahulu.
- image.PNG: int¶
Buffer PNG terkompresi. Operasi tingkat piksel memerlukan
Image.to_grayscale()atauImage.to_rgb565()terlebih dahulu.
Palet warna¶
Berikan salah satu dari berikut ini ke Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) atau ke csi.CSI.color_palette() untuk mewarnai citra skala abu-abu.
- image.PALETTE_IRONBOW: int¶
Palet "ironbow" non-linear yang meniru tampilan viewfinder termal FLIR Lepton.
- image.PALETTE_DEPTH: int¶
Palet citra kedalaman. Hanya tersedia pada build dengan dukungan sensor kedalaman (pipeline ToF -- misalnya OpenMV Cam AE3 atau kamera apapun dengan ToF Pmod yang terpasang).
- image.PALETTE_EVT_DARK: int¶
Palet untuk memvisualisasikan bingkai kamera event GENX320 pada latar belakang gelap. Berikan ke
csi.CSI.color_paletteagar driver GENX320 memancarkan bingkai RGB565 yang diwarnai dalam mode histogram, atau keImage.draw_image()color_palette=saat mewarnai citra event skala abu-abu.Hanya tersedia pada build dengan dukungan GENX320 (OpenMV Cam AE3 dan GENX320 Pmod).
- image.PALETTE_EVT_LIGHT: int¶
Palet untuk memvisualisasikan bingkai kamera event GENX320 pada latar belakang terang. Dispatch dan ketersediaan yang sama dengan
PALETTE_EVT_DARK.
Mode penskalaan¶
Berikan salah satu dari berikut ini sebagai argumen hint ke Image.draw_image(), Image.scale(), atau metode penskalaan serupa.
Petunjuk menggambar / draw_image¶
Bit-OR semua dari berikut ini bersama-sama dan berikan sebagai argumen hint dari Image.draw_image().
- image.CENTER: int¶
Pusatkan sumber pada destinasi. Offset x/y eksplisit kemudian menjadi offset dari pusat alih-alih dari kiri atas.
- image.EXTRACT_RGB_CHANNEL_FIRST: int¶
Saat mengekstrak kanal RGB melalui
Image.draw_image(), ekstrak kanal sebelum penskalaan. Tanpa petunjuk ini, kanal diekstrak setelah penskalaan.
- image.APPLY_COLOR_PALETTE_FIRST: int¶
Saat menerapkan palet warna melalui
Image.draw_image(), terapkan palet sebelum penskalaan. Tanpa petunjuk ini, palet diterapkan setelah penskalaan.
- image.SCALE_ASPECT_KEEP: int¶
Skalakan sumber agar sesuai di dalam destinasi sambil mempertahankan rasio aspek (letterboxes ketika rasio berbeda).
- image.SCALE_ASPECT_EXPAND: int¶
Skalakan sumber untuk mengisi destinasi sambil mempertahankan rasio aspek (memangkas ketika rasio berbeda).
Subsampling JPEG¶
Berikan salah satu dari berikut ini sebagai argumen subsampling ke Image.to_jpeg(), Image.compress(), atau Image.save() saat menulis JPEG.
- image.JPEG_SUBSAMPLING_AUTO: int¶
Pilih chroma subsampling secara otomatis berdasarkan pengaturan kualitas JPEG.
Pencocokan template¶
Berikan salah satu dari berikut ini sebagai argumen search ke Image.find_template().
Deteksi tepi¶
Berikan salah satu dari berikut ini sebagai argumen algorithm ke Image.find_edges().
- image.EDGE_CANNY: int¶
Detektor tepi Canny -- magnitudo gradien + penekanan non-maks + histeresis. Kualitas lebih tinggi, lebih lambat.
- image.EDGE_SIMPLE: int¶
Detektor tepi filter high-pass dengan ambang batas. Lebih cepat tetapi menghasilkan tepi yang lebih tebal dan lebih berisik daripada
EDGE_CANNY.
Detektor sudut ORB¶
Berikan salah satu dari berikut ini sebagai argumen corner_detector ke Image.find_keypoints().
- image.CORNER_FAST: int¶
Detektor sudut FAST. Lebih cepat dari
CORNER_AGASTtetapi kurang akurat.
- image.CORNER_AGAST: int¶
Detektor sudut AGAST. Lebih lambat dari
CORNER_FASTtetapi menghasilkan titik kunci yang lebih stabil.
Keluarga AprilTag¶
Bit-OR kombinasi apapun dari berikut ini dan berikan sebagai argumen families ke Image.find_apriltags(). Setiap keluarga dibatasi oleh opsi build-nya sendiri di firmware; keluarga yang tidak didukung tidak ada pada runtime daripada selalu bernilai nol.
Simbologi barcode¶
Nilai yang dilaporkan dalam BarCode.type untuk entri yang dikembalikan oleh Image.find_barcodes().
- image.PDF417: int¶
Barcode 2D bertumpuk PDF417. Konstanta ini ada untuk kelengkapan, tetapi decoder barcode saat ini tidak mengimplementasikan PDF417 --
Image.find_barcodes()tidak akan mengembalikan deteksi tipe ini.