并行图像细化算法和C代码实现_第1页
并行图像细化算法和C代码实现_第2页
并行图像细化算法和C代码实现_第3页
并行图像细化算法和C代码实现_第4页
并行图像细化算法和C代码实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、并行图像细化算法和 C 代码实现 图像细化一般作为一种图像预处理技术出现 ,目的是提取源图像的骨架 , 即是将原图像中线条 宽度大于 1 个象素的线条细化成只有一个象素宽 , 形成' 骨架 ', 形成骨架后能比较容易的分析 图像 ,如提取图像的特征 .细化分成串行细化和并行细化 2 中, 串行细化即是一遍检测满足细化条件的点一边删除细化 点, 并行细化即是检测细化点的时候不进行点的删除只进行标记,而在检测完整幅图像后一次性去除要细化的点 .细化基本思想是 ' 层层剥夺 ', 即从线条边缘开始一层一层向里剥夺 , 直到线条剩下一个象素的 为止 .进行细化算法前要先

2、对图像进行 2值化,即图像中直包含 ' 黑'和'白'2 中颜色.细化算法 :在微观上取检测点的 8 个临域 ( 由于是并行细化 , 有些模板要扩展为 12 临域 ), 如下 xxx xoxxxx其中 o 为检测点 x 为其相邻点以下用1代表黑色点,用0代表白色点,用x代表任意颜色的点,要剥夺(删除)的点应满足一下 8 个模板中的一个 .模板 a( 向右扩大 )0x1x01110x1x模板 b( 向右扩大 )00xx0111x11x模板 c( 向右扩大 )x11x011100xx模板 d111x1x000模板 e1x01101x0模板 fx00110x1x模板 g

3、x1x110x00模板 h( 向下扩大 )000x1x111x1x符合以上 8 个模板的点为要剥夺的点 , 因为符合这 8 个模板的点可以确认为线条边沿上的点而试事实上经过这 8个模板并行细化后还有下面 2 种特殊的边沿点保留了下来 , 特殊边沿点 1000010111 特殊边沿点 2001011001造成这种 2 种特殊点的原因扩大后的模板 a 和扩大后的模板 h, 扩大的的本意是防止偶数列 ( 行 ) 的线条被完全消去 ( 并行细化并然的 ).解决方法是在并行细化后再进行一次串行细化 , 选取缩小后的模板 a 和模板 h 模板 a( 缩小后 )0x10110x1模板 h( 缩小后 )000

4、x1x111其中缩小后的模板a解决了特殊情况1,缩小后的模板h解决了特殊情况2,注意这次是串行细 化了.一下根据这个原理用 C+Builder6.0 实现,关键代码如下 ./BCB6 代码#include <vcl.h>#pragma hdrstop#include<stdio.h>#include "Unit1.h" #include"File1.h"#include<math.h>#include<time.h>#include<vector>#pragma pack(1) using na

5、mespace std;/*程序:图像细化作者 :sboom(Lingch)日期 :05 年 1 月 18 日*/BMP 文件头struct BITMAPFILEHEADER_short type;int bfSize;short re1,re2;int Offbits;/BMP 信息头struct BITMAPINFO_long size;long width,height;short planes,bitCount;long comp,sizeImg;long xpels,ypels;long used,important;/将BMP彩色表的数据校正到BCB的TColor的数据。TColo

6、r* SwitchColor(unsigned char r,unsigned char g,unsigned char b) TColor *re=new TColor;*re=(r | g<<8 | b<<16 );*re=*re & 0x00ffffff; return re;void xxx()FILE *f=fopen("f:1.bmp","rb"); if(f=NULL) /* 判断文件是否打开成功 */ ShowMessage("File open error"); return;fsee

