如何找到im2bw函数的最优灰度值

时间:2017-05-30 11:28:44

标签: matlab image-processing

我是图像处理的新手。我有一个像这样的灰度图像,每个边缘的中间有4个圆圈:

enter image description here

我想检查较小方块的边缘是否将圆圈减半。另外,圆的中心与相关边缘之间的距离是多少。我在下面写了代码。首先,我尝试找到边缘的长度并找到每个边缘的中间部分。

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才能获得可靠的结果? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你可以调整你的水平并使其依赖于图像本身(平均值或中位数等函数,例如水平= 0.5 *中位数(图像))

另一种方法是normalize您的图片并使用恒定值阈值,您可以根据自己的应用和数据找到自己的阈值。