Algorithm 无法在MATLAB中隔开标记

Algorithm 无法在MATLAB中隔开标记,algorithm,matlab,image-processing,Algorithm,Matlab,Image Processing,我有一张满是白点的照片。现在,我想根据特定的坐标和检查在每个点上放置一个标记。现在我的问题是,我不想在一个特定的“斑点”上聚集太多的标记,这些斑点占据了超过一个像素。我的工作是检查我以前的标记位置和当前标记位置是否在附近。然而,这会导致许多独立的白色斑点由于距离太近而丢失,即使它不一定只是一个斑点 这是我目前的代码: a = find(overlap == 1); %overlap is a 1040 by 1392 binary matrix prev_coord = [1 1]; for

我有一张满是白点的照片。现在,我想根据特定的坐标和检查在每个点上放置一个标记。现在我的问题是,我不想在一个特定的“斑点”上聚集太多的标记,这些斑点占据了超过一个像素。我的工作是检查我以前的标记位置和当前标记位置是否在附近。然而,这会导致许多独立的白色斑点由于距离太近而丢失,即使它不一定只是一个斑点

这是我目前的代码:

a = find(overlap == 1); %overlap is a 1040 by 1392 binary matrix
prev_coord = [1 1];

for i=1:size(a)
    c = mod(a(i), 1040);
    r = floor(a(i)/1040);
    X = [prev_coord; r c];
    if(pdist(X, 'euclidean') > prox)      
       if(img(r, c) > 1)
           gray = insertMarker(gray, [r c], 'x', 'color', 'red', 'size', 15); 
       else
           gray = insertMarker(gray, [r c], 'x', 'color', 'white', 'size', 15);      
       end
    end
    prev_coord = [r c];
end
prox
等于非常小的数字(如50)时,我的图像如下所示:

但是,当
prox
是一个像120这样的大数字时,它看起来是这样的:

关于如何解决这一问题,您有什么想法吗?

您可以使用以下方法:


然后你可以在每个像素上放置一个标记,
a==1

我会使用连接组件的方法检查两个坐标是否属于一个blob,例如
bwlabel
,它比它们之间的距离更可靠。这是一个很棒的解决方案!你对这篇文章的标题有更好的建议吗?我知道很多人都有同样的问题,如果这个问题的标题措辞更恰当,可能会更有用。这句话怎么样:“在图像中找到白点的中心”?至少我的代码就是这么做的。但它没有提到标记。也许“在图像的白点中心放置标记”?有点笨拙,但描述了问题,也有点像标签云。
A = round(overlap./max(overlap(:))) % turn original image into binary image.
A = imfill(A,'holes'); % fill holes in blobs
A = bwmorph(A,'shrink',Inf) % reduce each blob to a single point