7、k(f,0,0);/ 移动到开头/ 读BMP文件头BITMAPFILEHEADER_ *bmph=new BITMAPFILEHEADER_(); if(fread(char*)bmph,sizeof(BITMAPFILEHEADER_),1,f)=NULL) ShowMessage("File read error");return; / 读BMP信息头BITMAPINFO_ *bmpi=new BITMAPINFO_(); if(fread(char*)bmpi,sizeof(BITMAPINFO_),1,f)=NULL) ShowMessage("File

8、read error2"); return; fseek(f,bmph->Offbits,0);/显示一些信息Form1->Edit1->Text=IntToStr(bmph->bfSize); Form1->Edit2->Text=IntToStr(bmpi->width); Form1->Edit3->Text=IntToStr(bmpi->height); Form1->Edit4->Text=IntToStr(bmpi->comp); Form1->Edit5->Text=IntToSt

9、r(bmpi->used);int i,j,k,l,wc,pos;long N=bmph->bfSize- bmph->Offbits;/ 象素总数 unsigned char *image=new unsigned charN; / 位图矩阵fread(image,N,1,f);/读入位图矩阵int skip=0; /BMP文件 4 字节对齐if(bmpi->width%4=0)skip=0;else skip=4-bmpi->width%4;unsigned char color=0;TColor *tc;/!/2 值化 for(i=0;i<N;i+)

10、if(unsigned char)imagei<0xa0) imagei=(unsigned char)0;else imagei=(unsigned char)0xff;/int flag=1;long x,b;标记矩阵unsigned char *om=new unsigned charN; / for(i=0;i<N;i+) / 初始化 omi=0;while(flag=1) /flag=0时迭代结束flag=0;for( i=2;i<bmpi->height-2;i+) for(j=2;j<bmpi->width-2;j+) / 模板 a if(im

11、age(i-1)*(bmpi->width+skip)+j-1=0xff && image(i-1)*(bmpi->width+skip)+j+1=0 && image(i)*(bmpi->width+skip)+j-1=0xff && image(i)*(bmpi->width+skip)+j-0=0 && image(i)*(bmpi->width+skip)+j+1=0 && image(i)*(bmpi->width+skip)+j+2=0 && imag

12、e(i+1)*(bmpi->width+skip)+j-1=0xff && image(i+1)*(bmpi->width+skip)+j+1=0) om(i)*(bmpi->width+skip)+j=0xff; flag=1;continue;/ 模板 b if(image(i-1)*(bmpi->width+skip)+j-0=0&& image(i-1)*(bmpi->width+skip)+j+1=0&& image(i)*(bmpi->width+skip)+j-1=0xff&& i

13、mage(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j+1=0&& image(i)*(bmpi->width+skip)+j+2=0&& image(i+1)*(bmpi->width+skip)+j-1=0xff&& image(i+1)*(bmpi->width+skip)+j-0=0xff) om(i)*(bmpi->width+skip)+j=0xff;flag=1;continue;/ 模板 c if(imag

14、e(i-1)*(bmpi->width+skip)+j-1=0xff&& image(i-1)*(bmpi->width+skip)+j-0=0xff&& image(i)*(bmpi->width+skip)+j-1=0xff&& image(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j+1=0&& image(i)*(bmpi->width+skip)+j+2=0&& image(i+1

15、)*(bmpi->width+skip)+j-0=0&& image(i+1)*(bmpi->width+skip)+j+1=0)om(i)*(bmpi->width+skip)+j=0xff;flag=1;continue;/ 模板 d if(image(i-1)*(bmpi->width+skip)+j-1=0xff&& image(i-1)*(bmpi->width+skip)+j-0=0xff&& image(i-1)*(bmpi->width+skip)+j+1=0xff&& imag

16、e(i)*(bmpi->width+skip)+j-0=0&& image(i+1)*(bmpi->width+skip)+j-1=0&& image(i+1)*(bmpi->width+skip)+j-0=0&& image(i+1)*(bmpi->width+skip)+j+1=0) om(i)*(bmpi->width+skip)+j=0xff; flag=1;continue;/ 模板 e if(image(i-1)*(bmpi->width+skip)+j-1=0&& image(i-

17、1)*(bmpi->width+skip)+j+1=0xff&& image(i)*(bmpi->width+skip)+j-1=0&& image(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j+1=0xff&& image(i+1)*(bmpi->width+skip)+j-1=0&& image(i+1)*(bmpi->width+skip)+j+1=0xff)om(i)*(bmpi->width

18、+skip)+j=0xff;flag=1;continue;/ 模板 fif(image(i-1)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j-1=0&& image(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j+1=0xff&& image(i+1)*(bmpi->width+skip)+j-0=0xff&& image(i+1)*(bmpi

19、->width+skip)+j+1=0xff) om(i)*(bmpi->width+skip)+j=0xff;flag=1;continue;/ 模板 g if(image(i-1)*(bmpi->width+skip)+j-0=0xff&& image(i-1)*(bmpi->width+skip)+j+1=0xff&& image(i)*(bmpi->width+skip)+j-1=0&& image(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi

20、->width+skip)+j+1=0xff&& image(i+1)*(bmpi->width+skip)+j-0=0)om(i)*(bmpi->width+skip)+j=0xff;flag=1;continue;/ 模板 h if(image(i-2)*(bmpi->width+skip)+j-0=0&& image(i-1)*(bmpi->width+skip)+j-1=0&& image(i-1)*(bmpi->width+skip)+j-0=0&& image(i-1)*(bmpi-

21、>width+skip)+j+1=0&& image(i)*(bmpi->width+skip)+j-0=0&& image(i+1)*(bmpi->width+skip)+j-1=0xff&& image(i+1)*(bmpi->width+skip)+j-0=0xff&& image(i+1)*(bmpi->width+skip)+j+1=0xff) om(i)*(bmpi->width+skip)+j=0xff;flag=1;continue;for(i=0;i<N;i+)if(om

22、i=0xff)imagei=0xff;/ 第二次串行细化for( i=2;i<bmpi->height-2;i+)for(j=2;j<bmpi->width-2;j+)/ 缩小后的模板 a if(image(i-1)*(bmpi->width+skip)+j-1=0xff&& image(i-1)*(bmpi->width+skip)+j+1=0&& image(i)*(bmpi->width+skip)+j-1=0xff&& image(i)*(bmpi->width+skip)+j-0=0&& image(i)*(bmpi->width+skip)+j+1=0&& image(i+1)*(bmpi->width+skip)+j-1=0xff&& image(i+1)*(bmpi->width+skip)+j+1=0) image(i)*(bm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论