我是图像处理的新手。我有一个像这样的灰度图像,每个边缘的中间有4个圆圈:
我想检查较小方块的边缘是否将圆圈减半。另外,圆的中心与相关边缘之间的距离是多少。我在下面写了代码。首先,我尝试找到边缘的长度并找到每个边缘的中间部分。
int fd[2];
.
.
.
FILE *stream = fdopen( fd[ 1 ] );
.
.
.
void write_to_pipe(char* str)
{
fprintf(stream, "%s", str);
}
然后,我发现每个圆圈的中心如下,我计算它们与相关边缘的距离:
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
的{{1}}值时,我会得到不同的结果。如何找到最佳level
才能获得可靠的结果?
提前谢谢。
答案 0 :(得分:1)
你可以调整你的水平并使其依赖于图像本身(平均值或中位数等函数,例如水平= 0.5 *中位数(图像))
另一种方法是normalize您的图片并使用恒定值阈值,您可以根据自己的应用和数据找到自己的阈值。