9、顶帽和底帽操作的应用

顶帽和底帽的应用

计算器扣取

目的:利用matlab提取出下图的字符
9、顶帽和底帽操作的应用_第1张图片
效果:
9、顶帽和底帽操作的应用_第2张图片

步骤:

  1. 首先将图片转换为灰度图,查看图片
    9、顶帽和底帽操作的应用_第3张图片
    该步代码为:

    clear,clc,close all;
    f=imread('c.jpg');
    subplot(1,2,1),imshow(f);
    g=rgb2gray(f);
    subplot(1,2,2),imshow(g);
    
  2. 观察灰度图,所有的字符都为黑色,我们想要的结果字符为白色,需要对图片进行处理。由灰度图的特点可以知道,八位图的灰度图每个像素点的取值范围为0-255,代表从黑色到白色,若要将黑色的字符转化为白色,可以使用255减去每个像素点的值,从而实现颜色的取反。效果如下
    9、顶帽和底帽操作的应用_第4张图片
    新增代码为:

    ga=255-g;
    figure,imshow(ga);
    
  3. 观察上图,可以发现按键边框和字符为较亮部分,可以使用顶帽操作去除较暗的背景。选择合适大小的结构体进行顶帽操作效果如下:
    9、顶帽和底帽操作的应用_第5张图片
    新增代码为:

    se=strel('disk',5);
    g_top=imtophat(ga,se);
    figure,imshow(g_top);
    
  4. 可以看出经过顶帽操作后,后方背景已经没有了,现在图中只剩下每个按键的边框需要去除了。观察整张图可以发现,边框的特点为有较长较宽的线条,可以使用横线对整张图进行腐蚀操作,可以类比前面身份证号码切割的例子,腐蚀操作后得到的是部分横边框,再用这些横边框在顶帽后灰度图重建,得到边框的图,用顶帽后的灰度图减去边框图,即可得到字符。进行腐蚀的效果如下图:
    9、顶帽和底帽操作的应用_第6张图片

    新增代码为:

    se_l=strel('line',20,0);
    g_top_erode=imerode(g_top,se_l);
    figure,imshow(g_top_erode);
    
  5. 用腐蚀过的图在顶帽操作后的图上重建可以得到下图,可以看出,案件的边框已经被分离出来了。
    9、顶帽和底帽操作的应用_第7张图片

    本步新增代码为:

    g_re=imreconstruct(g_top_erode,g_top);
    figure,imshow(g_re);
    
  6. 利用顶帽后的图片,减去上一步得到的边框图,便可以得到只有字符的图片
    9、顶帽和底帽操作的应用_第8张图片本步新增代码为:

    result=g_top-g_re;
    figure,imshow(result);
    

本例代码为:

clear,clc,close all;
f=imread('c.jpg');
subplot(1,2,1),imshow(f);
g=rgb2gray(f);
subplot(1,2,2),imshow(g);
ga=255-g;
figure,imshow(ga);

se=strel('disk',5);
g_top=imtophat(ga,se);%顶帽操作,结构元素的大小可以根据需要调整
figure,imshow(g_top);

se_l=strel('line',20,0);
g_top_erode=imerode(g_top,se_l);%腐蚀操作,结构元素的大小可以根据需要调整
figure,imshow(g_top_erode);

g_re=imreconstruct(g_top_erode,g_top);%重建得到边框的图片
figure,imshow(g_re);

result=g_top-g_re;%减去边框的图片
figure,imshow(result);

你可能感兴趣的:(matlab图像处理)