用MATLAB进行图像处理

图像处理概念、算法和MATLAB

使用合并到阈值灰度图像

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

局部自适应阈值

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

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。