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ülenImageo arabelleğe referans verir.Bir dosyadan.
Imageyapıcısına bir yol geçirin (image.Image("/sd/photo.jpg")); diskte desteklenen biçimler BMP, PPM/PGM, JPEG, PNG ve OpenMVImageIOkayıt biçimidir.Bir ndarray’den.
Imageyapıcısına bir float32(h, w)veya(h, w, 3)ndarraygeçirin. Pikseller0.0 -- 255.0aralığından sırasıyla bir GRAYSCALE veya RGB565 görüntüye ölçeklenir. Bunu,ml(ya da herhangi birulabardışı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)) birImageoluş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()veyaImage.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¶
- class Image – Image nesnesi
- class ImageIO – ImageIO nesnesi
- class HaarCascade – Öznitelik Tanımlayıcısı
- class Similarity – Benzerlik Nesnesi
- class Histogram – Histogram Nesnesi
- class Percentile – Percentile Nesnesi
- class Threshold – Threshold Nesnesi
- class Statistics – İstatistik Nesnesi
- class Blob – Blob nesnesi
- class Line – Line nesnesi
- class Circle – Circle nesnesi
- class Rect – Dikdörtgen Nesnesi
- class QRCode – QRCode nesnesi
- class AprilTag – AprilTag nesnesi
- class DataMatrix – DataMatrix nesnesi
- class BarCode – BarCode nesnesi
- class Displacement – Displacement nesnesi
- class kptmatch – Anahtar nokta eşleşmesi nesnesi
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 –
int0 – 1.grayscale –
int0 – 255.RGB – 8 bit tam sayılardan (her biri 0 – 255) oluşan
(r, g, b)demeti.LAB –
Ldeğeri 0 – 100 veA/Bdeğerleri -128 – 127 aralığında olan(l, a, b)demeti.YUV –
Ydeğeri 0 – 255 veU/Vdeğ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_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_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.
Ö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 birCascadetutamacı 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 daOpenMV kademeli sınıflandırıcı dönüştürücü araçları tarafından üretilen özel bir
.cascadeikili dosyasına ait bir dosya sistemi yolu.
stages, tespit anında kaç kademenin değerlendirileceğini seçer.-1dosyada 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¶
pathkonumundaki 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:ORB anahtar nokta tanımlayıcısı –
Image.find_keypoints()ardındanimage.save_descriptor()ile kaydedilir.LBP tanımlayıcısı –
Image.find_lbp()ardındanimage.save_descriptor()ile kaydedilir.
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
descriptordeğerini (bir ORB anahtar nokta veya LBP tanımlayıcısı) OpenMV tanımlayıcı dosya biçimindepathkonumundaki dosyaya seri hale getirir. Aynı dosya daha sonraimage.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
kptmatchdöndürür ya dathresholddeğerini geçen bir eşleşme yoksaNonedö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 birLinedö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 birLinedöndürür (minimum alanlı döndürülmüş dikdörtgenin iki temel ekseninden daha kısa olanı).
- 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ı).rotation– derece 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, Volarak 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()veyaImage.to_rgb565()gerektirir.
- image.PNG: int¶
Sıkıştırılmış PNG arabelleği. Piksel düzeyindeki işlemler önce
Image.to_grayscale()veyaImage.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ü renklendirirkenImage.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_DARKile 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.
Çizim / draw_image ipuçları¶
Bunlardan herhangi birini bit-OR ile birleştirip Image.draw_image() öğesinin hint argümanı olarak geçirin.
- 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.
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.
Şablon eşleştirme¶
Aşağıdakilerden birini Image.find_template() öğesine search argümanı olarak geçirin.
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.
Barkod simgelemleri¶
Image.find_barcodes() tarafından döndürülen girdiler için BarCode.type içinde bildirilen değerler.
- 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.