MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

使用imbinarize设置灰度图像的阈值

今天,我想说服你使用 灌输 而不是 im2bw .
背景:我最近看到一些数据表明许多图像处理工具箱用户仍在使用 im2bw ,这是一个旧函数,可追溯到1993年的原始工具箱版本。我们建议使用更新的函数, 灌输 ,因为它在最常见的场景中节省了一个步骤,并且在需要时提供了额外的灵活性。
我将通过更新一个名为 “追踪乔治,” 其中,我尝试提取下图所示的曲线:
网址='https://blogs.mathworks.com/images/steve/36/george.jpg';
I=imread(url);
imshow(I)
我称之为“乔治”。我最初为书中的一些示例和图表创建了乔治 基于MATLAB的数字图像处理 .我在某个时候发现我需要复制轮廓曲线,但我没有原始曲线数据。(愚蠢的我。)因此,我尝试了从图像中提取原始曲线数据的方法。
显然,第一步是对图像设置阈值。在我最初的博文中,我同时使用了两个功能:
阈值=灰度阈值(I);
bw=im2bw(I,阈值)
功能 灰谷 用于计算“最佳”阈值(根据特定标准最佳)。函数 im2bw 可以在不指定第二个参数的情况下使用,但它只使用了一个通常不令人满意的固定阈值:
bw=im2bw(I);
imshow(bw)
结果是 灰谷 好多了。
t=灰度阈值(I)
t=0.4392
bw2=im2bw(I,t);
imshow(bw2)
随着时间的推移,我们发现几乎每个人(包括我们)都会使用 im2bw 灰谷 在一起这导致重新考虑功能设计。替换功能, 灌输 ,使用 灰谷 自动地
bw3=吸入(I);
imshow(bw3)
作为旁注,下面是我用来提取曲线的其余代码。看到我的原稿了吗 “追踪乔治”博客帖子 我需要一个解释。
bw4=~bw3;
bw5=bwmorph(bw4,“瘦”,inf);
边界=边界(bw5);
b=边界{1};
b=b(1:楼层(结束/2),:);
x=b(:,2);
y=b(:,1);
绘图(x,y)
ij
相同的
头衔(“乔治·P·伯德尔”)

局部自适应阈值

对于更困难的阈值挑战, 灌输 还支持局部万博1manbetx自适应方法。为了演示,这里有一张图片,是我刚刚在办公室用MATLAB进行数字图像处理的一页,光线不均匀。
网页地址="https://blogs.mathworks.com/steve/files/dipum3e-page-388-gray.jpg";
A=imread(页面url);
imshow(A)
由于光照不均匀,即使是最佳全局阈值也不能产生合适的结果。
page_bw=imbinarize(A);
imshow(第页)
您可以看到右上角有一个缺少文本的区域。局部自适应阈值方法会更好。功能 灌输 万博1manbetx支持使用指定的本地自适应方法 “自适应” 输入选项。不过,使用局部自适应方法,指定前景是比背景亮还是比背景暗非常有帮助。你可以知道 灌输 使用 “前极性” 选项
在这里,它正在发挥作用。
第2页=imbinarize(A,“自适应”,“前极性”,“黑暗”);
imshow(第2页)
您可以看到,现在所有的文本都清晰地包含在生成的二进制图像中。
所以,下次你去拿东西的时候 im2bw 灰谷 ,尝试使用 灌输 相反
|
  • 打印
  • 发送电子邮件

评论

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