区分规则和不规则形状的斑点

1 投票
1 回答
519 浏览
提问于 2025-04-19 05:41

我有一组相连的形状(叫做“blob”),我想把那些形状比较规则的(图中的 acd)和那些形状比较不规则的(比如 b)区分开来。

我试过用一些方法,比如计算形状的面积(通过设置一个阈值来比较 blob 的面积和卷积后的 blob 面积),还有一些形状因子和圆度的指标,但这些方法都没能很好地区分 d 和像香蕉那样的形状。你们有什么建议的参数可以使用吗?谢谢!

这里输入图片描述

1 个回答

1

我想到一个主意,就是可以通过每个“块”的“角的数量”来判断这个“块”的“规则性或不规则性”。测试结果似乎也支持我们的想法。下面是代码 -

im = imread(input_image_path);
bw= im2bw(im);

%// Parameter for cutting into four slices into the third dimsensions 
%// corresponding to the four objects
common_width = 270; 

%// Threshold to decide between regular and irregular ones
factor1_th = 0.01;

bw1 = bw(:,1:common_width*floor(size(bw,2)/common_width)); %// Cropped image
objs =reshape(bw1,size(bw1,1),common_width,[]);%//Objects stored as dim3 slices
for objc=1:size(objs,3) %// Object counter
    disp(['-------------- Processing Obj #' num2str(objc)]);
    obj = objs(:,:,objc);
    corners = corner(obj);
    factor1 = size(corners,1)/nnz(obj)
    if factor1 > factor1_th
        disp('This is an irregular one.'); %//'
    else
        disp('This is a regular one.'); %//'
    end
end

输出 -

-------------- Processing Obj #1
factor1 =
    0.0050
This is a regular one.
-------------- Processing Obj #2
factor1 =
    0.0109
This is an irregular one.
-------------- Processing Obj #3
factor1 =
    0.0052
This is a regular one.
-------------- Processing Obj #4
factor1 =
    0.0078
This is a regular one.

如果有人想运行这段代码,这里有一张去掉了符号a、b、c、d的输入图片 -

在这里输入图片描述

链接 - https://i.stack.imgur.com/uPpUU.jpg

撰写回答