image — makine görüşü

image modülü, OpenMV makine görüşü yığınının kalbidir. Her çizim, filtreleme, dönüşüm ve öznitelik çıkarma rutininin üzerinde çalıştığı bellek içi piksel arabelleği olan Image sınıfını – bu rutinlerin döndürdüğü destekleyici sonuç nesneleriyle (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, …) ve bunları yapılandırmak için kullanılan yardımcı sınıflarla (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO) birlikte – açığa çıkarır.

Bir Görüntü Edinme

RAM’e bir Image getirmenin dört yolu vardır:

  • Kamera sensöründen canlı yakalama. Bir sonraki çerçeveyi doğrudan çerçeve arabelleğine (frame buffer) yakalamak için csi.CSI.snapshot() çağrısını kullanın; döndürülen Image o arabelleğe referans verir.

  • Bir dosyadan. Image yapıcısına bir yol geçirin (image.Image("/sd/photo.jpg")); diskte desteklenen biçimler BMP, PPM/PGM, JPEG, PNG ve OpenMV ImageIO kayıt biçimidir.

  • Bir ndarray’den. Image yapıcısına bir float32 (h, w) veya (h, w, 3) ndarray geçirin. Pikseller 0.0 -- 255.0 aralığından sırasıyla bir GRAYSCALE veya RGB565 görüntüye ölçeklenir. Bunu, ml (ya da herhangi bir ulab ardışık düzeni) çıktısı olan tensörü çizilebilir bir görüntüye geri getirmek için kullanın.

  • Boş arabellek. Sıfırdan çizim yapmak ya da görüntü aritmetiği için bir çalışma yüzeyi olarak kullanmak üzere belirli bir boyut ve piksel biçimiyle (image.Image(320, 240, image.RGB565)) bir Image oluşturun.

Piksel biçimleri

Her Image, aşağıdaki piksel biçimlerinden birine sahiptir; bu seçim bellek, işleme maliyeti ve üzerinde hangi algoritmaların çalışabileceği arasında bir ödünleşim sağlar. Bir görüntü oluştururken veya kamera sensörünü yapılandırırken pixformat argümanı olarak BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG veya PNG kullanın:

  • BINARY (1 bpp) – piksel başına bir bit. En küçük biçim; eşikleme ve morfoloji rutinleri tarafından dahili olarak kullanılır ancak nadiren doğrudan sensörden yakalanır.

  • GRAYSCALE (8 bpp) – piksel başına bir bayt (YUV422’nin Y kanalı). Çoğu makine görüşü algoritması (AprilTag, kenar tespiti, optik akış) için en hızlı biçim.

  • RGB565 (16 bpp) – piksel başına iki bayt, 5 bit kırmızı / 6 bit yeşil / 5 bit mavi. Varsayılan renk biçimi.

  • BAYER (8 bpp) – doğrudan sensörden gelen ham Bayer desenli renk verisi. Özel bir de-mozaikleme için ya da istenildiğinde debayer işlemi yapmadan önce daha az bellekte daha fazla piksel saklamak için yararlıdır.

  • YUV422 (16 bpp) – 4:2:2 kroma alt örneklemeli renk, piksel başına iki bayt. Tam RGB maliyetini ödemeden kroma’ya özgü algoritmalar istediğinizde yararlıdır.

  • JPEG / PNG – sıkıştırılmış arabellekler. Depolama ve ağ iletimi için en uygun olanlar. Piksel düzeyindeki işlemler önce Image.to_grayscale() veya Image.to_rgb565() gerektirir.

Sonuçlarla çalışma

Image üzerindeki tespit / öznitelik çıkarma yöntemleri, üzerinde yineleme yapabileceğiniz ve birleştirebileceğiniz nesneler döndürür – bir Image.find_blobs() çağrısı bir Blob listesi, bir Image.find_apriltags() çağrısı bir AprilTag listesi döndürür vb. Her sonuç sınıfı, tespitin geometrik özelliklerini (ağırlık merkezi, sınırlayıcı kutu, alan, kod değeri vb.) açığa çıkarır; böylece bunlar üzerinde doğrudan işlem yapabilir ya da onları çizim yöntemlerine (Image.draw_rectangle(), Image.draw_string(), …) geri geçirebilirsiniz.

Renk uzayı yardımcıları

Modül ayrıca, tek tek piksel değerlerini binary / grayscale / RGB / LAB / YUV renk uzayları arasında dönüştürmek için küçük saf fonksiyonlar da açığa çıkarır. Bunlar, eşik değerlerini veya palet girdilerini görüntü işlemlerine geçirmeden önce Python içinde dönüştürmeniz gerektiğinde yararlıdır – tam görüntü dönüşümü için, bu yardımcıları bir döngüde çağırmaktan çok daha hızlı olan Image to_* yöntemlerini kullanın.

