用MATLAB进行图像处理

图像处理概念,算法和MATLAB

使用imbinalize来阈值灰度图像

今天,我想说服大家使用 imbinarize 而不是 im2bw
背景:我最近看到一些数据表明,许多图像处理工具箱的用户仍在使用 im2bw ,这是一个可以追溯到1993年最初的工具箱版本的老函数。我们建议使用更新的函数, imbinarize ,因为它在最常见的场景中节省了一个步骤,并且如果您需要的话,它提供了额外的灵活性。
我将通过更新一篇名为 “跟踪乔治,” 其中,我试图提取如下图所示的曲线:
url =“https://blogs.mathworks.com/images/steve/36/george.jpg”
I = imread(url);
imshow(我)
我叫它“乔治”。我创建乔治最初是为了书中的一些例子和图表 利用MATLAB进行数字图像处理 .我在某个时候发现我需要重现轮廓曲线,但我没有原始的曲线数据。(愚蠢的我。)因此,我尝试了从图像中提取原始曲线数据的方法。
第一步显然是对图像设置阈值。在我最初的博客文章中,我同时使用了两个函数:
threshold = graythresh(I);
bw = im2bw(I,阈值)
这个函数 graythresh 用于计算“最优”阈值(根据某些标准进行优化)。这个函数 im2bw 可以在不指定第二个参数的情况下使用,但它只是使用一个通常不令人满意的固定阈值:
bw = im2bw(I);
imshow (bw)
结果是 graythresh 好多了。
t = graythresh(I)
T = 0.4392
bw2 = im2bw(I,t);
imshow (bw2)
随着时间的推移,我们发现几乎每个人(包括我们)都在使用 im2bw 而且 graythresh 在一起。这引起了对功能设计的重新考虑。替换函数, imbinarize ,使用 graythresh 自动。
bw3 = imbinalize (I);
imshow (bw3)
作为旁注,这里是我用来提取曲线的其余代码。请看我的原文 “追踪乔治”的博客文章 我来解释一下。
Bw4 = ~bw3;
Bw5 = bwmorph(bw4,“薄”、正);
边界= bwboundaries(bw5);
B =边界{1};
B = B(1:楼层(端/2),:);
X = b(:,2);
Y = b(:,1);
情节(x, y)
ij
平等的
标题(“乔治·p·伯德尔”

局部自适应阈值

对于更困难的阈值挑战, imbinarize 还支持局部金宝app自适应方法。为了演示,这里有一张我刚刚在我的办公室拍摄的使用MATLAB的数字图像处理页面的图片,光线不均匀。
page_url =“https://blogs.mathworks.com/steve/files/dipum3e页- 388 gray.jpg”
A = imread(page_url);
imshow (A)
由于光线不均匀,即使是最好的全局阈值也不能产生合适的结果。
page_bw = imbinalize (A);
imshow (page_bw)
您可以看到,在右上角有一个文本缺失的区域。采用局部自适应阈值方法效果更好。这个函数 imbinarize 金宝app方法指定的本地自适应方法 “自适应” 输入选项。但是,使用局部自适应方法,指定前景比背景更亮还是更暗是非常有用的。你可以看出来 imbinarize 这些信息使用 “ForegroundPolarity” 选择。
这是它的行动。
page_bw2 = imbinalize (A,“自适应”“ForegroundPolarity”“黑暗”);
imshow (page_bw2)
您可以看到,现在所有的文本都被清晰地包含在结果的二进制图像中。
所以,下次你伸手去拿 im2bw 而且 graythresh ,试着用 imbinarize 代替。
|
  • 打印
  • 发送电子邮件

评论

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