用MATLAB进行图像处理

图像处理概念,算法和MATLAB

双阈值

早在六月,我的答案是 MATLAB答案问题 使用了一种叫做 双阈值 ,也被称为 滞后阈值 .虽然提出的问题是一个一维的问题,但我想利用函数与你们分享二维的总体思想 imreconstruct
当单个阈值产生令人不满意的结果时,双阈值可能很有用,因为它在前景中包含了太多像素(阈值低),或者包含了太少像素(阈值高)。其思想是使用两个阈值,一个选择性更强,一个选择性更弱,然后通过从选择性较弱的结果中添加触摸像素,让选择性较强的结果“增长”。
这里有一个简单的例子来说明我的意思。
A = mat2gray(峰值(200));
imshow (A)
假设我想计算一个超过0.9的峰值掩码:
T_high = 0.9;
mask_high = A > T_high;
mask_high imshowpair(一个)
这很好,但我想为蒙版包括更多的峰值,所以我尝试一个较低的阈值。
T_low = 0.65;
mask_low = A > T_low;
mask_low imshowpair(一个)
现在蒙版包含了更多我们感兴趣的峰,但它也包括了一些我不想要的小峰。
双阈值的思想是使用 更高的 从阈值中选择所有的触摸区域输出 较低的 阈值。形态重建可以做到这一点。要使用的图像处理工具箱函数是 imreconstruct
Mask_double = imrebuild (mask_high,mask_low);
mask_double imshowpair(一个)
现在遮罩包括更多的高峰,不包括部分较低的高峰。
让我们尝试一个稍微不那么做作的例子,它对灰度图像的梯度大小使用双阈值。
B = imread(“coins.png”);
imshow (B)
Bg = mat2gray(imgradient(B));
imshow (Bg)
我们能用一个简单的阈值得到每个硬币的外围吗?
T_high = 0.6;
Bg_mask_high = Bg > T_high;
imshow (Bg_mask_high)
试着降低阈值:
T_low = 0.3;
Bg_mask_low = Bg > T_low;
imshow (Bg_mask_low)
现在使用双重阈值:
Bg_mask_double = imrebuild (Bg_mask_high,Bg_mask_low);
imshow (Bg_mask_double)
MATLAB答案 我回复的是一个一维的例子。
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];
情节(y)
网格
问题是提取低于0.5的低部分,但使用某种宽松的阈值,允许部分簇略高于0.6。双阈值很好地解决了这个问题。
T_low = 0.5;
Mask_low = y < 0.5;
T_high = 0.7;
mask_high = y < T_high;
情节(y)
持有
plot(T_low*mask_low, LineWidth = 3, Color =“红色”
plot(T_high*mask_high, LineWidth = 3, Color =“绿色”
持有
计算双阈值使用 imreconstruct
Mask_double = imrebuild (mask_low,mask_high);
情节(y)
持有
plot(T_low*mask_double, LineWidth = 3, Color =“红色”
持有
|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。