Sınıflar

Fonksiyonlar

Renk uzayı dönüşüm yardımcıları

Aşağıdaki X_to_Y fonksiyonlarının her biri tek bir piksel değeri dönüşümü gerçekleştirir. Hepsi, değerleri kanonik OpenMV aralıklarında alır/döndürür:

  • binary – int 0 – 1.

  • grayscale – int 0 – 255.

  • RGB – 8 bit tam sayılardan (her biri 0 – 255) oluşan (r, g, b) demeti.

  • LAB – L değeri 0 – 100 ve A/B değerleri -128 – 127 aralığında olan (l, a, b) demeti.

  • YUV – Y değeri 0 – 255 ve U/V değerleri -128 – 127 aralığında olan (y, u, v) demeti.

Tam görüntü dönüşümü için, bu yardımcıları bir döngüde çağırmaktan çok daha hızlı olan Image to_* yöntemlerini kullanın.

image.binary_to_grayscale(value: int) int

Bir binary değerini bir grayscale değerine dönüştürür.

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

Bir binary değerini bir RGB demetine dönüştürür.

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

Bir binary değerini bir LAB demetine dönüştürür.

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

Bir binary değerini bir YUV demetine dönüştürür.

image.grayscale_to_binary(value: int) int

Bir grayscale değerini bir binary değerine dönüştürür.

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

Bir grayscale değerini bir RGB demetine dönüştürür.

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

Bir grayscale değerini bir LAB demetine dönüştürür.

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

Bir grayscale değerini bir YUV demetine dönüştürür.

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

Bir RGB demetini bir binary değerine dönüştürür.

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

Bir RGB demetini bir grayscale değerine dönüştürür.

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

Bir RGB demetini bir LAB demetine dönüştürür.

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

Bir RGB demetini bir YUV demetine dönüştürür.

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

Bir LAB demetini bir binary değerine dönüştürür.

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

Bir LAB demetini bir grayscale değerine dönüştürür.

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

Bir LAB demetini bir RGB demetine dönüştürür.

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

Bir LAB demetini bir YUV demetine dönüştürür.

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

Bir YUV demetini bir binary değerine dönüştürür.

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

Bir YUV demetini bir grayscale değerine dönüştürür.

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

Bir YUV demetini bir RGB demetine dönüştürür.

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

Bir YUV demetini bir LAB demetine dönüştürür.

Öznitelik tanımlayıcıları

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

Bir Haar Cascade yükler ve Image.find_features() ile kullanmak üzere bir Cascade tutamacı döndürür.

path şunlardan biri olabilir:

  • aygıt yazılımı (firmware) ROM’una gömülü iki kademeli sınıflandırıcıdan birini yüklemek için "frontalface" veya "eye" düz dizesi ya da

  • OpenMV kademeli sınıflandırıcı dönüştürücü araçları tarafından üretilen özel bir .cascade ikili dosyasına ait bir dosya sistemi yolu.

stages, tespit anında kaç kademenin değerlendirileceğini seçer. -1 dosyada saklanan her kademeyi kullanır. Bu değeri azaltmak, daha fazla yanlış pozitif pahasına tespiti hızlandırır.

image.load_descriptor(path: str) kp_desc | lbp_desc

path konumundaki dosyadan bir tanımlayıcı yükler ve onu döndürür. Dosyanın dahili tür etiketi, hangi tanımlayıcı sınıfının yeniden oluşturulacağını seçer:

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

descriptor değerini (bir ORB anahtar nokta veya LBP tanımlayıcısı) OpenMV tanımlayıcı dosya biçiminde path konumundaki dosyaya seri hale getirir. Aynı dosya daha sonra image.load_descriptor() aracılığıyla yeniden yüklenebilir.

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

Aynı türden iki tanımlayıcıyı eşleştirir.

  • İki LBP tanımlayıcısı için – aralarındaki tam sayı bir Hamming uzaklığını döndürür (düşük olan daha yakın bir eşleşmedir).

  • İki ORB anahtar nokta tanımlayıcısı için – eşleşen anahtar nokta kümesini tanımlayan bir kptmatch döndürür ya da threshold değerini geçen bir eşleşme yoksa None döndürür.

threshold (0 – 100), bir anahtar nokta çifti kabul edilirken ORB eşleştirmesinin ne kadar katı olacağını ayarlar. Düşük değerler, zayıf en yakın komşu eşleşmelerini reddederek eşleştirmeyi daraltır.

