MatLab - лучший способ найти ближайшее значение - PullRequest
2 голосов
/ 22 марта 2011

Я работаю с набором инструментов Matlab для изображений. В частности, после бинаризации и маркировки изображения я запускаю

props = regionprops(labeledImage, 'Centroid');

, чтобы получить центр тяжести всех связанных объектов. Теперь я хотел бы найти ту, которая ближе к паре координат (а именно к центру изображения). Конечно, я знаю, что мог бы использовать цикл for для проверки каждой пары координат [i] .Centroid, но это медленно и должен быть matlaby способ сделать это ...

что такое ...?

Заранее спасибо

1 Ответ

3 голосов
/ 22 марта 2011

Вывод REGIONPROPS будет структурным массивом N-1-с одним полем 'Centroid', содержащим массив 1-на-2.Сначала вы можете объединить все эти массивы в массив N-by-2, используя функцию VERTCAT .Затем вы можете скопировать ваши координаты центра изображения (предполагается, что они находятся в массиве 1 на 2), используя функцию REPMAT , чтобы он стал массивом N на 2.Теперь вы можете вычислить расстояния с помощью векторизованных операций и найти индекс значения с минимальным расстоянием, используя функцию MIN :

props = regionprops(labeledImage, 'Centroid');
centers = vertcat(props.Centroid);  %# Vertically concatenate the centroids
imageCenter = [x y];                %# Your image center coordinates
origin = repmat(imageCenter,numel(props),1);      %# Replicate the coordinates
squaredDistance = sum(abs(centers-origin).^2,2);  %# Compute the squared distance
[~,minIndex] = min(squaredDistance);              %# Find index of the minimum

Обратите внимание, что, поскольку вы просто хотите минимальное расстояние,Вы можете просто использовать квадраты расстояний и избежать ненужного вызова SQRT .Также обратите внимание, что функция BSXFUN может использоваться в качестве альтернативы репликации координат центра изображения для вычитания их из центроидов объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...