下面是我前一段时间改写的matlab的bwmorph函数的代码,这里拿来和大家分享,如果有什么改进可以给我一份!
改写的源码来源于matlab2008。
//2013年7月8号
//zzh编写
//骨架提取主函数
void CProptertyDlg::GetMyNewSkeleton(bool **img, bool **imgSkel,int imgHeight,int imgWidth)
{
//bool img1[576][720]={0};
int i,j;
bool **img1,**img2;
unsigned long int iter=1;
int done=0;
int flag;
int temp=0;
img1=new bool *[imgHeight];
for (i=0;i<imgHeight;i++)
{
img1[i]=new bool[imgWidth];
}
for (i=0;i<imgHeight;i++)
{
for (j=0;j<imgWidth;j++)
{
img1[i][j]=FALSE;
}
}
//bool img2[576][720]={0};
img2=new bool *[imgHeight];
for (i=0;i<imgHeight;i++)
{
img2[i]=new bool[imgWidth];
}
for (i=0;i<imgHeight;i++)
{
for (j=0;j<imgWidth;j++)
{
img2[i][j]=FALSE;
}
}
for(i=0;i<imgHeight;i++)
for(j=0;j<imgWidth;j++)
img1[i][j]=img[i][j];
while(!done)
{
flag=0;
skel(img1,img2,imgHeight,imgWidth);
//判断img2和img1是否相同
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
{
if( img1[i][j]==img2[i][j]) flag++;
}
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
img1[i][j]=img2[i][j];
done = ( (iter>=0xfffffffe)||flag==(imgHeight-2)*(imgWidth-2));
iter = iter+1;
}
//最后输出结果保存
for(i=0;i<imgHeight;i++)
for(j=0;j<imgWidth;j++)
imgSkel[i][j]=img2[i][j];
delete(img1);
delete(img2);
}
//骨架提取相关函数
bool CProptertyDlg::is3x3LogicalLutOneInOneOut(bool *lut)
{
bool result = true;
int lut_length = 512; /* always 512 for 3x3 lookup table */
unsigned short bit_mask = 16; /* on-bit corresponding to neighborhood center */
unsigned short k;
for (k = 0; k < lut_length; k++)
{
bool neighborhood_has_one_center = (k & bit_mask) != 0;
if ((neighborhood_has_one_center) && (lut[k] == 0))
{
result = false;
break;
}
}
return result;
}
//骨架提取相关函数
bool CProptertyDlg::is3x3LogicalLutZeroInZeroOut(bool *lut)
{
bool result = true;
int lut_length = 512; /* always 512 for 3x3 lookup table */
unsigned short bit_mask = 16; /* on-bit corresponding to neighborhood center */
unsigned short k;
for (k = 0; k < lut_length; k++)
{
bool neighborhood_has_zero_center = (k & bit_mask) == 0;
if ((neighborhood_has_zero_center) && (lut[k] != 0))
{
result = false;
break;
}
}
return result;
}
//骨架提取相关函数
void CProptertyDlg::applylutc(bool **imgIN, bool *lut, bool **imgOUT,int imgHeight,int imgWidth)
{
int c,r;
int temp=0;
if(is3x3LogicalLutZeroInZeroOut(lut))
{
for ( c= 1; c <imgWidth-1; c++)
{
for (r = 1; r < imgHeight-1; r++)
{
if(imgIN[r][c]!=0)
{
temp=imgIN[r-1][c-1]*1+imgIN[r][c-1]*2+imgIN[r+1][c-1]*4+imgIN[r-1][c]*8+imgIN[r][c]*16+imgIN[r+1][c]*32+imgIN[r-1][c+1]*64+imgIN[r][c+1]*128+imgIN[r+1][c+1]*256;
imgOUT[r][c]=lut[temp];
}
}
}
}
else if(is3x3LogicalLutOneInOneOut(lut))
{
for (c = 1; c < imgWidth-1; c++)
{
for (r = 1; r < imgHeight-1; r++)
{
if (imgIN[r][c]==0)
{
temp=imgIN[r-1][c-1]*1+imgIN[r][c-1]*2+imgIN[r+1][c-1]*4+imgIN[r-1][c]*8+imgIN[r][c]*16+imgIN[r+1][c]*32+imgIN[r-1][c+1]*64+imgIN[r][c+1]*128+imgIN[r+1][c+1]*256;
imgOUT[r][c]=lut[temp];
}
else
{
imgOUT[r][c]=TRUE;
}
}
}
}
else
{
for (c = 1; c < imgWidth-1; c++)
{
for (r = 1; r < imgHeight-1; r++)
{
temp=imgIN[r-1][c-1]*1+imgIN[r][c-1]*2+imgIN[r+1][c-1]*4+imgIN[r-1][c]*8+imgIN[r][c]*16+imgIN[r+1][c]*32+imgIN[r-1][c+1]*64+imgIN[r][c+1]*128+imgIN[r+1][c+1]*256;
imgOUT[r][c]=lut[temp];
}
}
}
}
//骨架提取子函数
void CProptertyDlg::skel(bool **imgIN, bool **imgOUT,int imgHeight,int imgWidth )
{
//8个查找表
bool skel1[512] = {
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0, 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 ,0 , 0 , 0 ,0 , 0 ,0 ,0 , 0 ,
0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 ,
0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0, 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 ,0 , 0 ,0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 ,0 , 0 , 0 , 0 , 0 , 0 ,0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
bool skel2[512]={
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
1 , 1 , 0 , 0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 ,0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
bool skel3[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
bool skel4[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 ,0 , 0 , 0 , 0 , 0};
bool skel5[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 1 , 0 , 0 , 0, 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0, 0 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
bool skel6[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
bool skel7[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
bool skel8[512]={
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 , 0 ,
0 , 0 , 0 ,0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ,
0 ,0 ,0 , 0 , 0 , 0 , 0 , 0};
//bool imgTemp[576][720]={0};
int i,j;
bool **imgTemp;
imgTemp=new bool *[imgHeight];
for (i=0;i<imgHeight;i++)
{
imgTemp[i]=new bool[imgWidth];
}
for (i=0;i<imgHeight;i++)
{
for (j=0;j<imgWidth;j++)
{
imgTemp[i][j]=FALSE;
}
}
for(i=0;i<imgHeight;i++)
for(j=0;j<imgWidth;j++)
imgTemp[i][j]=imgIN[i][j];
applylutc(imgTemp,skel1,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel2,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel3,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel4,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel5,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel6,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel7,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
applylutc(imgTemp,skel8,imgOUT,imgHeight,imgWidth);
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=!imgOUT[i][j];
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgTemp[i][j]=imgTemp[i][j]&&imgOUT[i][j];
//输出结果
for(i=1;i<imgHeight-1;i++)
for(j=1;j<imgWidth-1;j++)
imgOUT[i][j]=imgTemp[i][j];
delete(imgTemp);
}