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

📄 forder.c

📁 image processing including fourier,wavelet,segmentation etc.
💻 C
字号:
/*----------------------Megawave2 Module-----------------------------------*//*mwcommand  name = {forder};  version = {"2.1"};  author = {"Jacques Froment, Yann Guyonvarc'h"};  function = {"Order filtering : do Erosion/Dilation/Median in a 3x3 window"};  usage = {   'e':[e=5]->e[1,9]  "order of the pixel in a ascending list which sorts the values of the pixels in the window (1..9, default 5)",  'n':[n=1]->N[1,10000] "number of the filter's iterations (default 1)",  in->in "Input fimage",  out<-out "Output fimage"          };*//*---------------------------------------------------------------------- v2.0: fixed free() bug  (L.Moisan) v2.1: fixed nrow/ncol inversion bug  (L.Moisan)----------------------------------------------------------------------*/#include <stdio.h>#include "mw.h" #define MAXSIZE 9#define IN(i,j) (ptrIN[(j)*ncIN + (i)])static  int compare(k,l)         float *k, *l;         {  if (*k > *l) return(1);  if (*k < *l) return(-1);  return(0);}void forder(e,N,in,out)Fimage in,out;int *e,*N;                 { float *a; int n; register int i,j,ncIN; register float *ptrIN,*ptrOUT; a = ( float *) malloc ( MAXSIZE * sizeof(float));  if (!a) mwerror(FATAL,1,"not enough memory\n"); (*e)--; out=mw_change_fimage(out,in->nrow,in->ncol); if (!out) mwerror(FATAL,1,"not enough memory\n");  ncIN = in->ncol; for (n=1;n<=*N;n++)   {     if (n > 1) mw_copy_fimage(out,in);     ptrIN = in->gray;     ptrOUT = out->gray;     for(j=0;j<(in->nrow);j++)       for(i=0;i<(in->ncol);i++)	 {          	   if (j==0 && i==0)   	     {	       a[0] =   IN(i+1,j+1);	       a[1] =   IN(i,j+1);	       a[2] =   IN(i+1,j+1);	       a[3] =   IN(i+1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i+1,j);	       a[6] =   IN(i+1,j+1);	       a[7] =   IN(i,j+1);	       a[8] =   IN(i+1,j+1);	     }	   else  if (j==0 && i==((ncIN)-1))    	     {	       a[0] =   IN(i-1,j+1);	       a[1] =   IN(i,j+1);	       a[2] =   IN(i-1,j+1);	       a[3] =   IN(i-1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i-1,j);	       a[6] =   IN(i-1,j+1);	       a[7] =   IN(i,j+1);	       a[8] =   IN(i-1,j+1);	     }	   else   if (j==0 && i!=0 && i!=((ncIN)-1))    	     {	       a[0] =   IN(i-1,j+1);	       a[1] =   IN(i,j+1);	       a[2] =   IN(i+1,j+1);	       a[3] =   IN(i-1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i+1,j);	       a[6] =   IN(i-1,j+1);	       a[7] =   IN(i,j+1);	       a[8] =   IN(i+1,j+1);	     }	   else  if (j==((in->nrow)-1) && i==0)    	     {	       a[0] =   IN(i+1,j-1);	       a[1] =   IN(i,j-1);	       a[2] =   IN(i+1,j-1);	       a[3] =   IN(i+1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i+1,j);	       a[6] =   IN(i+1,j-1);	       a[7] =   IN(i,j-1);	       a[8] =   IN(i+1,j-1);	     }	   else if (j==((in->nrow)-1) && i==((ncIN)-1))    	     {	       a[0] =   IN(i-1,j-1);	       a[1] =   IN(i,j-1);	       a[2] =   IN(i-1,j-1);	       a[3] =   IN(i-1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i-1,j);	       a[6] =   IN(i-1,j-1);	       a[7] =   IN(i,j-1);	       a[8] =   IN(i-1,j-1);	     }	   else if (j==((in->nrow)-1) && i!=0 && i!=((ncIN)-1))    	     {	       a[0] =   IN(i-1,j-1);	       a[1] =   IN(i,j-1);	       a[2] =   IN(i+1,j-1);	       a[3] =   IN(i-1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i+1,j);	       a[6] =   IN(i-1,j-1);	       a[7] =   IN(i,j-1);	       a[8] =   IN(i+1,j-1);	     }	   else  if (i==0 && j!=0 && j!=((in->nrow)-1))    	     {	       a[0] =   IN(i+1,j+1);	       a[1] =   IN(i,j+1);	       a[2] =   IN(i+1,j+1);	       a[3] =   IN(i+1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i+1,j);	       a[6] =   IN(i+1,j-1);	       a[7] =   IN(i,j-1);	       a[8] =   IN(i+1,j-1);	     }	   else  if (i==((ncIN)-1) && j!=0 && j!=((in->nrow)-1))    	     {	       a[0] =   IN(i-1,j+1);	       a[1] =   IN(i,j+1);	       a[2] =   IN(i-1,j+1);	       a[3] =   IN(i-1,j);	       a[4] =   IN(i,j);	       a[5] =   IN(i-1,j);	       a[6] =   IN(i-1,j-1);	       a[7] =   IN(i,j-1);	       a[8] =   IN(i-1,j-1);	     }	   else {	     a[0] =  IN(i-1,j-1);	     a[1] =   IN(i,j-1);	     a[2] =   IN(i+1,j-1);	     a[3] =   IN(i-1,j);	     a[4] =   IN(i,j);	     a[5] =   IN(i+1,j);	     a[6] =   IN(i-1,j+1);	     a[7] =   IN(i,j+1);	     a[8] =   IN(i+1,j+1);	   }	   qsort(a,9,sizeof(float) ,compare);	   *ptrOUT++ = a[*e];	 }   } free(a);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -