开发者

MatLab - Best way of finding the closest value

I'm working with Matlab's image toolbox. In particular, after binarizing and labeling an image, I run

props = regionprops(labeledImage, 'Centroid');

to get the centroid of all the connected objects. Now, I would like to find the one closer to a pair of coordinates (namely the center of the image). Of course I know I could us开发者_如何学运维e a for loop checking each props[i].Centroid pair of coordinates, but that's slow and there must be a matlaby way of doing it...

which is...?

Thanks in advance


The output from REGIONPROPS will be an N-by-1 structure array with one field 'Centroid' that contains a 1-by-2 array. You can first concatenate all these arrays into an N-by-2 array using the function VERTCAT. Then you can replicate your image center coordinates (assumed to be in a 1-by-2 array) using the function REPMAT so that it becomes an N-by-2 array. Now you can compute the distances using vectorized operations and find the index of the value with the minimum distance using the function 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

Note that since you just want the minimum distance, you can just use the squared distances and avoid a needless call to SQRT. Also note that the function BSXFUN could be used as an alternative to replicating the image center coordinates to subtract them from the object centroids.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