【问题标题】:Unable to space out markers in MATLAB无法在 MATLAB 中分隔标记
【发布时间】:2017-10-28 15:06:32
【问题描述】:

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

这是我当前的代码:

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 这样的大数时,它看起来像这样:

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 我会使用连接组件方法检查 2 个坐标是否属于一个 blob,例如bwlabel,它比它们之间的距离更可靠。

标签: algorithm matlab image-processing


【解决方案1】:

您可以使用morphological operations

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

然后您可以在A==1 所在的每个像素上放置一个标记。

【讨论】:

  • 这是一个了不起的解决方案!
  • 你对这篇文章的标题有更好的建议吗?我知道很多人都遇到过同样的问题,如果这个问题的标题措辞更好,可能会更有用。
  • 如何:“找到图像中白点的中心”?这至少正是我的代码所做的。但它没有提到标记。也许“在图像中的白点中心放置标记”?有点笨拙,但描述了问题,也有点像标签云。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2015-08-12
  • 2019-06-02
  • 2011-02-27
相关资源
最近更新 更多