⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 处理..c

📁 matlab 例程
💻 C
📖 第 1 页 / 共 4 页
字号:
			        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 + -