- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并行图像细化算法和C代码实现选择自sboom的Blog
并行图像细化算法和C代码实现 选择自 sboom 的 Blog
并行图像细化算法和C代码实现
图像细化一般作为一种图像预处理技术出现,目的是提取源图像的骨架,即是将原图像中线条宽度大于1个象素的线条细化成只有一个象素宽,形成骨架,形成骨架后能比较容易的分析图像,如提取图像的特征.
细化分成串行细化和并行细化2中,串行细化即是一遍检测满足细化条件的点一边删除细化点,并行细化即是检测细化点的时候不进行点的删除只进行标记,而在检测完整幅图像后一次性去除要细化的点.
细化基本思想是层层剥夺,即从线条边缘开始一层一层向里剥夺,直到线条剩下一个象素的为止.进行细化算法前要先对图像进行2值化,即图像中直包含黑和白2中颜色.
细化算法:在微观上取检测点的8个临域(由于是并行细化,有些模板要扩展为12临域),如下xxxxoxxxx其中o为检测点x为其相邻点以下用1代表黑色点,用0代表白色点,用x代表任意颜色的点,要剥夺(删除)的点应满足一下8个模板中的一个.模板a(向右扩大)0x1x01110x1x模板b(向右扩大)00xx0111x11x模板c(向右扩大)x11x011100xx模板d111x1x000模板e1x01101x0模板fx00110x1x模板gx1x110x00模板h(向下扩大)000x1x111x1x
符合以上8个模板的点为要剥夺的点,因为符合这8个模板的点可以确认为线条边沿上的点.
而试事实上经过这8个模板并行细化后还有下面2种特殊的边沿点保留了下来,特殊边沿点1000010111特殊边沿点2001011001造成这种2种特殊点的原因扩大后的模板a和扩大后的模板h,扩大的的本意是防止偶数列(行)的线条被完全消去(并行细化并然的).解决方法是在并行细化后再进行一次串行细化,选取缩小后的模板a和模板h模板a(缩小后)0x10110x1模板h(缩小后)000x1x111其中缩小后的模板a解决了特殊情况1,缩小后的模板h解决了特殊情况2,注意这次是串行细化了.一下根据这个原理用C++Builder6.0实现,关键代码如下.
//--------------------------------BCB6 代码#include vcl.h#pragma hdrstop#includestdio.h#include Unit1.h
#includeFile1.h#includemath.h#includetime.h#includevector
#pragma pack(1)using namespace 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的数据。TColor* SwitchColor(unsigned char r,unsigned char g,unsigned char b){????????TColor *re=new TColor;????????*re=(r??| g8 | b16 );????????*re=*re 0x00ffffff;????????return re;}
void xxx(){????????FILE *f=fopen(f:\\1.bmp,rb);????????if(f==NULL)???????????? /*判断文件是否打开成功*/????????{???????????? ShowMessage(File open error);???????????? return;????????}
????????fseek(f,0,0);//移动到开头
????????//----------读BMP文件头????????BITMAPFILEHEADER_ *bmph=new BITMAPFILEHEADER_();????????if(fread((char*)bmph,s
文档评论(0)