【问题标题】:How to find optimum graythresh for im2bw function如何为 im2bw 函数找到最佳灰度阈值
【发布时间】: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

但问题是当我更改im2bwlevel 值时,会得到不同的结果。我怎样才能找到最佳的level 以获得可靠的结果? 提前致谢。

【问题讨论】:

  • 你试过graythresh
  • 如果我使用 graythresh,我会错过较小的正方形和所有圆圈。

标签: matlab image-processing


【解决方案1】:

您可以调整级别并使其取决于图像本身(平均值或中位数等的函数,例如 level=0.5*median(image))

另一种方法是 normalize 您的图像并使用一个常数值阈值,您可以根据自己的应用程序和数据自行确定。

【讨论】:

  • 你能解释一下吗?我将图像标准化,但新图像完全变暗。
  • 你是如何规范化的? (如果太暗而无法显示,请尝试伽马校正)
  • 对不起,我弄糊涂了。我对图像处理知之甚少。有什么方法可以解决我的问题而不是正常化?
  • 是的,尝试根据图像均值或中值或方差等调整水平。
猜你喜欢
  • 2023-03-14
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 2022-10-13
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多