HOWTO: Socoteală Blobs (și găsirea proprietăților lor) în MATLAB

Sursă Originală: https://atmos.uw.edu/~bloss/blobcount/

Istorie

Am scris un scenariu pentru a număra blob-uri sau pietre de precipitații folosind datele gridded ale reflexiei radar. Scriptul a calculat, de asemenea, proprietățile acestor bloburi, inclusiv zona și orientarea. Am fost motivat să fac acest lucru, deoarece astfel de lucruri au fost făcute uneori la îndemână, la fel ca în Cetrone și Houze 2006 Caracteristicile convecției tropicale peste Oceanul de lângă Kwajalein și m-am gândit că automatizarea acestui proces ar fi utilă. Scenariul a fost folosit de Chris Holder și Sandra Yuter de la NCSU pentru a studia caracteristicile mesoscale ale precipitațiilor oceanice tropicale în timpul evenimentelor Kelvin și amestecate de valuri Rossby . De asemenea, Chris a contribuit la îmbunătățiri și a găsit câteva bug-uri.

Cu toate acestea, în timp ce curățam scriptul pentru a-l posta pe acest site, am descoperit că acesta reproduce funcționalitatea care există deja în caseta de instrumente pentru procesarea imaginilor de la MATLAB. Pentru a evita o dublare a efortului, nu ofer scriptul aici. Mai degrabă, includ mai jos un HOWTO care descrie modul de utilizare a funcțiilor încorporate din MATLAB pentru a număra blob-uri și a calcula proprietățile lor.

Blob Counting HOWTO pentru MATLAB

Dacă aveți o matrice R cu reflectivități radar și doriți să căutați obiecte cu reflexii mai mari decât TOL, definiți o nouă matrice RL cu cele în care R> TOL și zerouri în altă parte. Rețineți că matricea ar putea menține orice, nu doar reflectoarele radar. Este doar necesar ca identificatorii patch-uri să poată fi identificați utilizând o valoare de prag aplicată valorilor din matricea R.

>> RL = zerouri (dimensiunea (R)); 
>> RL (găsiți (R> TOL)) = 1;

Apoi apelați funcția blabella funcției MATLAB , care va da o nouă matrice care atribuie un număr fiecărui obiect contiguu cu RL == 1. Rețineți că al doilea argument pentru bwlabel este patru, dacă regiunile sunt conectate prin margini, opt dacă sunt conectate prin ambele margini și colțuri.

>> RLL = bwlabel (RL, 4);

Rețineți că cel mai mare element din RLL este numărul de obiecte. Proprietățile fiecăreia dintre aceste regiuni pot fi calculate folosind regiunea regională. De exemplu, pentru a obține centroidii și zonele diferitelor obiecte:

>> stats = regionprops (RLL, 'Centroid', 'Area');

este un vector, a cărui lungime este numărul de obiecte. Fiecare element din vector este o structură care deține proprietățile obiectelor. Structurile MATLAB sunt modalități utile de colectare a datelor care aparțin unui singur obiect. Aici, de exemplu, proprietățile celui de-al patrulea obiect pot fi accesate după cum urmează:

>> statistici (4) .Area 
>> stats (4) .Centroid

Regioul de funcții MATLAB poate calcula multe proprietăți diferite ale blobului . Pagina de ajutor de la linkul de mai sus oferă o listă completă. O listă a bloburilor cu suprafața și centroidul fiecărui blob poate fi tipărită după cum urmează:

>> pentru n = 1: lungimea (statistici) 
>> disp (sprintf ( 'Blob număr =% d, Suprafață =% g, Centroid = (% g% g)', ... 
>> n, statistici (n ) .Area, stats (n) .Centroid)) 
>> sfarsit

Exemplu Script

bwlabel_example.m este un exemplu de script care numără numărul de patch-uri în care R> 0 când R este calculat ca suma a câtorva gropi gaussiene și valoarea medie a R este scăzută.


Peter Blossey <bloss@atmos.washington.edu>