zoukankan      html  css  js  c++  java
  • 图像处理之图像切割---提取信封上的邮编

    1、题目:

    分割图像,提取信封上的邮编。

    2、算法原理:

    原创:梁毅军(西安交大图像所,liang.yijun@live.cn)

    (1) 线框提取:

    输入f(x,y)为彩色图像,输出g(x,y)为灰色图像。

    g(x,y) = T[f(x,y).R, f(x,y).B, f(x,y).R]    T为变换函数

    T(R, G, B) = max{R- (G+B)/2 , 0};

    经过T函数变换后,红色的线框被提取出来,值为255,其余颜色的点灰度值变为0.

       (2)字符框位置的提取:投影算法

    向x轴投影  Map_x(x) = wps_clip_image-303;

    向y轴投影  Map_y(y) = wps_clip_image-365;

    获取了字符框的位置后,可以采取相应算法提取各个邮编号码。

    还可以继续对邮编字符做分割细化和特征提取,最后进行识别,这里暂不讨论。

    3、代码:

    void main()

    {

    ARGB [,] f = LoadColorImg();

    if (f==null) return;

    ShowImg("f",f);

    int w = f.GetLength(0);

    int h = f.GetLength(1);

    byte [,] g = new byte[w,h];

    //提取线框

    for(int x = 0; x < w; x++)

    for(int y = 0; y < h; y++)

    {

    double temp = f[x,y].R - (f[x,y].G+f[x,y].B)/2.0;

    if(temp > 0) g[x,y] = (byte)temp;

    else g[x,y] = 0;

    }

    //显示提取后的线框图像

    ShowImg("g",g);

    int [] Map_x = new int[w];//沿x轴投影值

    int [] Map_y = new int[h];//沿y轴投影值

    for(int x = 0; x < w; x++)

    Map_x[x] = 0;

    for(int y = 0; y < h; y++)

    Map_y[y] = 0;

    //沿x轴投影

    for(int x = 0; x < w; x++)

    for(int y = 0; y < h; y++)

    Map_x[x] += g[x,y];

    //沿y轴投影

    for(int y = 0; y < h; y++)

    for(int x = 0; x < w; x++)

    Map_y[y] += g[x,y];

    int [] Pos_x = new int[6];//x轴线框标记值

    int [] Pos_y = new int[5];//y轴线框标记值

    //获取x轴线框标记值

    int i = 0;

    for(int x = 0; x < w; x++)

    if(Map_x[x] > 510)

    {

    Pos_x[i++] = x;

    }

    //获取y轴线框标记值

    i = 0;

    for(int y = 0; y < h; y++)

    if(Map_y[y] > 1540)

    {

    Pos_y[i++] = y;

    }

    //ARGB [,] g_new = new ARGB[w,h];//显示分割后的图像,彩色图表示

    byte [,] g_new = new byte[w,h];

    for(int x = 0; x < w; x++)

    for(int y = 0; y < h; y++)

    //if((x>Pos_x[4] && xPos_y[1] && y

    if((x!=Pos_x[0] && x!=Pos_x[1] &&x!=Pos_x[2] &&x!=Pos_x[3] &&x!=Pos_x[4] &&x!=Pos_x[5] )

         && (y>Pos_y[1] && y<Pos_y[2]))//获取所有邮编号码,用灰度图表示

    g_new[x,y] = (byte)(255-((f[x,y].R+f[x,y].G+f[x,y].B)/3.0));

    ShowImg("g_new",g_new);

    }

    4、结果

    wps_clip_image-1847

    图 1 信封原图 f

    wps_clip_image-1862

    图 2 提取的线框图 g

    wps_clip_image-1877

    图 3 分割后的邮编 g_new

  • 相关阅读:
    TOJ 假题之 Cow Brainiacs
    TOJ 2596: Music Notes
    Wannafly模拟赛2
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛
    2017 ACM/ICPC Asia Regional Shenyang Online
    北京师范大学第十五届ACM决赛-重现赛
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
    Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017)
    LibreOJ β Round #4
    长沙理工大学第十二届ACM大赛-重现赛
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3948309.html
Copyright © 2011-2022 走看看