早在六月,我的答案是
MATLAB答案问题
使用了一种叫做
双阈值
,也被称为
滞后阈值
.虽然提出的问题是一个一维的问题,但我想利用函数与你们分享二维的总体思想
imreconstruct
.
当单个阈值产生令人不满意的结果时,双阈值可能很有用,因为它在前景中包含了太多像素(阈值低),或者包含了太少像素(阈值高)。其思想是使用两个阈值,一个选择性更强,一个选择性更弱,然后通过从选择性较弱的结果中添加触摸像素,让选择性较强的结果“增长”。
这里有一个简单的例子来说明我的意思。
假设我想计算一个超过0.9的峰值掩码:
这很好,但我想为蒙版包括更多的峰值,所以我尝试一个较低的阈值。
现在蒙版包含了更多我们感兴趣的峰,但它也包括了一些我不想要的小峰。
双阈值的思想是使用
更高的
从阈值中选择所有的触摸区域输出
较低的
阈值。形态重建可以做到这一点。要使用的图像处理工具箱函数是
imreconstruct
.
Mask_double = imrebuild (mask_high,mask_low);
mask_double imshowpair(一个)
现在遮罩包括更多的高峰,不包括部分较低的高峰。
让我们尝试一个稍微不那么做作的例子,它对灰度图像的梯度大小使用双阈值。
Bg = mat2gray(imgradient(B));
我们能用一个简单的阈值得到每个硬币的外围吗?
Bg_mask_high = Bg > T_high;
试着降低阈值:
Bg_mask_low = Bg > T_low;
现在使用双重阈值:
Bg_mask_double = imrebuild (Bg_mask_high,Bg_mask_low);
Y =[1 2 0.6 2 3 4 5 4 3 2 0.4 0.3 0.4 0.4 0.6 0.4 0.5 0.4 0.6 0.5。...
0.3 0.5 0.6 0.2 1 2 3 0.6 1 2 3 2 2 5 4];
问题是提取低于0.5的低部分,但使用某种宽松的阈值,允许部分簇略高于0.6。双阈值很好地解决了这个问题。
plot(T_low*mask_low, LineWidth = 3, Color =“红色”)
plot(T_high*mask_high, LineWidth = 3, Color =“绿色”)
计算双阈值使用
imreconstruct
:
Mask_double = imrebuild (mask_low,mask_high);
plot(T_low*mask_double, LineWidth = 3, Color =“红色”)
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。