今天,我想说服大家使用
imbinarize
而不是
im2bw
.
背景:我最近看到一些数据表明,许多图像处理工具箱的用户仍在使用
im2bw
,这是一个可以追溯到1993年最初的工具箱版本的老函数。我们建议使用更新的函数,
imbinarize
,因为它在最常见的场景中节省了一个步骤,并且如果您需要的话,它提供了额外的灵活性。
我将通过更新一篇名为
“跟踪乔治,”
其中,我试图提取如下图所示的曲线:
url =“https://blogs.mathworks.com/images/steve/36/george.jpg”;
我叫它“乔治”。我创建乔治最初是为了书中的一些例子和图表
利用MATLAB进行数字图像处理
.我在某个时候发现我需要重现轮廓曲线,但我没有原始的曲线数据。(愚蠢的我。)因此,我尝试了从图像中提取原始曲线数据的方法。
第一步显然是对图像设置阈值。在我最初的博客文章中,我同时使用了两个函数:
这个函数
graythresh
用于计算“最优”阈值(根据某些标准进行优化)。这个函数
im2bw
可以在不指定第二个参数的情况下使用,但它只是使用一个通常不令人满意的固定阈值:
结果是
graythresh
好多了。
随着时间的推移,我们发现几乎每个人(包括我们)都在使用
im2bw
而且
graythresh
在一起。这引起了对功能设计的重新考虑。替换函数,
imbinarize
,使用
graythresh
自动。
Bw5 = bwmorph(bw4,“薄”、正);
局部自适应阈值
对于更困难的阈值挑战,
imbinarize
还支持局部金宝app自适应方法。为了演示,这里有一张我刚刚在我的办公室拍摄的使用MATLAB的数字图像处理页面的图片,光线不均匀。
page_url =“https://blogs.mathworks.com/steve/files/dipum3e页- 388 gray.jpg”;
由于光线不均匀,即使是最好的全局阈值也不能产生合适的结果。
page_bw = imbinalize (A);
您可以看到,在右上角有一个文本缺失的区域。采用局部自适应阈值方法效果更好。这个函数
imbinarize
金宝app方法指定的本地自适应方法
“自适应”
输入选项。但是,使用局部自适应方法,指定前景比背景更亮还是更暗是非常有用的。你可以看出来
imbinarize
这些信息使用
“ForegroundPolarity”
选择。
这是它的行动。
page_bw2 = imbinalize (A,“自适应”,“ForegroundPolarity”,“黑暗”);
您可以看到,现在所有的文本都被清晰地包含在结果的二进制图像中。
所以,下次你伸手去拿
im2bw
而且
graythresh
,试着用
imbinarize
代替。
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。