使用 Matlab 查找标记区域与图像中的点的最近点

Find closest point of labelled area to a point in an image with Matlab

我正在尝试使用 Matlab 找到图像中某个区域的闭合点:

考虑这个示例代码:

myimg = rgb2gray(imread('tissue.png')); %load grayscale example image of cells
BW=bwareaopen(myimg<150,10); %only look at dark pixels, remove small objects
BW=bwlabel(imfill(BW,'holes')) %fill holes of structures, label structures
figure; 
imagesc(BW); %display image

我想找到最近结构的最近点到一个点,例如[0,0]。到目前为止,我的方法是获取所有连接结构的所有质心,然后循环遍历所有结构以找到最接近的一个(不准确且效率低下)。

如果您只想找到一个最近点,您可以使用 bwdist 和第二个输出参数。这将为您提供一个矩阵,每个点都包含输入图像的最近非零点的线性索引。然后你只需要 select 对应于你感兴趣的点的索引。 bwdist 的输入图像应该是二进制的,所以在你的情况下你可以尝试像

% Make the image binary
binaryimage = BW > 0;

% Get the linear indices of the closest points
[~, idx] = bwdist(binaryimage);

% Find the linear index for point (3, 2)
x = 3;
y = 2;
pointindex = sub2ind(size(binaryimage), y, x);

% Find the index of the closet point from the segmentation
closestpointindex = idx(pointindex);

% Get coordinates of the closest point
[yc, xc] = ind2sub(size(binaryimage), closestpointindex);

这将为您提供二进制图像中最接近点[=15=的具有非零值的像素的坐标(xc, yc)和矩阵索引(closestpointindex) ],其中 xy 是 Matlab 索引,记住 Matlab 索引从 1 开始并且行在第一位,即 BW(y,x).