filter_outliers, eşleşen anahtar noktalar kümesi genelinde RANSAC tarzı aykırı değer reddini etkinleştirir. İki görünüm arasında tek bir katı dönüşüm beklediğinizde kullanın; eşleşen anahtar noktalar birden çok nesneye yayıldığında devre dışı bırakın.

Nokta (blob) geometri yardımcıları

Bu yardımcılar bir Blob alır (Image.find_blobs() tarafından döndürüldüğü gibi) ve istenildiğinde ek geometrik özellikler hesaplar. Bunlar modül kapsamında yer alır – Blob üzerinde değil – böylece temel find_blobs() yolu, siz istemedikçe bunların maliyetini ödemez.

image.get_solidity(blob: blob) float

blob öğesinin katılığını (blob.pixels / convex_hull_area) döndürür. Kayan nokta, 0 – 1; 1.0, noktanın dışbükey gövdesini tamamen doldurduğu anlamına gelir.

image.get_convexity(blob: blob) float

blob öğesinin dışbükeyliğini (convex_hull_perimeter / blob.perimeter) döndürür. Kayan nokta, 0 – 1; 1.0 mükemmel dışbükey bir noktadır.

image.get_major_axis_line(blob: blob) line

blob öğesinin ana ekseni boyunca bir Line döndürür (minimum alanlı döndürülmüş dikdörtgenin iki temel ekseninden daha uzun olanı).

image.get_minor_axis_line(blob: blob) line

blob öğesinin yan ekseni boyunca bir Line döndürür (minimum alanlı döndürülmüş dikdörtgenin iki temel ekseninden daha kısa olanı).

image.get_enclosing_circle(blob: blob) circle

blob öğesini çevreleyen bir Circle döndürür.

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

blob çevresindeki minimum alanlı döndürülmüş dikdörtgenin içine yerleştirilmiş elipsi tanımlayan bir 5’li demet (cx, cy, a, b, rotation) döndürür:

  • cx / cy – piksel cinsinden elips merkezi (tam sayı).

  • a / b – piksel cinsinden yarı eksen uzunlukları (tam sayı).

  • rotationderece cinsinden elips dönüşü (tam sayı).

Bu, bir attrtuple değil düz bir demettir; bu nedenle alanlara yalnızca indeks ile erişilebilir.

Sabitler

Piksel biçimleri

Aşağıdakilerden herhangi birini Image yapıcısına ya da csi.CSI.pixformat() öğesine pixformat argümanı olarak geçirin.

image.BINARY: int

Piksel başına 1 bit bitmap. En küçük biçim – eşikleme ve morfoloji tarafından dahili olarak kullanılır, nadiren doğrudan bir sensörden yakalanır.

image.GRAYSCALE: int

Piksel başına 8 bit grayscale (piksel başına bir bayt). Çoğu makine görüşü algoritması (AprilTag, kenar tespiti, optik akış) için en hızlı biçim.

image.RGB565: int

5 bit kırmızı / 6 bit yeşil / 5 bit mavi olarak paketlenmiş piksel başına 16 bit renk. Varsayılan renk biçimi.

image.BAYER: int

Doğrudan sensörden gelen piksel başına 8 bit ham Bayer verisi. Çoğu görüntü işleme yöntemi Bayer görüntülerinde kullanılamaz; istenildiğinde debayer işlemi yapmak ya da daha az bellekte daha fazla piksel saklamak istediğinizde bunu kullanın.

image.YUV422: int

4:2:2 kroma alt örneklemeli renk, piksel başına iki bayt, piksel çifti başına Y1, U, Y2, V olarak paketlenmiş. YUV422 üzerinde yalnızca bazı görüntü işleme yöntemleri doğrudan çalışır.

image.JPEG: int

Sıkıştırılmış JPEG arabelleği. Piksel düzeyindeki işlemler önce Image.to_grayscale() veya Image.to_rgb565() gerektirir.

image.PNG: int

Sıkıştırılmış PNG arabelleği. Piksel düzeyindeki işlemler önce Image.to_grayscale() veya Image.to_rgb565() gerektirir.

Renk paletleri

Bir grayscale görüntüyü renklendirmek için aşağıdakilerden herhangi birini Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) ya da csi.CSI.color_palette() öğesine geçirin.

image.PALETTE_RAINBOW: int

Yumuşak gökkuşağı renk çarkı. Termal görüntüleme için varsayılan OpenMV paleti.

image.PALETTE_IRONBOW: int

FLIR Lepton termal vizörünün görünümünü taklit eden doğrusal olmayan “ironbow” paleti.

