使用 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
) ],其中 x
和 y
是 Matlab 索引,记住 Matlab 索引从 1
开始并且行在第一位,即 BW(y,x)
.
我正在尝试使用 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
) ],其中 x
和 y
是 Matlab 索引,记住 Matlab 索引从 1
开始并且行在第一位,即 BW(y,x)
.