HOWTO: Підрахунок крапель (та знаходження їх властивостей) у MATLAB

Оригінал доступний на atmos.uw.edu

Оновлено (21.10.2019)

MATLAB надає функцію bwconncomp, яка замінює функцію bwlabel і узагальнює її для більш ніж двох вимірів. Я переглянув наведений нижче код, щоб використовувати bwconncomp замість bwlabel.

Історія

Я написав сценарій для підрахунку крапель або плям опадів, використовуючи прив’язані до сітки дані радіолокаційної відбивної здатності. Сценарій також розраховував властивості цих крапель, включаючи область та орієнтацію. Я був мотивований зробити це, тому що подібні речі іноді робилися вручну, як, наприклад, у Характеристиках тропічної конвекції над океаном біля Кваджалейна, як в Cetrone і Hoze 2006, і я вирішив, що автоматизація цього процесу була б корисною. Сценарій використовували Кріс Холдер та Сандра Ютер з NCSU для дослідження мезомасштабних характеристик тропічних океанічних опадів під час Кельвіна та змішаних подій хвилі Россбі-гравітації. Кріс також вніс поліпшення і знайшов пару помилок.

Однак, розбираючи сценарій, щоб розмістити його на цьому веб-сайті, я виявив, що він відтворює функціональні можливості, які вже існують на панелі інструментів обробки зображень MATLAB. Щоб уникнути дублювання зусиль, я не надаю сюди сценарій. Переважно, я включаю нижче HOWTO, який описує, як використовувати вбудовані функції MATLAB для підрахунку крапель та обчислення їх властивостей.

Підрахунок крапель HOWTO для MATLAB

Якщо у вас є матриця R з радіолокаційним відбиттям і ви хочете знайти об’єкти з відбивними показниками, більшими за TOL, визначте нову матрицю RL з тією, де R> TOL і нулями в інших місцях. Зауважте, що матриця може вміщувати що завгодно, а не лише радіолокаційні відбиття. Потрібно лише, щоб дискретні вставки можна було ідентифікувати за допомогою порогового значення, що застосовується до значень матриці R.

>> RL = zeros(size(R));

>> RL(find(R>TOL)) = 1;

Далі викликайте функцію MATLAB bwconncomp, яка повертає структуру, що ідентифікує та призначає індекс кожному суміжному об’єкту з RL==1. Слід зазначити, що другий аргумент bwconncomp – чотири, якщо області з’єднані через краї, вісім, якщо вони з’єднані через краї та кути.

>> RLL = bwconncomp (RL, 4);

Зверніть увагу, що найбільшим елементом RLL є кількість об’єктів. Властивості кожної з цих областей можна обчислити за допомогою regionprops. Наприклад, щоб отримати центроїди та області різних об’єктів:

>> stats = regionprops (RLL, ‘Centroid’, ‘Area’);

stats – вектор, довжина якого – кількість об’єктів. Кожен елемент у векторі – це структура, яка зберігає властивості об’єктів. Структури MATLAB – корисний спосіб збору даних, що стосуються одного об’єкта. Ось, наприклад, до властивостей четвертого об’єкта можна отримати наступний доступ:

>> stats(4).Area

>> stats(4).Centroid

Функція MATLAB regionprops може обчислити багато різних властивостей крапель. Сторінка довідки за вказаним вище посиланням містить повний список. Список крапель з площею та центроїдом кожної краплі можна роздрукувати так:

>> для n = 1:length(stats)

>> disp(sprintf(‘Blob number = %d, Area = %g, Centroid = (%g, %g)’,…

>> n,stats(n).Area,stats(n).Centroid))

>> end

 Приклад сценарію

bwconncomp_example.m – зразок сценарію, який підраховує кількість виправлень, де R>0, коли R обчислюється як сума кількох гауссових опуклостей, а середнє значення R віднімається.