image.PALETTE_DEPTH: int

Derinlik görüntüsü paleti. Yalnızca derinlik sensörü desteğine sahip yapılarda kullanılabilir (ToF ardışık düzeni – ör. OpenMV Cam AE3 ya da ToF Pmod takılı herhangi bir kamera).

image.PALETTE_EVT_DARK: int

GENX320 olay kamerası çerçevelerini koyu bir arka plan üzerinde görselleştirmeye yönelik palet. GENX320 sürücüsünün histogram modunda renklendirilmiş RGB565 çerçeveler yaymasını sağlamak için csi.CSI.color_palette öğesine, ya da bir grayscale olay görüntüsünü renklendirirken Image.draw_image() color_palette= öğesine geçirin.

Yalnızca GENX320 desteğine sahip yapılarda kullanılabilir (OpenMV Cam AE3 ve GENX320 Pmod).

image.PALETTE_EVT_LIGHT: int

GENX320 olay kamerası çerçevelerini açık bir arka plan üzerinde görselleştirmeye yönelik palet. PALETTE_EVT_DARK ile aynı dağıtım ve kullanılabilirliğe sahiptir.

Ölçekleme modları

Aşağıdakilerden herhangi birini Image.draw_image(), Image.scale() ya da benzeri ölçekleme yöntemlerine hint argümanı olarak geçirin.

image.AREA: int

Alan ortalamalı ölçekleyici. Küçültme sırasında kullanılır; büyütme için Nearest-Neighbor kullanılır.

image.BILINEAR: int

Çift doğrusal ölçekleyici. Küçültme sırasında alt örnekleme yapar.

image.BICUBIC: int

Çift kübik ölçekleyici. BILINEAR öğesinden daha yüksek kaliteli ancak daha yavaştır. Küçültme sırasında alt örnekleme yapar.

Çizim / draw_image ipuçları

Bunlardan herhangi birini bit-OR ile birleştirip Image.draw_image() öğesinin hint argümanı olarak geçirin.

image.VFLIP: int

Çizim sırasında kaynağı dikey olarak çevirir.

image.HMIRROR: int

Çizim sırasında kaynağı yatay olarak aynalar.

image.TRANSPOSE: int

Çizim sırasında kaynağın yerini değiştirir (x/y değiştir).

image.CENTER: int

Kaynağı hedef üzerinde ortalar. Açıkça belirtilen x/y kaymaları, o zaman sol üst yerine merkezden kaymalar haline gelir.

image.EXTRACT_RGB_CHANNEL_FIRST: int

Image.draw_image() aracılığıyla bir RGB kanalı çıkarırken, kanalı ölçeklemeden önce çıkarır. Bu ipucu olmadan, kanal ölçeklemeden sonra çıkarılır.

image.APPLY_COLOR_PALETTE_FIRST: int

Image.draw_image() aracılığıyla bir renk paleti uygularken, paleti ölçeklemeden önce uygular. Bu ipucu olmadan, palet ölçeklemeden sonra uygulanır.

image.SCALE_ASPECT_KEEP: int

En boy oranını koruyarak kaynağı hedefin içine sığacak şekilde ölçekler (oranlar farklı olduğunda letterbox uygular).

image.SCALE_ASPECT_EXPAND: int

En boy oranını koruyarak kaynağı hedefi dolduracak şekilde ölçekler (oranlar farklı olduğunda kırpar).

image.SCALE_ASPECT_IGNORE: int

En boy oranını yok sayarak kaynağı hedefi dolduracak şekilde ölçekler.

image.BLACK_BACKGROUND: int

Alfa karıştırma yoluna hedefin bilindiği gibi siyah olduğunu, böylece hedef pikselin geri okunmasını atlayabileceğini söyler. Yeni temizlenmiş arabelleklerde alfa efektlerini hızlandırır.

image.ROTATE_90: int

VFLIP | TRANSPOSE için kısayol (saat yönünde 90 derece döndürür).

image.ROTATE_180: int

HMIRROR | VFLIP için kısayol (180 derece döndürür).

image.ROTATE_270: int

HMIRROR | TRANSPOSE için kısayol (saat yönünde 270 derece döndürür).

JPEG alt örnekleme

Bir JPEG yazarken aşağıdakilerden herhangi birini Image.to_jpeg(), Image.compress() ya da Image.save() öğesine subsampling argümanı olarak geçirin.

image.JPEG_SUBSAMPLING_AUTO: int

Kroma alt örneklemesini JPEG kalite ayarına göre otomatik olarak seçer.

image.JPEG_SUBSAMPLING_444: int

