MatLab - 寻找最接近价值的最佳方式

时间:2011-03-22 20:22:32

标签: performance matlab

我正在使用Matlab的图像工具箱。特别是,在对图像进行二值化和标记后,我运行

props = regionprops(labeledImage, 'Centroid');

获取所有连接对象的质心。现在,我想找到一个更靠近一对坐标(即图像中心)的坐标。当然我知道我可以使用for循环检查每个props [i] .Centroid坐标对,但这很慢,并且必须有一个 matlaby 方式...

这是......?

提前致谢

1 个答案:

答案 0 :(得分:3)

REGIONPROPS的输出将是一个N-by-1结构数组,其中一个字段'Centroid'包含一个1乘2的数组。您可以使用函数VERTCAT将所有这些数组连接成N-by-2数组。然后,您可以使用函数REPMAT复制图像中心坐标(假设为1乘2阵列),使其成为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可用作复制图像中心坐标以从对象质心中减去它们的替代方法。