📄 处理..c
字号:
list0[i-1][j]=q[3][m];
}
}
wavelet_hmm_edgeh(Image[1],0,0,Image[1]->wid,Image[1]->hei,O);
InitHMM( phmm,2,256);
BaumWelch(phmm, T,O,alpha,beta,
gamma,pniter,plogprobinit,plogprobfinal,Dx,Dy);
for(m=1;m<=(Dx/8)*(Dy/8);m++)
{
ViterbiLog(phmm,T,O,delta,psi,q,pprob,m);
}
for(m=1;m<=(Dx/8)*(Dy/8);m++)
{
for(t=1;t<=T;t++)
{
if(q[t][m]==1) q[t][m]=0;
else q[t][m]=255;
}
}
m=0;
for(j=1;j<=Dx/8;j++) {
for(i=Dy/8;i<Dy/4;i++) {
m++;
list0[i][j-1]=q[1][m];
}
}
m=0;
for(j=1;j<=Dx/4;j+=2) {
for(i=Dy/4;i<Dy/2;i+=2) {
m++;
list0[i][j-1]=q[2][m];
}
}
m=0;
for(j=1;j<=Dx/2;j+=4) {
for(i=Dy/2;i<Dy;i+=4) {
m++;
list0[i][j-1]=q[3][m];
}
}
for(i=1;i<Dy-1;i++)
setimage(image,x+1,y+i,Dx-2,1,&list0[i][1]);
free(buf0);
free(list0);
}
//小波函数//
void wavelet_hmm_edgev(struct IMAGE *image,int x,int y,int Dx,int Dy,int **O)
{ BYTE *buf1,*buf0;
BYTE **list1,**list0;
int i,j, t,m,T;
float **original,**original1;
int **O1,**O2,**O3;
O1=allocate_2d_int(Dx/8,Dy/8,0);
O2=allocate_2d_int(Dx/8,Dy/8,0);
O3=allocate_2d_int(Dx/8,Dy/8,0);
buf1 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf0 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
getimage(image,x,y,Dx,Dy,buf1);
list1=(BYTE**) malloc(Dy*sizeof(BYTE*));
list0=(BYTE**) malloc(Dy*sizeof(BYTE*));
original=allocate_2d_float(Dx,Dy,0);
original1=allocate_2d_float(Dx,Dy,0);
T=3;
for(i=0;i<Dy;i++) {
list1[i]=buf1+i*Dx;
list0[i]=buf0+i*Dx;
}
for(i=0;i<Dx;i++) {
for(j=0;j<Dy;j++) {
original[i][j]=list1[i][j];
}
}
wavelet_transform_test(original,original1,Dx,Dy,1);
for(i=0;i<Dx;i++) {
for(j=0;j<Dy;j++) {
list0[i][j]=(BYTE)original1[i][j];
}
}
for(i=1;i<Dx/8;i++) {
for(j=Dy/8;j<Dy/4;j++) {
O1[i][j+1-(Dy/8)]=list0[i-1][j];
}
}
for(i=1;i<Dx/4-1;i+=2) {
for(j=Dy/4;j<Dy/2;j+=2) {
O2[(i+1)/2][(j-Dy/4)/2+1]=list0[i-1][j];
}
}
for(i=1;i<Dx/2-3;i+=4) {
for(j=Dy/2;j<Dy;j+=4) {
O3[(i+3)/4][(j-Dy/2)/4+1]=list0[i-1][j];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[1][m]=O1[i][j];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[2][m]=O2[i][j];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[3][m]=O3[i][j];
}
}
free(buf1);
free(buf0);
free(list1);
free(list0);
}
void wavelet_hmm_edgeh(struct IMAGE *image,int x,int y,int Dx,int Dy,int **O)
{ BYTE *buf1,*buf0;
BYTE **list1,**list0;
int i,j, t,m,T;
float **original,**original1;
int **O1,**O2,**O3;
O1=allocate_2d_int(Dx/8,Dy/8,0);
O2=allocate_2d_int(Dx/8,Dy/8,0);
O3=allocate_2d_int(Dx/8,Dy/8,0);
buf1 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf0 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
getimage(image,x,y,Dx,Dy,buf1);
list1=(BYTE**) malloc(Dy*sizeof(BYTE*));
list0=(BYTE**) malloc(Dy*sizeof(BYTE*));
original=allocate_2d_float(Dx,Dy,0);
original1=allocate_2d_float(Dx,Dy,0);
T=3;
for(i=0;i<Dy;i++) {
list1[i]=buf1+i*Dx;
list0[i]=buf0+i*Dx;
}
for(i=0;i<Dx;i++) {
for(j=0;j<Dy;j++) {
original[i][j]=list1[i][j];
}
}
wavelet_transform_test(original,original1,Dx,Dy,1);
for(i=0;i<Dx;i++) {
for(j=0;j<Dy;j++) {
list0[i][j]=(BYTE)original1[i][j];
}
}
for(j=1;j<=Dx/8;j++) {
for(i=Dy/8;i<Dy/4-1;i++) {
O1[i+1-(Dy/8)][j]=list0[i+1][j-1];
}
}
for(j=1;j<=Dx/4;j+=2) {
for(i=Dy/4;i<Dy/2-2;i+=2) {
O2[(i-Dy/4)/2+1][(j+1)/2]=list0[i+1][j-1];
}
}
for(j=1;j<=Dx/2;j+=4) {
for(i=Dy/2;i<Dy-4;i+=4) {
O3[(i-Dy/2)/4+1][(j+3)/4]=list0[i+1][j-1];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[1][m]=O1[i][j];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[2][m]=O2[i][j];
}
}
m=0;
for(i=1;i<Dx/8;i++) {
for(j=1;j<=Dy/8;j++) {
m++;
O[3][m]=O3[i][j];
}
}
free(buf1);
free(buf0);
free(list1);
free(list0);
}
//小波变换.................................//
void EX19(HWND hWnd)
{
if ((Image[0]->hdib==NULL)||(Image[0]->bitcount<8))
return;
ClearDDB();
WriteDDB(Image[0], 0, 0, 0, 0,512,512);
ColorToGray(0,1);
waveletf(Image[1],0,0,Image[1]->wid,Image[1]->hei);
WriteDDB(Image[1],512, 0, 0, 0,512,512);
InvalidateRect(hWnd,NULL,FALSE);
Offset=0;
}
//小波函数//
void waveletf(struct IMAGE *image,int x,int y,int Dx,int Dy)
{ BYTE *buf1,*buf0;
BYTE *buf2,*buf3;
BYTE **list1,**list0;
BYTE **list2,**list3;
int i,j,Ni,Nj;
float **original,**original1;
float mse=0;
Ni=Dx,Nj=Dy;
buf2 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf3 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf1 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf0 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
getimage(image,x,y,Dx,Dy,buf1);
list1=(BYTE**) malloc(Dy*sizeof(BYTE*));
list0=(BYTE**) malloc(Dy*sizeof(BYTE*));
list2=(BYTE**) malloc(Dy*sizeof(BYTE*));
list3=(BYTE**) malloc(Dy*sizeof(BYTE*));
original=allocate_2d_float(Ni,Nj,0);
original1=allocate_2d_float(Ni,Nj,0);
for(i=0;i<Dy;i++) {
list1[i]=buf1+i*Dx;
list0[i]=buf0+i*Dx;
list2[i]=buf2+i*Dx;
list3[i]=buf3+i*Dx;
}
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
original[i][j]=list1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,2);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list0[i][j]=(BYTE)original1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,3);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list2[i][j]=(BYTE)original1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,4);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list3[i][j]=(BYTE)original1[i][j];
}
}
for(i=1;i<Dy-1;i++)
setimage(image,x+1,y+i,Dx-2,1,&list0[i][1]);
free(buf1);
free(buf0);
free(buf2);
free(buf3);
free(list1);
free(list0);
free(list2);
free(list3);
}
void EX20(HWND hWnd)
{
if ((Image[0]->hdib==NULL)||(Image[0]->bitcount<8))
return;
ClearDDB();
WriteDDB(Image[0], 0, 0, 0, 0,512,512);
ColorToGray(0,1);
waveletf_hmm_edge(Image[1],0,0,Image[1]->wid,Image[1]->hei);
WriteDDB(Image[1],512, 0, 0, 0,512,512);
InvalidateRect(hWnd,NULL,FALSE);
Offset=0;
}
//小波函数//
void waveletf_hmm_edge(struct IMAGE *image,int x,int y,int Dx,int Dy)
{ BYTE *buf1,*buf0;
BYTE *buf2,*buf3;
BYTE **list1,**list0;
BYTE **list2,**list3;
int i,j,m,t,Ni,Nj;
float **original,**original1;
int **O1,**O2,**O3;
int **O;
int T=3;
struct HMM *phmm;
double **alpha, **beta, **gamma;
int *pniter;
double *plogprobinit;
double *plogprobfinal;
double **delta;
int **psi;
int **q;
double *pprob;
alpha=(double **)dmatrix(1,T,1,2);
beta=(double **)dmatrix(1,T,1,2);
gamma=(double **)dmatrix(1,T,1,2);
plogprobinit=dvector(1,T);
plogprobfinal=dvector(1,T);
pniter=ivector(1,T);
delta=(double **)dmatrix(1,T,1,2);
psi=(double **)dmatrix(1,T,1,2);
q=(int **)imatrix(1,T,1,Dx*Dy);
pprob=dvector(1,2);
phmm =(struct HMM*)malloc(sizeof(struct HMM*));
O1=allocate_2d_int(Dx,Dy,0);
O2=allocate_2d_int(Dx,Dy,0);
O3=allocate_2d_int(Dx,Dy,0);
O=(int **)imatrix(1,T,1,Dx*Dy);
Ni=Dx,Nj=Dy;
buf2 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf3 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf1 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
buf0 =(BYTE*) malloc(Dx*Dy*sizeof(BYTE));
getimage(image,x,y,Dx,Dy,buf1);
list1=(BYTE**) malloc(Dy*sizeof(BYTE*));
list0=(BYTE**) malloc(Dy*sizeof(BYTE*));
list2=(BYTE**) malloc(Dy*sizeof(BYTE*));
list3=(BYTE**) malloc(Dy*sizeof(BYTE*));
original=allocate_2d_float(Ni,Nj,0);
original1=allocate_2d_float(Ni,Nj,0);
for(i=0;i<Dy;i++) {
list1[i]=buf1+i*Dx;
list0[i]=buf0+i*Dx;
list2[i]=buf2+i*Dx;
list3[i]=buf3+i*Dx;
}
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
original[i][j]=list1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,2);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list0[i][j]=(BYTE)original1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,3);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list2[i][j]=(BYTE)original1[i][j];
}
}
wavelet_transform_test(original,original1,Ni,Nj,4);
for(i=0;i<Ni;i++) {
for(j=0;j<Nj;j++) {
list3[i][j]=(BYTE)original1[i][j];
}
}
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
O1[i][j]=list0[i-1][j-1];
}
}
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
O2[i][j]=list2[i-1][j-1];
}
}
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
O3[i][j]=list3[i-1][j-1];
}
}
m=0;
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
O[1][m]=O1[i][j];
}
}
m=0;
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
O[2][m]=O2[i][j];
}
}
m=0;
for(i=1;i<Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
O[3][m]=O3[i][j];
}
}
InitHMM( phmm,2,256);
BaumWelch0(phmm, T,O,alpha,beta,
gamma,pniter,plogprobinit,plogprobfinal,Dx,Dy);
for(m=1;m<=Dx*Dy;m++)
{
ViterbiLog(phmm,T,O,delta,psi,q,pprob,m);
}
for(m=1;m<=Dx*Dy;m++)
{
for(t=1;t<=T;t++)
{
if(q[t][m]==1) q[t][m]=0;
else q[t][m]=255;
}
}
m=0;
for(i=1;i<=Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
list0[i-1][j-1]=q[1][m];
}
}
m=0;
for(i=1;i<=Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
list2[i-1][j-1]=q[2][m];
}
}
m=0;
for(i=1;i<=Dx;i++) {
for(j=1;j<=Dy;j++) {
m++;
list3[i-1][j-1]=q[3][m];
}
}
for(i=1;i<Dy-1;i++)
setimage(image,x+1,y+i,Dx-2,1,&list0[i][1]);
free(buf1);
free(buf0);
free(buf2);
free(buf3);
free(list1);
free(list0);
free(list2);
free(list3);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -