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