当前位置:文档之家› 图像细化算法大全

图像细化算法大全

图像细化算法大全
图像细化算法大全

圖像細化算法大全

#include "StdAfx.h"

#include

#include

void beforethin(unsigned char *ip, unsigned char *jp,

unsigned long lx, unsigned long ly)

{

unsigned long i,j;

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)

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;

}

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++;

}

}

{

f[kk21] = -1;

f[kk22] = -1;

shori =1;

}

else

f[kk21] = -1;

}

}

}while(shori);

free(g);

}

/////////////////////////////////////////////////////////////////////////

//Pavlidis細化算法

//功能:對圖像進行細化

//參數:image:代表圖像的一維數組

// lx:圖像寬度

// ly:圖像高度

// 無返回值

void ThinnerPavlidis(void *image, unsigned long lx, unsigned long ly) {

char erase, n[8];

char *f;

unsigned char bdr1,bdr2,bdr4,bdr5;

short c,k,b;

unsigned long i,j;

long kk,kk1,kk2,kk3;

f = (char*)image;

for(i=1; i

{

for(j=1; j

{

kk = i*ly + j;

if(f[kk])

f[kk] = 1;

}

}

for(i=0, kk1=0, kk2=ly-1; i

{

f[kk1]=0;

f[kk2]=0;

}

for(j=0, kk=(lx-1)*ly; j

f[j]=0;

f[kk]=0;

}

c=5;

erase =1;

while(erase)

{

c++;

for(i=1; i

{

for(j=1; j

{

kk=i*ly+j;

if(f[kk]!=1)

continue;

kk1 = kk-ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[3] = f[kk1];

n[2] = f[kk2];

n[1] = f[kk3];

kk1 = kk - 1;

kk3 = kk + 1;

n[4] = f[kk1];

n[0] = f[kk3];

kk1 = kk + ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[5] = f[kk1];

n[6] = f[kk2];

n[7] = f[kk3];

bdr1 =0;

for(k=0; k<8; k++)

{

bdr1|=0x80>>k;

}

if((bdr1&0252)== 0252)

continue;

f[kk] = 2;

b=0;

for(k=0; k<=7; k++)

{

b+=bdr1&(0x80>>k);

}

if(b<=1)

f[kk]=3;

if((bdr1&0160)!=0&&(bdr1&07)!=0&&(bdr1&0210)==0)

f[kk]=3;

else if((bdr1&&0301)!=0&&(bdr1&034)!=0&&(bdr1&042)==0) f[kk]=3;

else if((bdr1&0202)==0 && (bdr1&01)!=0)

f[kk]=3;

else if((bdr1&0240)==0 && (bdr1&0100)!=0)

f[kk]=3;

else if((bdr1&050)==0 && (bdr1&020)!=0)

f[kk]=3;

else if((bdr1&012)==0 && (bdr1&04)!=0)

f[kk]=3;

}

}

for(i=1; i

{

for(j=1; j

{

kk = i*ly + j;

if(!f[kk])

continue;

kk1 = kk - ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[3] = f[kk1];

n[1] = f[kk3];

kk1 = kk - 1;

kk2 = kk + 1;

n[4] = f[kk1];

n[0] = f[kk3];

kk1 = kk + ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[5] = f[kk1];

n[6] = f[kk2];

n[7] = f[kk3];

bdr1 = bdr2 =0;

for(k=0; k<=7; k++)

{

if(n[k]>=1)

bdr1|=0x80>>k;

if(n[k]>=2)

bdr2|=0x80>>k;

}

if(bdr1==bdr2)

{

f[kk] = 4;

continue;

}

if(f[kk]!=2)

continue;

if((bdr2&0200)!=0 && (bdr1&010)==0 && ((bdr1&0100)!=0 &&(bdr1&001)!=0 ||

((bdr1&0100)!=0 ||(bdr1 & 001)!=0) &&

(bdr1&060)!=0 &&(bdr1&06)!=0))

{

f[kk] = 4;

}

else if((bdr2&040)!=0 && (bdr1&02)==0 && ((bdr1&020)!=0 && (bdr1&0100)!=0 ||

((bdr1&020)!=0 || (bdr1&0100)!=0) &&

(bdr1&014)!=0 && (bdr1&0201)!=0)) {

}

else if((bdr2&010)!=0 && (bdr1&0200)==0 &&

((bdr1&04)!=0 && (bdr1&020)!=0 ||

((bdr1&04)!=0 || (bdr1&020)!=0) &&

(bdr1&03)!=0 && (bdr1&0140)!=0))

{

f[kk] = 4;

}

else if((bdr2&02)!=0 && (bdr1&040)==0 &&

((bdr1&01)!=0 && (bdr1&04)!=0 ||

((bdr1&01)!=0 || (bdr1&04)!=0) &&

(bdr1&0300)!=0 && (bdr1&030)!=0))

{

f[kk] = 4;

}

}

}

for(i=1; i

{

for(j=1; j

{

kk = i*ly + j;

if(f[kk]!=2)

continue;

kk1 = kk - ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[3] = f[kk1];

n[2] = f[kk2];

n[1] = f[kk3];

kk1 = kk - 1;

kk2 = kk + 1;

n[4] = f[kk1];

n[0] = f[kk3];

kk1 = kk + ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[5] = f[kk1];

n[6] = f[kk2];

n[7] = f[kk3];

for(k=0; k<=7; k++)

{

if(n[k]>=4)

bdr4|=0x80>>k;

if(n[k]>=5)

bdr5|=0x80>>k;

}

if((bdr4&010) == 0)

{

f[kk] = 5;

continue;

}

if((bdr4&040) == 0 && bdr5 ==0)

{

f[kk] = 5;

continue;

}

if(f[kk]==3||f[kk]==4)

f[kk] = c;

}

}

erase = 0;

for(i=1; i

{

for(j=1; j

{

kk = i*ly +j;

if(f[kk]==2||f[kk] == 5)

{

erase = 1;

f[kk] = 0;

}

}

}

}

}

/////////////////////////////////////////////////////////////////////////

//Rosenfeld細化算法

//功能:對圖像進行細化

//參數:image:代表圖像的一維數組

// lx:圖像寬度

// ly:圖像高度

// 無返回值

void ThinnerRosenfeld(void *image, unsigned long lx, unsigned long ly) {

char *f, *g;

char n[10];

char a[5] = {0, -1, 1, 0, 0};

char b[5] = {0, 0, 0, 1, -1};

char nrnd, cond, n48, n26, n24, n46, n68, n82, n123, n345, n567, n781;

short k, shori;

unsigned long i, j;

long ii, jj, kk, kk1, kk2, kk3, size;

size = (long)lx * (long)ly;

g = (char *)malloc(size);

if(g==NULL)

{

printf("error in alocating mmeory!/n");

return;

}

f = (char *)image;

for(kk=0l; kk

{

g[kk] = f[kk];

}

do

{

shori = 0;

for(k=1; k<=4; k++)

{

for(i=1; i

{

ii = i + a[k];

for(j=1; j

{

kk = i*ly + j;

if(!f[kk])

continue;

jj = j + b[k];

if(f[kk1])

continue;

kk1 = kk - ly -1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[3] = f[kk1];

n[2] = f[kk2];

n[1] = f[kk3];

kk1 = kk - 1;

kk3 = kk + 1;

n[4] = f[kk1];

n[8] = f[kk3];

kk1 = kk + ly - 1;

kk2 = kk1 + 1;

kk3 = kk2 + 1;

n[5] = f[kk1];

n[6] = f[kk2];

n[7] = f[kk3];

nrnd = n[1] + n[2] + n[3] + n[4]

+n[5] + n[6] + n[7] + n[8];

if(nrnd<=1)

continue;

cond = 0;

n48 = n[4] + n[8];

n26 = n[2] + n[6];

n24 = n[2] + n[4];

n46 = n[4] + n[6];

n68 = n[6] + n[8];

n82 = n[8] + n[2];

n123 = n[1] + n[2] + n[3];

n345 = n[3] + n[4] + n[5];

n567 = n[5] + n[6] + n[7];

n781 = n[7] + n[8] + n[1];

if(n[2]==1 && n48==0 && n567>0) {

if(!cond)

continue;

g[kk] = 0;

continue;

}

if(n[6]==1 && n48==0 && n123>0) {

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

if(n[8]==1 && n26==0 && n345>0) {

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

if(n[4]==1 && n26==0 && n781>0) {

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

if(n[5]==1 && n46==0)

{

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

if(n[7]==1 && n68==0)

{

if(!cond)

continue;

shori = 1;

continue;

}

if(n[1]==1 && n82==0)

{

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

if(n[3]==1 && n24==0)

{

if(!cond)

continue;

g[kk] = 0;

shori = 1;

continue;

}

cond = 1;

if(!cond)

continue;

g[kk] = 0;

shori = 1;

}

}

for(i=0; i

{

for(j=0; j

{

kk = i*ly + j;

f[kk] = g[kk];

}

}

}

}while(shori);

free(g);

}

/////////////////////////////////////////////////////////////////////////

//基於索引表的細化細化算法

//功能:對圖像進行細化

//參數:lpDIBBits:代表圖像的一維數組

// lWidth:圖像高度

// lHeight:圖像寬度

// 無返回值

BOOL WINAPI ThiningDIBSkeleton (LPSTR lpDIBBits, LONG lWidth, LONG lHeight)

{

//循環變量

long i;

long j;

long lLength;

unsigned char deletemark[256] = {

0,0,0,0,0,0,0,1, 0,0,1,1,0,0,1,1,

0,0,0,0,0,0,0,0, 0,0,1,1,1,0,1,1,

0,0,0,0,0,0,0,0, 1,0,0,0,1,0,1,1,

0,0,0,0,0,0,0,0, 1,0,1,1,1,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, 1,0,0,0,1,0,1,1,

1,0,0,0,0,0,0,0, 1,0,1,1,1,0,1,1,

0,0,1,1,0,0,1,1, 0,0,0,1,0,0,1,1,

0,0,0,0,0,0,0,0, 0,0,0,1,0,0,1,1,

1,1,0,1,0,0,0,1, 0,0,0,0,0,0,0,0,

1,1,0,1,0,0,0,1, 1,1,0,0,1,0,0,0,

0,1,1,1,0,0,1,1, 0,0,0,1,0,0,1,1,

0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,1,

1,1,1,1,0,0,1,1, 1,1,0,0,1,1,0,0,

1,1,1,1,0,0,1,1, 1,1,0,0,1,1,0,0

};//索引表

unsigned char p0, p1, p2, p3, p4, p5, p6, p7;

unsigned char *pmid, *pmidtemp;

unsigned char sum;

int changed;

bool bStart = true;

lLength = lWidth * lHeight;

unsigned char *pTemp = (unsigned char *)malloc(sizeof(unsigned char) * lWidth * lHeight);

// P0 P1 P2

// P7 P3

// P6 P5 P4

while(bStart)

{

bStart = false;

changed = 0;

//首先求邊緣點(並行)

pmid = (unsigned char *)lpDIBBits + lWidth + 1;

memset(pTemp, (BYTE) 0, lLength);

pmidtemp = (unsigned char *)pTemp + lWidth + 1;

for(i = 1; i < lHeight -1; i++)

{

for(j = 1; j < lWidth - 1; j++)

{

if( *pmid == 0)

{

pmid++;

pmidtemp++;

continue;

}

p3 = *(pmid + 1);

p2 = *(pmid + 1 - lWidth);

p1 = *(pmid - lWidth);

p0 = *(pmid - lWidth -1);

p7 = *(pmid - 1);

p6 = *(pmid + lWidth - 1);

p5 = *(pmid + lWidth);

p4 = *(pmid + lWidth + 1);

sum = p0 & p1 & p2 & p3 & p4 & p5 & p6 & p7;

if(sum == 0)

{

*pmidtemp = 1;

}

pmid++;

pmidtemp++;

}

pmid++;

pmid++;

pmidtemp++;

pmidtemp++;

}

//現在開始串行刪除

pmid = (unsigned char *)lpDIBBits + lWidth + 1; pmidtemp = (unsigned char *)pTemp + lWidth + 1;

for(i = 1; i < lHeight -1; i++)

{

for(j = 1; j < lWidth - 1; j++)

{

if( *pmidtemp == 0)

{

pmid++;

pmidtemp++;

continue;

}

p3 = *(pmid + 1);

p2 = *(pmid + 1 - lWidth);

p1 = *(pmid - lWidth);

p0 = *(pmid - lWidth -1);

p7 = *(pmid - 1);

p6 = *(pmid + lWidth - 1);

p5 = *(pmid + lWidth);

p4 = *(pmid + lWidth + 1);

p1 *= 2;

p2 *= 4;

p3 *= 8;

p4 *= 16;

p5 *= 32;

p6 *= 64;

p7 *= 128;

sum = p0 | p1 | p2 | p3 | p4 | p5 | p6 | p7;

if(deletemark[sum] == 1)

{

*pmid = 0;

bStart = true;

}

pmid++;

pmidtemp++;

}

pmid++;

pmid++;

pmidtemp++;

pmidtemp++;

}

}

return true;

}

剪纸图案大全

剪纸图案大全(一):牛的剪纸图案大全 剪纸图案大全(一):牛的剪纸图案大全1 剪纸图案大全(一):牛的剪纸图案大全2

剪纸图案大全(一):牛的剪纸图案大全3 剪纸图案大全(一):牛的剪纸图案大全4

剪纸图案大全(一):牛的剪纸图案大全5 剪纸知识 对于初学的人来说,了解一下剪纸的制作步骤是非常有益的。 1、起稿: 构思确定后,起稿布局,对画面进行具体的描绘,画出黑白效果。修改部分可用白粉。对初学者来说,稿子越细,刻起来越省事。若刻对称的稿子,画一半即可。 2、剪、刻: 如用刀子刻,须将画面和纸用订书机订好,将四角固定在蜡盘上,为了保证形象的准确,人物先刻五官部分,花鸟先刻细部或紧要处,再由中心慢慢向四周刻,刀的顺序如同写字一样由上到下,由左到右,由小到大,由细到粗,由局部到整体。尽量避免重复刀,不要的部位必须刻断,不能用手来撕,否则,剪纸会带毛边而影响美观。 3、揭离: 剪刻完毕后需要把剪纸一张张揭开,电光纸、绒面纸,因纸面光滑,比较容易揭开,单宣纸和粉连纸,因纸质轻薄,又经闷潮和上色,容易互相粘连,较难揭开,所以在揭离之前,必须先将刻好的纸板轻轻揉动,使纸张互相脱离,然后先将第一张纸角轻轻揭起,一边揭一边用嘴吹,帮助揭开。 4、粘贴:

揭离完毕后还需把成品粘贴起来,便于保存。方法有两种,第一是把剪纸平放在托纸上,用毛笔或细木条蘸浆糊由里向外一点点粘住,这种方法不能使剪纸全部粘平,速度也比较慢,优点是比较简便;第二是把剪纸反过来平放在纸上,然后用排笔蘸调稀了的浆糊,轻轻地平刷在要托的纸上,注意不要把纸刷皱起来,刷子上的浆糊一定要少,然后很快地把刷好浆糊的这一面扣合在剪纸的背面,用手轻轻压平,使剪纸全部平粘在托纸上。轻轻揭起晾干夹平保存。粘剂除浆糊外,白乳胶也可以。 5、成品修改: 在剪刻时有时会走刀剪坏,特别是刻纸。如果属大面积刻坏,就不易修好,如小面积刻坏,可把局部刻去,补上一块重新刻。彩色剪纸染错了是不能覆盖的,所以也只好将染坏部位刻去,重新补上一块再染。修改时一定要做到心中有数后再下刀。 6、复制——薰样——晒样 复制的方法有两种,一是将剪纸样放在白纸上,一起平放在水中,待水浸透纸面,而又不含水珠时,将刻纸和白纸同时拉出水面,贴在木版上,然后将纸朝下放在油灯上蒸,但不要离灯头太近以免烧焦。如果需要多量制作,可采取晒蓝图的方法:把原槁和刷好一层药液(赤血盐和水的溶液)的白纸,粘合在一起,用两块玻璃夹紧,放在阳光下晒3一4个小时,待显影后用清水洗净纸上的药液,即可复制。

算法模板【最后更新2014-05】

算法模板 网络122 王硕

目录 1.数学 1.1 矩阵 (2) 1.2 一次方程组的解 (3) 1.3 矩阵的逆 (4) 1.4 最大公约数 (6) 1.5 欧几里得扩展 (6) 1.6 素数表 (7) 1.7 判断素数 (8) 1.8 分解质因数 (9) 1.9 欧拉函数 (10) 1.10 欧拉函数表 (11) 1.11 mobius函数 (12) 1.12 数值积分 (12) 1.13 数值积分(精确) (13) 1.14 快速幂求余 (14) 1.15 进制转换 (15) 1.16 格雷码 (16) 1.17 高精度类 (16) 1.18 Fibonacci数列 (22) 1.19 FFT (23) 2.图论 2.1 拓扑排序 (24) 2.2 dijkstra (25) 2.3 floyd-warshall (26) 2.4 kruskal …………………26 3.序列 3.1 快速排序 (28) 3.2 逆序对 (28) 3.3 最长不降子序列长度 (30) 3.4 最长公共子序列长度 (31) 3.5 最长公共上升子序列长度 (31) 3.6 最长公共上升子序列 (32) 4.字符串 4.1 Sunday (34) 4.2 子串清除 (34) 4.3 KMP (37) 5.数据结构 5.1 并查集 (38) 5.2 树状数组 (39) 5.3 左偏树 (40) 5.4 哈希 (41) 5.5 RMQ线段树 (41) 6.其他 6.1 多边形面积 (43) 6.2 幻方构造 (43) 6.3 奇数阶次幻方 (45)

1.1矩阵 #include #include using namespace std; const int MAXN=100; const int MAXM=100; struct Matrix { int n,m; int a[MAXN][MAXM]; void clear() { m=n=0; memset(a,0,sizeof(a)); } Matrix operator +(const Matrix &b) const { Matrix tmp; tmp.n=n; tmp.m=m; for(int i=0;i

实验三 数学形态学及其应用

实验三 数学形态学及其应用 一.实验目的 1.了解二值形态学的基本运算 2.掌握基本形态学运算的实现 3.了解形态操作的应用 二.实验基本原理 腐蚀和膨胀是数学形态学最基本的变换,数学形态学的应用几乎覆盖了图像处理的所有领域,给出利用数学形态学对二值图像处理的一些运算。 膨胀就是把连接成分的边界扩大一层的处理。而收缩则是把连接成分的边界点去掉从而缩小一层的处理。 二值形态学 I(x,y), T(i,j)为 0/1图像Θ 腐蚀:[]),(&),(),)((),(0,j i T j y i x I AND y x T I y x E m j i ++=Θ== 膨胀:[]),(&),(),)((),(0 ,j i T j y i x I OR y x T I y x D m j i ++=⊕== 灰度形态学 T(i,j)可取10以外的值 腐蚀: []),(),(min ),)((),(1 ,0j i T j y i x I y x T I y x E m j i -++=Θ=-≤≤ 膨胀: []),(),(max ),)((),(1 ,0j i T j y i x I y x T I y x D m j i +++=⊕=-≤≤ 1.腐蚀Erosion: {}x B x B X x ?=Θ: 1B 删两边 2B 删右上 图5-1 剥去一层(皮)

2.膨胀Dilation: {}X B x B X x ↑⊕:= 1B 补两边 2B 补左下 图5-2 添上一层(漆) 3.开运算open :B B X ⊕Θ=)(X B 4.闭close :∨ Θ⊕=B B X X B )( 5.HMT(Hit-Miss Transform:击中——击不中变换) 条件严格的模板匹配 ),(21T T T =模板由两部分组成。1T :物体,2T :背景。 {} C x x i X T X T X T X ??=?21, 图5-3 击不中变换示意图 性质: (1)φ=2T 时,1T X T X Θ=? (2))()()(21T X T X T X C Θ?Θ=? C T X T X )()(21Θ?Θ= )/()(21T X T X ΘΘ= 6.细化/粗化 (1)细化(Thin ) C T X X T X XoT )(/??=?= X 2 1 1 1 2 3 T

图像细化算法大全

图像细化算法大全(1) #include "StdAfx.h" #include #include void beforethin(unsigned char *ip, unsigned char *jp, unsigned long lx, unsigned long ly) { unsigned long i,j; for(i=0; i0) 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");

剪纸计划文档

2017年3月—7月田坝中心学校 剪纸教学计划 剪纸组 领导确定剪纸作为我校的一个兴趣项目。本学期就开始在全校进行兴趣小组剪纸教学活动。学生原来一直都没有上过剪纸课,对剪纸只有初步的认识,剪纸的方法和技巧可以说是知之极少。同学对这个兴趣不大,不敢动手,担心自己剪不好等。本学期就开始在全校进行兴趣小组剪纸教学活动。即通过课余活动方式学习剪纸。剪纸组的老师负责指导学生学习剪纸。学生的剪纸工具材料由学校或学生购买,剪刀和裁纸刀交给本组的教师统一保管,上课前发放给学生。剪纸所需要的纸张由学生准备学校也准备一部分。 一、本学期剪纸课程的安排如下: 第二周《了解刻纸的有关知识》黄惠二年级教室 1、剪纸介绍; 2、剪纸、刻纸的特点; 3、介绍剪刻纸需要的工具:(玻璃、刻刀、剪刀、胶水); 4、欣赏剪纸作品; 5、剪纸、刻纸注意事项; 6、教师演示剪纸。 第三周对称剪纸——瓶子(对折剪)黄惠乒乓球桌旁 第四周对称剪纸——碗黄惠乒乓球桌旁 第五周对称剪纸——人物(对折剪)乒乓球桌旁等待 第六周随意剪纸——桂明莲场地在三年级教室

第七周学生完成一幅剪纸画——桂明莲场地在三年级教室 第八周对称剪纸——水果(梨子) 第九周对称剪纸——水果(苹果) 第十周——水果学生完成一幅剪纸画 第十一周对称剪纸——葫芦 第十二周对称剪纸——蝴蝶 第十三周对称剪纸——蝴蝶 第十四周对称剪纸——七星瓢虫 第十五周对称剪纸——小鱼 第十六周对称剪纸——金鱼 第十七周——学生完成一幅剪纸画 第十八周学期总结黄惠 二、其它事项安排: 1、第二周学生购买剪纸工具材料:平头剪刀一把裁纸刀一把、红纸或彩纸。第三周星期天学生把剪刀和裁纸刀交给保管。各班

数据结构与算法课程设计模板2018

湖南商学院《数据结构与算法》课程设计报告 姓名: 朱晰璋 学号: 160920044 专业: 计算机科学与技术 班级: 计科1602 指导教师: 邹文 职称: 计算机与信息工程学院 20 年月

目录 (结构供参考,请按照自己内容生成,标题宋体小二加粗,居中,段前后距各0.5行)1. 课程设计概(黑体四号,段前后距各0.5行) (1) 1.1问题描述(宋体小四,行距1.5倍) (1) 1.2基本要求 (1) 1.3开发环境 (1) 2. 数据结构及算法分析 (1) 2.1数据结构分析 (1) 2.2算法分析及相关算法介绍 (1) 3. 详细设计与实现 (1) 3.1软件结构 (1) 3.2模块设计 (1) 4. 测试与运行 (1) 5. 总结与收获 (1) 参考文献(要求五篇以上,格式请参考知网上论文) (1) 附录 (1)

课程设计评审表

课程设计题目(宋体小二号,加粗,居中,单倍行距,段前后0.5行) 1.课程设计概述(一级标题段前后距各0.5行) 1.1问题描述(目的,内容,题目等)(黑体小四,二级标题段前后距各0.5行) 1.2基本要求(要完成什么功能,有什么性能,) 1.3开发环境 2.数据结构及算法分析 2.1数据结构分析(采用线性表,树,图等等数据结构的原因及具体结构) 2.2算法分析(比如采用分治法,描述分治法的原理以及应用到此处的理由) 3.详细设计与实现 3.1总体结构(整体包括几个模块,每个模块的功能) 3.2模块设计(具体每个模块的设计实现,可以用流程图或伪码描述等,类似教材的算法描述,包括输入输出,算法功能,以及具体算法描述) 4.测试与运行(测试数据,运行结果,要截图) 5.总结与收获(如果采用多种算法或者数据结构解决同一个问题,请 在总结中用一小节比较各种不同算法空间效率,时间效率,如果没有请省略) 参考文献(要求五篇以上,格式如下,不清楚清参考知网上论文)参考文献通常应为近3年的,至少5篇,其中最好有英文文献。其具体写法为: 1. 专著、论文集、毕业论文、报告等 [序号]作者.书名[文献类型标志].出版地:出版者,出版年.起止页码(任选).(文

细化算法研究

论文中文摘要

毕业设计说明书(论文)外文摘要

1 绪论 图像的细化是数字图像预处理中的重要的一个核心环节。图像细化在图像分析和图像识别中如汉子识别、笔迹鉴别。指纹分析中有着广泛的应用。图像的细化主要有以下几个基本要求:(1)骨架图像必须保持原图像的曲线连通性。(2)细化结果尽量是原图像的中心线。(3)骨架保持原来图形的拓扑结构。(4)保留曲线的端点。(5)细化处理速度快。(6)交叉部分中心线不畸变。虽然现在人们对细化有着广泛的研究,细化算法的方法有很多。然而大多数算法如Hilditch算法和Rosenfield算法存在着细化后图形畸变,断点过多,在复杂的情况下关键信息的缺失等问题。基于上诉考虑,传统的细化算法已经无法满足如今的数字图像处理要求。因此,需要提出新的一种算法,来解决相关问题。 1.1 相关定义 1.1.1串行与并行 从处理的过程来看,主要可以分为串行和并行两类,前者对图像中当前象素的处理依据其邻域内象素的即时化结果,即对某一元素进行检测,如果该点是可删除点,则立即删除,且不同的细化阶段采用不同的处理方法;后者对当前的象素处理依据该象素及其邻域内各象素的前一轮迭代处理的结果,至始至终采用相同的细化准则。即全部检测完汉子图像边缘上的点后再删除可删除点。 1.1.2骨架 对图像细化的过程实际上是求一图像骨架的过程。骨架是二维二值目标的重要拓扑描述,它是指图像中央的骨架部分,是描述图像几何及拓扑性质的重要特征之一。骨架形状描述的方法是Blum最先提出来的,他使用的是中轴的概念。如果用一个形象的比喻来说明骨架的含义,那就是设想在t=0的时刻,讲目标的边界各处同时点燃,火焰以匀速向目标内部蔓延,当火焰的前沿相交时火焰熄灭,那么火焰熄灭点的集合就构成了中轴,也就是图像的骨架。例如一个长方形的骨架是它的长方向上的中轴线,

模板匹配算法

1、模板匹配法: 在机器识别事物的过程中,常常需要把不同传感器或同一传感器在不同时间、不同成像条件下对同一景象获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅图像中寻找相应的模式,这就叫匹配。在遥感图像处理中需要把不同波段传感器对同一景物的多光谱图像按照像点对应套准,然后根据像点的性质进行分类。如果利用在不同时间对同一地面拍摄的两幅照片,经套准后找到其中特征有了变化的像点,就可以用来分析图中那些部分发生了变化;而利用放在一定间距处的两只传感器对同一物体拍摄得到两幅图片,找出对应点后可计算出物体离开摄像机的距离,即深度信息。 一般的图像匹配技术是利用已知的模板利用某种算法对识别图像进行匹配计算获得图像中是否含有该模板的信息和坐标; 2、基本算法: 我们采用以下的算式来衡量模板T(m,n)与所覆盖的子图Sij(i,j)的关系,已知原始图像S(W,H),如图所示: 利用以下公式衡量它们的相似性: 上述公式中第一项为子图的能量,第三项为模板的能量,都和模板匹配无关。第二项是模板和子图的互为相关,随(i,j)而改变。当模板和子图匹配时,该项由最大值。在将其归一化后,得到模板匹配的相关系数: 当模板和子图完全一样时,相关系数R(i,j) = 1。在被搜索图S中完成全部搜索后,找出R的最大值Rmax(im,jm),其对应的子图Simjm即位匹配目标。显然,用这种公式做图像匹配计算量大、速度慢。我们可以使用另外一种算法来衡量T和Sij的误差,其公式为:

计算两个图像的向量误差,可以增加计算速度,根据不同的匹配方向选取一个误差阀值E0,当E(i,j)>E0时就停止该点的计算,继续下一点的计算。 最终的实验证明,被搜索的图像越大,匹配的速度越慢;模板越小,匹配的速度越快;阀值的大小对匹配速度影响大; 3、改进的模板匹配算法 将一次的模板匹配过程更改为两次匹配; 第一次匹配为粗略匹配。取模板的隔行隔列数据,即1/4的模板数据,在被搜索土上进行隔行隔列匹配,即在原图的1/4范围内匹配。由于数据量大幅减少,匹配速度显著提高。同时需要设计一个合理的误差阀值E0: E0 = e0 * (m + 1) / 2 * (n + 1) / 2 式中:e0为各点平均的最大误差,一般取40~50即可; m,n为模板的长宽; 第二次匹配是精确匹配。在第一次误差最小点(imin, jmin)的邻域内,即在对角点为(imin -1, jmin -1), (Imin + 1, jmin + 1)的矩形内,进行搜索匹配,得到最后结果。

灰度图像的腐蚀算法和细化算法(C#代码)

灰度图像的腐蚀算法和细化算法(C#代码) 最近做一些图像处理,需要将图像中的一些像素过滤一下,有网友给提了个名词:腐蚀算法。 我不是学图像学的,乍一听,觉得很神奇。后来从网上收集了一些VC代码,研究了一下,发 现其它也就是那么回事。尤其是腐蚀算法,我在以前的验证码图片去噪声的文章中提到过, 只是那是我不知叫什么名词,就从用途出发,叫做“根据周边点数去噪”。腐蚀的原理也一样, 就是根据当前点的周边点数(如3X3的,周边就有8个点)来修改当前点的状态的。 代码是我从VC代码中转译过来的,注释都沿用了原作者的文字(别说是剽窃,^_^)。唯一改 进的地方是,原代码功能只能处理0和255的二值灰度(搞不懂为什么这样,对于250、128 这样的都不行,还不如弄成二值灰度,别弄256灰度了),我将之改成了能根据0~255中任意 灰度划界的256灰度图像!以下是C#代码: 1 /// <summary> 2 /// 该函数用于对图像进行腐蚀运算。结构元素为水平方向或垂直方向的三个点, 3 /// 中间点位于原点;或者由用户自己定义3×3的结构元素。4 /// </summary> 5 /// <param name="dgGrayValue">前后景临界值</param> 6 /// <param name="nMode">腐蚀方式:0表示水平方向,1垂直 方向,2自定义结构元素。</param> 7 /// <param name="structure"> 自定义的3×3结构元素 </param> 8 public void ErosionPic(int dgGrayValue, int nMode, bool[,] structure) 9 { 10 int lWidth = bmpobj.Width; 11 int lHeight = bmpobj.Height; 12 Bitmap newBmp = new Bitmap(lWidth, lHeight); 13 14 int i, j, n, m; //循环变量 15 Color pixel; //像素颜色值 16 17 if (nMode == 0) 18 { 19 //使用水平方向的结构元素进行腐蚀 20 // 由于使用1×3的结构元素,为防止越界,所以不处理最左边和最右 边 21 // 的两列像素 22 for (j = 0; j < lHeight; j++) 23 { 24 for (i = 1; i < lWidth - 1; i++) 25 { 26 //目标图像中的当前点先赋成黑色 27 newBmp.SetPixel(i, j, Color.Black); 28 29 //如果源图像中当前点自身或者左右有一个点不是黑色, 30 //则将目标图像中的当前点赋成白色 31 if (bmpobj.GetPixel(i - 1, j).R > dgGrayValue ||

高精度模板(算法必备)

高精度计算模板 注意:减法、除法要用到compare函数 乘法需要加法的部分,加法需要减法部分 #include #include using namespace std; int compare(string str1, string str2) { if(str1.size() > str2.size()) return 1; else if(str1.size() < str2.size()) return -1; else return https://www.doczj.com/doc/8217659378.html,pare(str2); } int main() { char ch; string s1, s2, res; while(cin >> ch) { cin >> s1>> s2; switch(ch) { case '+': res = ADD_INT(s1, s2); break; //高精度加法 case '-': res = MINUS_INT(s1, s2); break; //高精度减法 case '*': res = MULTIPLY_INT(s1, s2); break; //高精度乘法 case '/': res = DIV_INT(s1, s2); break; //高精度除法,返回商 case 'm': res = MOD_INT(s1, s2); break; //高精度除法,返回余数 default : break; } cout << res<< endl; } return(0); }

string ADD_INT(string str1, string str2) { string MINUS_INT(string str1, string str2); int sign = 1; string str; if(str1[0] == '-') { if(str2[0] == '-') { sign = -1; str = ADD_INT(str1.erase(0, 1), str2.erase(0, 1)); }else { str = MINUS_INT(str2, str1.erase(0, 1)); } }else { if(str2[0] == '-') str = MINUS_INT(str1, str2.erase(0, 1)); else { string::size_type l1, l2; int i; l1 = str1.size(); l2 = str2.size(); if(l1 < l2) { for(i = 1; i <= (int)(l2 - l1); i++) str1 = "0" + str1; }else { for(i = 1; i <= (int)(l1 - l2); i++) str2 = "0" + str2; } int int1 = 0, int2 = 0; for(i = str1.size() - 1; i >= 0; i--) { int1 = (int(str1[i]) - 48 + int(str2[i]) - 48 + int2) %10; int2 = (int(str1[i]) - 48 + int(str2[i]) - 48 +int2) / 10; str = char(int1 + 48) + str; } if(int2 != 0) str = char(int2 + 48) + str; } } //运算后处理符号位 if((sign == -1) && (str[0] !='0')) str = "-" + str; return str; }

两种常用指纹图像细化算法的改进

收稿日期:2005-01-04 作者简介:唐为方(1969-),男,山东省荷泽市人,山东轻工业学院讲师,在读研究生,主要从事模式识别学习与研究。两种常用指纹图像细化算法的改进 唐为方1,陈 旭1,周大军2,王新刚2,罗 涛3 (1.山东大学计算机学院,山东济南 250014; 2.山东轻工业学院信息科学与技术学院,山东济南 250014; 3.中国重汽商用车有限公司,山东济南 250100) 摘要: 本文对指纹图像的细化算法进行了较深入的研究,结合这两种算法,提出了一种综合的细化算 法。经过实验证明,该算法能够很好的满足细化的要求。 关键词: 指纹;图像处理;图像细化;模板 中图分类号:TP391 文献标识码:A 文章编号:1004-4280(2005)01-0025-06 一个完整的自动指纹识别系统(AFIS )主要包括指纹采集、指纹图像预处理、指纹特征提取、指纹比对等几个模块。指纹图像预处理是一个很重要的部分,它的处理效果直接影响后续的特征提取和指纹比对。而指纹细化又是预处理中的一个重要环节,因为一般的特征提取都是在细化的基础上进行的,如果细化不好,将无法进行用常规的特征提取算法提取细节特征信息。 本文分别实现了快速细化算法和改进的OPT A 算法,分析了这两种算法存在的不足,发现了改进的OPT A 算法的两个缺陷:(1)在纹线分叉点处图像细化不彻底;(2)方向敏感性强。接着对改进的OPT A 算法进行了补充和修正,将两种细化算法有机结合,形成了一种综合的图像细化算法。实验结果证明,该算法细化完全,细化后的指纹骨架在纹线中心线,光滑无毛刺,运算速度也较快。 1 两种细化算法的局限分析 图1 快速细化后纹线局部放大图111 快速细化算法 该算法细化不彻底是由于它本身是4连通算法。为了方便起 见,用图示来具体说明它。 如图1所示为一段快速细化后的纹线局部放大图,黑格表示像 素值为1,白格表示像素值为0。图中第二行第二列的点P 22和第二 行第三列的点P 23的8邻域都有4个像素点,按照单像素宽的要求, 应该删除。而根据该算法流程,这两点的tsum =4,不等于2,不满足 删除的要求,而保留下来。因此最终细化后的纹线不是单像素宽,特 第19卷第1期 2005年3月山 东 轻 工 业 学 院 学 报JOURNA L OF SHANDONG INSTIT UTE OF LIGHT INDUSTRY Vol.19No.1Mar.2005

十二生肖剪纸图案大全

十二生肖剪纸图案大全 在剪纸上,十二生肖的剪纸是非常出名的,想知道十二生肖的剪纸图案吗?下面是瑞文小编收集整理的十二生肖剪纸图案大全,欢迎阅读参考~ 十二生肖剪纸图案1

十二生肖剪纸图案2

十二生肖剪纸图案3

十二生肖剪纸图案4 十二生肖剪纸图案5

十二生肖剪纸图案6

十二生肖剪纸图案7 十二生肖剪纸图案8 十二生肖:子(鼠)、丑(牛)、寅(虎)、卯(兔)、辰(龙)、巳(蛇)、午(马)、未(羊)、申(猴)、酉(鸡)、戌(狗)、亥(猪) 十二生肖起源于何时? 南朝人沈炯的《十二属诗》,是如今能见到最早的一首关于属相的诗: 鼠迹生尘案,牛羊暮下来。虎啸坐空谷,兔月向窗开。龙隰远青翠,蛇柳近徘徊。马兰方远摘,羊负始春栽。猴栗羞芳果,鸡跖引清杯。狗其怀物外,猪蠡窅悠哉。 这首诗每句句首以一生肖开头,每一句诗或描写其生活习性或点出相关神话传说,可见当时十二生肖这一概念已经很是成熟。 不过,往前追溯,还有如今可见更早的记载: 十二生肖源于何时,今已难于细考。长期以来,不少人将《论衡》视为最早记载十二生肖的文献。 《论衡·物势》载:“寅,木也,其禽,虎也。戌,土也,其禽,犬也。午,马也。子,鼠也。酉,鸡也。卯,兔也。亥,豕也。未,羊也。丑,牛也。巳,蛇也。申,猴也。”以上引文,只有十一种生肖,所缺者为龙。 《大集经》说“阎浮提外,四海方中,有十二兽,并是菩萨化导。人道初生,当菩萨住窟,即属此兽护持、得益。故汉地十二辰依此行也。”佛经中认为十二生肖来自菩萨点化的十二兽,源于印度。 具体是本土化起源,还是外来文化代入也不好做完全判断,不过这十二生肖与古时生活生产以及上古神话传说关系密不可分。 为什么是数量十二? 与我国古代天文历法有关,特别“十二”有着特别含义,十二代表“天之大数”。 《周礼·春官·冯相氏》记载:“掌十有二岁,十有二月,十有二辰,十日,二十八星之位,辨

第6章 腐蚀,膨胀,细化算法

第6章腐蚀,膨胀,细化算法 这一章的内容我认为是最有趣的。还记得前言中那个抽取骨架的例子吗?现在我们就来看看它是如何实现的。 今天所讲的内容属于一门新兴的学科:数学形态学(Mathematical Morphology)。说起来很有意思,它是法国和德国的科学家在研究岩石结构时建立的一门学科。形态学的用途主要是获取物体拓扑和结构信息,它通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。在图象处理中的应用主要是:(1)利用形态学的基本运算,对图象进行观察和处理,从而达到改善图象质量的目的;(2)描述和定义图象的各种几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。 限于篇幅,我们只介绍二值图象的形态学运算,对于灰度图象的形态学运算,有兴趣的读者可以阅读有关的参考书。在程序中,为了处理的方便,还是采用256级灰度图,不过只用到了调色板中的0和255两项。 先来定义一些基本符号和关系。 1.元素 设有一幅图象X,若点a在X的区域以内,则称a为X的元素,记作a∈X,如图6.1所示。 2.B包含于X 设有两幅图象B,X。对于B中所有的元素ai,都有ai∈X,则称B包含于(included in)X,记作B X,如图6.2所示。 3.B击中X 设有两幅图象B,X。若存在这样一个点,它即是B的元素,又是X的元素,则称B击中(hit)X,记作B↑X,如图6.3所示。 4.B不击中X 设有两幅图象B,X。若不存在任何一个点,它即是B的元素,又是X的元素,即B和X的交集是空,则称B不击中(miss)X,记作B∩X=Ф;其中∩是集合运算相交的符号,Ф表示空集。如图6.4所示。 图6.1 元素 图6.2 包含

保持连通的边缘细化算法

国 防 科 技 大 学 学 报 第26卷第4期 JOURNA L OF NA TIONA L UNIVERSITY OF DEFE NSE TECHNO LOGY V ol.26N o.42004 文章编号:1001-2486(2004)04-0051-06 保持连通的边缘细化算法Ξ 谭郁松,周兴铭 (国防科技大学计算机学院,湖南长沙 410073) 摘 要:传统的图像边缘检测算子一般都只能得到多像素宽边缘,这为后续的图像处理带来了一定困难。 结合边缘走向趋势的估计技术以及对连通关键点判断的方法,提出了一种新型的边缘细化算法———保持连 通的边缘细化算法。该算法能在保持边缘原有信息(连通和走向)的前提下,以较小的计算开销,给出理想的 或是可接受的单像素宽细化结果。 关键词:图像边缘细化;最长路径;关键点 中图分类号:TP391 文献标识码:A Connectivity Preserved Edge Thinning Algorithm T AN Y u2s ong,ZH OU X ing2ming (C ollege of C om puter,National Univ.of Defense T echnology,Changsha410073,China) Abstract:The traditional image edge detectors can only get multiple2pixel2wide edges usually,thus it is difficult to operate by post2 processing methods.The paper presents a novel edge thinning alg orithm named as connectivity preserved edge thinning alg orithm,which combines the detecting strategy of the connectivity critical point with the estimating method of the edge direction.It can preserve the origin edge in formation such as connection and direction.M oreover,it gets ideal or acceptable single2pixel2wide edges with lower computing cost. K ey w ords:image edge thinning;longest path;critical point 图像的边缘信息是其主要内容,边缘描述了图像中所包含物体的轮廓,表达了物体之间的关系。边缘处理是图像处理领域中的基础技术,它为更复杂的图像分割、区域增长、目标识别、模式识别等操作奠定了重要基础。但是在传统的边缘检测算法中,所得到的边缘可能很“厚”,远非理想中的单像素宽,这为后续的图像处理引入了较大的困难,如边缘曲线的拟合等。 本文提出了保留连通的边缘细化算法(C onnectivity Preserved Edge Thinning Alg orithm,CPET A),该算法在局部区域上寻找最长路径用以粗略估计边缘的走向趋势,利用关键点的思想来保证边缘的连通。试验结果令人满意。 1 相关研究 正由于边缘细化算法较为重要,因此其一直以来都得到学者的关注,并已取得了一定的研究成果。现有的边缘细化算法可粗略地分为两大类:基于二值边缘图像的方法以及基于数学形态学的方法。前者见Zhang[1]、Hall[2]、H olt[3]、Park[4]、Prewer[5]等的工作,而基于数学形态学的方法见Lee[6]、Lobregt[7]、Bernard[8]以及车武军[9]等的工作。 二值边缘图像便是只包含是否归属于边缘点的信息,真为1,假为0。在此类方法中,细化效果较好且速度较快的算法是文献[2,3]中所给出的HSCP算法。因此,该算法也选用为本文的实验参考算法。首先给出图像中像素点的8连通域示意图,如图1所示。 Ξ收稿日期:2004-03-08 作者简介:谭郁松(1976—),男,博士生。

一种有效的指纹图像细化算法

《现岱曳圣蘧苤》圣QQ墨笙蓥!墨翅盛墓至墨!翅垒进簋垫廑旦燕苤g 一种有效的指纹图像细化算法 何晶,范九伦 (西安邮电学院陕西西安710061) 摘要:0PTA方法是一个经典的指纹图像细化方法,针对OPTA法的不足提出改进的0PTA方法能够得到完全细化的指纹图像,细化后图像纹线扭曲小。但是改进的OPTA方法还存在细化后的图像容易产生毛刺的不足,为此提出一组改进模板,即在改进的OPTA模板的基础上增加一组去除毛刺的模扳。实验表明,通过该算法得到的细化指纹图像在保持连通性的基础上光滑无毛刺,取得了更为理想的细化结果。 关键词:图像处理;细化;模板;毛刺 中图分类号:TP391.4文献标识码:B文章编号:1004—373X(2008)18—143—03 AnEffectiveThinningAlgorithmforFingerprintImage HEJing,FANJiulun (Xi’finInstituteofPostandTelecommunications,Xi7an,710061,China) Abstract:OPTAmethodisaclassicalthinningmethodforfingerprintimage.ImprovedOPTAmethod,whichisproposedtoovercometheinsufficiencyoftheOPTAmethod。canobtainacompletethinningresult,andcaneliminatethedistortionoftheskeleton.ButtheimprovedOPTAthinningalgorithmhasadeficiencyofbeingeasytOgetburrsafterthinning.Todealwiththisproblem,asetofameliorativetemplatesisaddedinthispaper.Experimentalresultsshowthatthenewalgorithmcannotonlykeepconnective,butalsokeepsmoothwithoutburrs.Moreidealthinningresultisobtained. Keywords:imageprocessing;thinning;template;burr 1引言 迄今为止,生物特征识别技术已经成为最为方便与安全的识别技术[1]。由于指纹具有惟一性、稳定性、可采集性、与主体永不分离性等优点,指纹识别成为生物特征识别中关注度很高,应用较多的主要技术[2。]。自动指纹识别系统(AFIS)是个人身份认定的一种重要手段。一个完整的指纹识别系统主要包括:指纹图像采集、滤除图像噪声、对图像进行二值化处理、细化图像、特征点提取和特征点比对等几个部分。其中,细化是指纹图像预处理中耗时最长、要求最高的一部分。 指纹细化又称骨架化,是自动指纹识别系统中重要的预处理组成部分,细化结果的好坏直接影响特征点提取的有效性。研究人员已经提出了很多细化方法,按迭代方式可分为串行算法、并行算法和串并行混合算法。串行细化算法是指每次迭代的结果依赖于像素处理的先后顺序,因而某一像素点的删除或保留与处理顺序有关。并行细化算法进行细化时可以把相同的判定条件应用于所有的像素点,与处理顺序无关,所以从原理上 收稿日期:2008一03一03 基金项目:国家自然科学基金资助项目(60572133)将优于串行细化算法。而串并行混合算法就是串行和并行混合的方法。已经提出的并行细化方法有很多:OPTA细化算法、Hall细化算法、Rosedfeld细化算法、ZR细化算法等一寸]。 针对oPTA方法(One—PassThinningAlgo-rithm,oPTA)中细化不完全、细化速度较慢的不足,文献[8]提出了改进的OPTA算法(Improved0PTAThinningAlgorithm),获得了较好的细化效果。但改进算法还存在方向敏感性强,在水平和竖直方向容易出现毛刺等问题[9]。本文针对改进的OPTA方法存在的这些不足,在其基础上增加一组去除毛刺的模板,获得了更好的细化效果。 2OPTA算法 对于一幅二值指纹图像,设其背景点的像素值为0,前景点的像素值为1。OPTA算法是从图像的左上角开始,对每一个前景点元素(像素值为1的点,即模板中的P5)抽取出如图1所示的模板邻域。并将该邻域与给定的删除模板(见图2)相比较,如果该邻域的像素值与8个删除模板中的任一个相匹配则删除该点,否则保留该点。为了保持连通性,抽取的元素的邻域再和图3 】43  万方数据

雷达高分辨距离像模板自动生成算法

第26卷第6期2010年6月信号处理SIGNAL PROCESSING Vol.26.No.6Jun.2010 收稿日期:2009年4月23日;修回日期:2009年11月24日 雷达高分辨距离像模板自动生成算法 彭 勃 魏玺章 黎 湘 (国防科技大学电子科学与工程学院 长沙410073) 摘 要:模板的完备性直接决定了基于高分辨距离像的雷达目标识别系统的分类性能;在外场试验中限于目标姿态、 环境等因素难以获得准确标定的目标立体角范围内全姿态模板数据。针对一维距离像识别的工程实用化需求,本文基于数据驱动思想,提出了新的一维距离像聚类模板自动生成算法。与传统方法相比,本文方法在提高工程可行性的同时提高了识别性能。为满足实验需要,本文提出了新的基于MSTAR 图像的高分辨距离像反演算法,得到更精确的反演数据。基于该数据的实验结果表明算法解决了模板生成姿态角依赖性问题,提高了识别性能。 关键词:高分辨距离像;模板;聚类;反演 中图分类号:TN957.51 文献标识码:A 文章编号:1003-0530(2010)06-0819-05 Automatic Generation of High Range Resolution Profiles Models for Radar Recognition PENG Bo WEI Xi-zhang LI Xiang (School of Electronic Science and Engineering ,NUDT ,Changsha 410073) Abstract : The completeness of template directly determines the classification performance of automatic radar target recognition system based on high resolution range profiles (HRRP ).It ’ s difficult to get HRRP training data labeled accurately covering the entire target-aspect angle because of a lot of practical factors in the field experiments ,such as target attitude ,environment and so on.Accord-ing to the demand of engineering practical development , the dissertation proposes an algorithm of automatic generation of HRRP template based on data driving means.The proposed approach can be realized much easier with better recognition performance ,comparing with the traditional approach.The dissertation puts forward a new HRRP inversion method based on MSTAR image to get more precise HRRP using in cyber-emulation.At last , the result of the experiments proves the algorithm.Key words : High Range Resolution Profiles ;template ;clustering ;HRRP inversion 1引言 自从雷达自动目标识别研究兴起以来,基于高分 辨距离像的雷达目标识别系统因具有识别速率高、适应性广的优点受到广泛的关注。其中,高分辨距离像模板自动生成是该类自动目标识别系统的基础,直接关系到匹配识别的质量和效率。 高分辨距离像(HRRP )有着平移敏感性、幅度敏感性和目标姿态敏感性。识别系统通常采用预处理的方法克服HRRP 的平移敏感性和幅度敏感性,包括利用最小二乘准则实现距离对准、能量归一化以及去直流 漂移 [1,2] 。三种敏感性中尤为不容易克服的是目标特征信号姿态敏感性问题。高分辨雷达工作在光学区, 可以利用散射点模型较好描述[3] 。根据该模型,高分辨距离像随姿态角的变化主要来源于越距离单元游动 导致的散射点模型改变,即同一距离单元的散射点位 置随着雷达视角及目标姿态所发生的变化。 针对该问题,通常的解决办法可分为两类,一是基于HRRP 模板来进行匹配识别,二是提取目标姿态不 变性质的特征。1993年,文献[4]阐述了直接将一维距离像作为特征矢量的可行性,提出了基于匹配度的距离像匹配识别方法。文献[5]利用多幅飞机目标的一维距离像构造相关滤波器,减少了识别过程中所需 的运算量。文献[6]在每一个姿态角域内构造识别所 需的合成模板,文献[1]提出了基于姿态角的平均模板生成算法,文献[7]根据数据间的相近程度和样本数量 动态调节各帧模板训练数据的角度边界,优化了基于 姿态角的平均模板生成算法。文献[8,9]中采用混合 Gamma 模型来描述目标HRRP 的统计特性,将多分量的后验概率应用于距离像识别,充分利用目标HRRP

相关主题
文本预览
相关文档 最新文档