我正在使用Matlab的图像工具箱。特别是,在对图像进行二值化和标记后,我运行
props = regionprops(labeledImage, 'Centroid');
获取所有连接对象的质心。现在,我想找到一个更靠近一对坐标(即图像中心)的坐标。当然我知道我可以使用for循环检查每个props [i] .Centroid坐标对,但这很慢,并且必须有一个 matlaby 方式...
这是......?
提前致谢
答案 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可用作复制图像中心坐标以从对象质心中减去它们的替代方法。