Вывод 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 может использоваться в качестве альтернативы репликации координат центра изображения для вычитания их из центроидов объекта.