4:4:4 kroma alt örneklemesini zorlar (kroma sıkıştırması yok).

image.JPEG_SUBSAMPLING_422: int

4:2:2 kroma alt örneklemesini zorlar. 4:2:0 ile sorun yaşayan üçüncü taraf video oynatıcılara MJPEG akışı gönderirken önerilir.

image.JPEG_SUBSAMPLING_420: int

4:2:0 kroma alt örneklemesini zorlar.

Şablon eşleştirme

Aşağıdakilerden birini Image.find_template() öğesine search argümanı olarak geçirin.

image.SEARCH_EX: int

Kapsamlı arama – ROI’deki her konumu değerlendirir. En yavaş olanı ancak en iyi eşleşmeyi bulmayı garanti eder.

image.SEARCH_DS: int

Elmas arama – SEARCH_EX öğesinden çok daha hızlı olan kabadan inceye arama, ancak yüksek derecede kendine benzeyen şablonlarda küresel optimumu kaçırabilir.

Kenar tespiti

Aşağıdakilerden birini Image.find_edges() öğesine algorithm argümanı olarak geçirin.

image.EDGE_CANNY: int

Canny kenar tespitçisi – gradyan büyüklüğü + maksimum olmayanların bastırılması + histerezis. Daha yüksek kalite, daha yavaş.

image.EDGE_SIMPLE: int

Eşiklenmiş yüksek geçiren filtre kenar tespitçisi. Daha hızlıdır ancak EDGE_CANNY öğesinden daha kalın, daha gürültülü kenarlar üretir.

ORB köşe tespitçileri

Aşağıdakilerden birini Image.find_keypoints() öğesine corner_detector argümanı olarak geçirin.

image.CORNER_FAST: int

FAST köşe tespitçisi. CORNER_AGAST öğesinden daha hızlı ancak daha az doğrudur.

image.CORNER_AGAST: int

AGAST köşe tespitçisi. CORNER_FAST öğesinden daha yavaş ancak daha kararlı anahtar noktalar üretir.

AprilTag aileleri

Aşağıdakilerin herhangi bir kombinasyonunu bit-OR ile birleştirip Image.find_apriltags() öğesine families argümanı olarak geçirin. Her aile, aygıt yazılımındaki (firmware) kendi yapı seçeneğiyle denetlenir; desteklenmeyen aileler her zaman sıfır olmak yerine çalışma zamanında bulunmaz.

image.TAG16H5: int

AprilTag 16h5 ailesi (30 benzersiz ID, 0 bit hata düzeltme).

image.TAG25H9: int

AprilTag 25h9 ailesi (35 benzersiz ID, 3 bite kadar hata düzeltme).

image.TAG36H10: int

AprilTag 36h10 ailesi (2320 benzersiz ID, 3 bite kadar hata düzeltme).

image.TAG36H11: int

AprilTag 36h11 ailesi (587 benzersiz ID, 4 bite kadar hata düzeltme). En yaygın aile.

image.TAGCIRCLE21H7: int

AprilTag Circle21h7 ailesi.

image.TAGCIRCLE49H12: int

AprilTag Circle49h12 ailesi.

image.TAGCUSTOM48H12: int

AprilTag Custom48h12 ailesi.

image.TAGSTANDARD41H12: int

AprilTag Standard41h12 ailesi.

image.TAGSTANDARD52H13: int

AprilTag Standard52h13 ailesi.

Barkod simgelemleri

Image.find_barcodes() tarafından döndürülen girdiler için BarCode.type içinde bildirilen değerler.

image.EAN2: int

EAN-2 ek barkodu.

image.EAN5: int

EAN-5 ek barkodu.

image.EAN8: int

EAN-8 barkodu.

image.UPCE: int

UPC-E barkodu.

image.ISBN10: int

ISBN-10 barkodu.

image.UPCA: int

UPC-A barkodu.

image.EAN13: int

EAN-13 barkodu.

image.ISBN13: int

ISBN-13 barkodu.

image.I25: int

Araya yerleştirilmiş 2-of-5 barkodu.

image.DATABAR: int

GS1 DataBar barkodu.

image.DATABAR_EXP: int

GS1 DataBar Expanded barkodu.

image.CODABAR: int

Codabar barkodu.

image.CODE39: int

Code 39 barkodu.

image.PDF417: int

PDF417 2D yığılmış barkod. Sabit, bütünlük amacıyla mevcuttur ancak barkod kod çözücü şu anda PDF417’yi uygulamaz – Image.find_barcodes() bu türden tespitler döndürmeyecektir.

image.CODE93: int

Code 93 barkodu.

image.CODE128: int

Code 128 barkodu.