MATLAB(第七讲)
形态学处理应用
找出图中的文字
效果
思路
利用腐蚀膨胀和图像重建,在文字所在地方利用重建,找出文字
步骤
- 先把图像转换为灰度图
- 再把图像转换为二值图
观察灰度图,发现灰色部分较多,而字的白色较明显,可以利用imbinarize的参数,将偏灰的一些元素变为黑色,将特别白的地方转化为白色。
对 imbinarize 函数的使用具体见第四讲。
代码:clear,clc,close all; f=imread('ws.jpg'); g=rgb2gray(f); imshow(g); bw_just=imbinarize(g,0.99); %将大于灰度图取值的0.99的部分转换为白色,小于的转换为黑色 figure,imshow(bw_just);
-
去除多余的小对象
通过观察可以看到,在字的旁边有很多杂乱的小对象,可以用 bwareaopen 去除。新增代码为:
bw_ao=bwareaopen(bw_just,100); %去除大小小于100的对象 figure,imshow(bw_ao);
-
利用默认参数将原图转换为二值图
本例的目的为得到中间的几个字,上一步所处理得到的图像为字的一部分,自然可以想到利用在原图的重建,得到字体,因此先将原图转换为二值图,便可得到清晰的四个字,如下所示:
新增代码为:
b=imbinarize(g,0.5);
figure,imshow(b),title('原图');
- 膨胀连接所有字体的小部分
观察可以发现,每个字体的上下或左右结构可能有间隔,最好的办法是对上一步得到的二值图进行膨胀,让每个字都连接成一个连通的部分,然后利用第三步的少部分字体的图在连接好的字体上重建,可以得到膨胀的字体。
新增代码为:
fd=imdilate(b,strel("disk",2));
bw_re=imreconstruct(bw_ao,fd);
figure,imshow(bw_re),title('膨胀后重建');
- 观察可知,只需要在二值图上进行重建,即可找出原字体的图像
本例代码为:
clear,clc,close all;
f=imread('ws.jpg');
g=rgb2gray(f);
imshow(g);
bw_just=imbinarize(g,0.99);
figure,imshow(bw_just);
bw_ao=bwareaopen(bw_just,100);
figure,imshow(bw_ao);
b=imbinarize(g,0.5);
figure,imshow(b),title('原图');
fd=imdilate(b,strel("disk",2));
bw_re=imreconstruct(bw_ao,fd);
figure,imshow(bw_re),title('膨胀后重建');
bw_rer=imreconstruct(bw_re,b);
figure,imshow(bw_rer);
来源:CSDN
作者:木子雨田
链接:https://blog.csdn.net/qq_36793268/article/details/90085336