资源简介
可以有效地对汉字进行细化,提取骨架,进而为汉字的特征提取做准备。
代码片段和文件信息
//**************************************************************************
//Thinner.cpp
//细化算法实现文件
//**************************************************************************
#include “StdAfx.h“
#include
#include
#include “Thinner.h“
void beforethin(unsigned char *ip unsigned char *jp
unsigned long lx unsigned long ly)
{
unsigned long ij;
for(i=0; i {
for(j=0; j {
//这里要视前景是白点还是黑点而定,可以改动
//如果前景是白点,就是这样;反之反过来
if(ip[i*lx+j]>0)
jp[i*lx+j]=1;
else
jp[i*lx+j]=0;
}
}
}
/////////////////////////////////////////////////////////////////////////
//Hilditch细化算法
//功能:对图象进行细化
//参数:image:代表图象的一维数组
// lx:图象宽度
// ly:图象高度
// 无返回值
void ThinnerHilditch(void *image unsigned long lx unsigned long ly)
{
char *f *g;
char n[10];
unsigned int counter;
short k shori xx nrn;
unsigned long i j;
long kk kk11 kk12 kk13 kk21 kk22 kk23 kk31 kk32 kk33 size;
size = (long)lx * (long)ly;
g = (char *)malloc(size);
if(g == NULL)
{
printf(“error in allocating memory!\n“);
return;
}
f = (char *)image;
for(i=0; i {
for(j=0; j {
kk=i*ly+j;
if(f[kk]!=0)
{
f[kk]=1;
g[kk]=f[kk];
}
}
}
counter = 1;
do
{
printf(“%4d*“counter);
counter++;
shori = 0;
for(i=0; i {
for(j=0; j {
kk = i*ly+j;
if(f[kk]<0)
f[kk] = 0;
g[kk]= f[kk];
}
}
for(i=1; i {
for(j=1; j {
kk=i*ly+j;
if(f[kk]!=1)
continue;
kk11 = (i-1)*ly+j-1;
kk12 = kk11 + 1;
kk13 = kk12 + 1;
kk21 = i*ly+j-1;
kk22 = kk21 + 1;
kk23 = kk22 + 1;
kk31 = (i+1)*ly+j-1;
kk32 = kk31 + 1;
kk33 = kk32 + 1;
if((g[kk12]&&g[kk21]&&g[kk23]&&g[kk32])!=0)
continue;
nrn = g[kk11] + g[kk12] + g[kk13] + g[kk21] + g[kk23] +
g[kk31] + g[kk32] + g[kk33];
if(nrn <= 1)
{
f[kk22] = 2;
continue;
}
n[4] = f[kk11];
n[3] = f[kk12];
n[2] = f[kk13];
n[5] = f[kk21];
n[1] = f[kk23];
n[6] = f[kk31];
n[7] = f[kk32];
n[8] = f[kk33];
n[9] = n[1];
xx = 0;
for(k=1; k<8; k=k+2)
{
if((!n[k])&&(n[k+1]||n[k+2]))
xx++;
}
if(xx!=1)
{
f[kk22] = 2;
continue;
}
if(f[kk12] == -1)
{
f[kk12] = 0;
n[3] = 0;
xx = 0;
for(k=1; k<8; k=k+2)
{
if((!n[k])&&(n[k+1]||n[k+2]))
xx++;
}
if(xx != 1)
{
f[kk12] = -1;
continue;
}
f[kk12] = -1;
n[3] = -1;
}
if(f[kk21]!=-1)
{
f[kk22] = -1;
shori = 1;
continue;
}
f[kk21] = 0;
n[5] = 0;
xx = 0;
for(k=1; k<8; k=k+2)
{
if((!n[k])&&(n[k+1]||n[k+2]))
{
xx++;
}
}
if(xx ==
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
....... 13805 2002-10-06 10:22 248850四种不同的图像细化算法\Thinner.cpp
....... 634 2002-10-06 09:44 248850四种不同的图像细化算法\Thinner.h
文件 3413 2009-09-08 17:39 248850四种不同的图像细化算法\Thinner.dsp
文件 33792 2009-09-08 17:39 248850四种不同的图像细化算法\Debug\vc60.idb
文件 28672 2009-09-08 17:39 248850四种不同的图像细化算法\Debug\vc60.pdb
文件 41984 2009-09-08 22:00 248850四种不同的图像细化算法\Thinner.ncb
文件 1393 2009-09-08 17:39 248850四种不同的图像细化算法\Thinner.plg
文件 539 2009-09-08 19:26 248850四种不同的图像细化算法\Thinner.dsw
文件 53760 2009-09-08 22:00 248850四种不同的图像细化算法\Thinner.opt
目录 0 2009-09-08 17:39 248850四种不同的图像细化算法\Debug
目录 0 2009-09-08 17:18 248850四种不同的图像细化算法
----------- --------- ---------- ----- ----
177992 11
- 上一篇:基于混沌映射的语音加解密实现
- 下一篇:JK触发器源代码+测试代码+实验截图
评论
共有 条评论