图像处理之图像切割---提取信封上的邮编

1、题目:

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

2、算法原理:

原创:梁毅军(西安交大图像所,[email protected])

(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) = ;

向y轴投影  Map_y(y) = ;

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

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

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、结果

图 1 信封原图 f

图 2 提取的线框图 g

图 3 分割后的邮编 g_new

时间: 2024-10-10 23:41:04

图像处理之图像切割---提取信封上的邮编的相关文章

图像切割—基于图的图像切割(Graph-Based Image Segmentation)

 图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation,IJCV 2004,MIT Code 图像切割-基于图的图像切割(OpenCV源代码注解) 最后一个暑假了,不打算开疆辟土了.战略中心转移到品味经典.计划把图像切割和目标追踪的经典算法都看一看.再记些笔记. Graph-Based Segmentation 是经典的图像切割算法,作者Felzens

图像处理之图像梯度效果(转载)

转载自:http://blog.csdn.net/jia20003/article/details/7664777 图像处理之图像梯度效果 基本思想: 利用X方向与Y方向分别实现一阶微分,求取振幅,实现图像梯度效果.关于如何计算图像 一阶微分参见这里:http://blog.csdn.net/jia20003/article/details/7562092 使用的两种微分算子分别为Prewitt与Sobel,其中Soble在X, Y两个方向算子分别为: Prewitt在X, Y方向上梯度算子分别

图像切割之(一)概述

图像切割之(一)概述 [email protected] http://blog.csdn.net/zouxy09 所谓图像切割指的是依据灰度.颜色.纹理和形状等特征把图像划分成若干互不交迭的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域间呈现出明显的差异性.我们先对眼下基本的图像切割方法做个概述,后面再对个别方法做具体的了解和学习. 1.基于阈值的切割方法 阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每一个像素的灰度值与阈值相比較,最后将像素依据比較结果分

opencv中的meanshift图像切割

Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法.Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割. 通过给出一组多维数据点,其维数是(x,y,r,g,b),均值漂移能够用一个窗体扫描空间来找到数据密度最大的区域,能够理解为数据分布最集中的区域. 在这里须要注意,因为空间位置(也就是上面的x和y)的变化范围与颜色的变化范围(上面的r,g,b)有极大的不同,所以,meanshift对这两个维数要採用不同的窗体半径.在opencv自带的means

图像切割之(五)活动轮廓模型之Snake模型简单介绍

图像切割之(五)活动轮廓模型之Snake模型简单介绍 [email protected] http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了解了眼下主流的图像切割方法.以下咱们主要学习下基于能量泛函的切割方法.这里学习下Snake模型简单的知识,Level Set(水平集)模型会在后面的博文中说到. 基于能量泛函的切割方法: 该类方法主要指的是活动轮廓模型(active contour model)以及在其基础上发展出来的算法,其基本思想是

新手学,java使用分水岭算法进行图像切割(一)

近期被图像切割整的天昏地暗的,在此感谢老朋友周洋给我关于分水岭算法的指点!本来打算等彩色图像切割有个完满的结果再写这篇文章,可是考虑到到了这一步也算是一个阶段,所以打算对图像切割做一个系列的博文,于是先写这篇. 啰嗦了这么多!先看效果: 效果一般,存在着非常多过切割现象,但比没使用滤波之前的效果好非常多,过切割是分水岭算法的通病.这个兴许博文会继续解决. 本文用java实现的是基于自己主动种子区域的分水岭算法,注意本文是基于单色的切割,所以将输入图片首先进行灰度化处理,这个比較简单,不多提了:因

CRF图像切割简单介绍

这里主要是讲Conditional Random Fields(CRF)用于pixel-wise的图像标记(事实上就是图像切割).CRF经经常使用于 pixel-wise的label 预測.当把像素的label作为形成马尔科夫场随机变量且能够获得全局观測时,CRF便能够对这些label进行建模.这样的全局观測通常就是输入图像. 令随机变量Xi是像素i的标签. Xi∈L={l1,l2,...,lL} 令变量X是由X1,X2,...,XN组成的随机向量,N就是图像的像素个数. 如果图 G=(V,E)

高分辨率图像建筑物提取数据集制作

目录结构 /dataset/ xxxx.tif # 原始图像 image-3000 0.tif # 切割后的tif 1.tif ........ 0.json # 生成的json文件也放在该文件夹下 1.json ....... 0_json # 调用labelme_json_to_dataset 0.json 生成的0_json文件夹 img.png # 原始图片的png格式 info.yaml label.png # 标签图片 label_names.txt label_viz.png 1_

Android捕捉图像后在SurfaceView上变形显示问题的处理

我们在Android中经常会使用SurfaceView编写自定义的摄像头,可是有的时候会经常会出现图像的变形,我们就会很郁闷的问这到底是为什么呢?其实这个最根本的原因是SurfaceView和PreViewSize的尺寸不是同一个比率. 所谓PreViewSize就是在预览的时候帧数据的尺寸,SurfaceView是用来预览Camera的视图,它的尺寸也就是Screen全屏时候的大小.还有一个重要尺寸的是PictureSize,这个是拍照后图片的尺寸,就是所保存的结果图片的大小. 所以解决刚刚问