【发布时间】:2017-05-30 22:12:32
【问题描述】:
我是图像处理方面的新手。我有一个像这样的灰度图像,每个边缘的中间有 4 个圆圈:
我想检查较小正方形的边缘是否将其上的圆圈减半。否则,圆心和相关边缘之间的距离。我写了下面的代码。首先,我尝试找到边缘的长度并找到每个边缘的中间。
BW1=im2bw(image,0.45);
BW1=imcomplement(BW1);
BW1=imclearborder(BW1);
BW1=bwconvhull(BW1);
Area=bwarea(BW1);
side=sqrt(Area);
s = regionprops(BW1, 'Centroid');
sx1 = round(s.Centroid(1));
sy1 = round(s.Centroid(2));
C1=[sx1,(sy1-side./2)]; %% middle of top edge
C2=[(sx1+side./2),sy1]; %% middle of right edge
C3=[sx1,(sy1+side./2)]; %% middle of bottom edge
C4=[(sx1-side./2),sy1]; %% middle of left edge
然后,我找到每个圆的中心,如下所示,并计算它们与相关边缘的距离:
BW2=im2bw(image,0.6);
BW2=bwareaopen(BW2,70);
S = regionprops(BW2, 'Centroid');
centroids = round(cat(1, S.Centroid));
D1=centroids(5,:)-C1; %% distance from top edge
D2=centroids(6,:)-C2; %% distance from right edge
D3=centroids(4,:)-C3; %% distance from bottom edge
D4=centroids(3,:)-C4; %% distance from left edge
但问题是当我更改im2bw 的level 值时,会得到不同的结果。我怎样才能找到最佳的level 以获得可靠的结果?
提前致谢。
【问题讨论】:
-
你试过
graythresh -
如果我使用 graythresh,我会错过较小的正方形和所有圆圈。