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

📄 cfsharpen.c

📁 image processing including fourier,wavelet,segmentation etc.
💻 C
字号:
/*--------------------------- MegaWave2 Module -----------------------------*//* mwcommandname = {cfsharpen};author = {"Jacques Froment"};version = {"1.1"};function = {"Sharpening of a color image using linear filtering"};usage = {   'p':[p=75]->p [0,99]  "percent of sharpening, default is 75%",   'l'->LumOnly          "perform sharpening on the luminance component only",   A->A                  "Input Cfimage",   B<-B                  "Output sharpened Cfimage"};*//*---------------------------------------------------------------------- v1.1: added -l option (JF)----------------------------------------------------------------------*/#include <stdio.h>#include  "mw.h"/*--- Megawave2 modules definition ---*/extern void cfchgchannels();#define SUM(in,out) (*out = (v * *in - u * (*(in-1) + *(in+1)+ *(in-A->ncol) +  *(in+A->ncol) + *(in-1-A->ncol) + \                 *(in-1+A->ncol) + *(in+1-A->ncol) + *(in+1+A->ncol))) / d)Cfimage cfsharpen(A,B,p,LumOnly)          Cfimage A,B;     float *p;     char *LumOnly;     {  float *ar,*ag,*ab,*br,*bg,*bb;  int x,y,Conv;  float u,v,d;  Cfimage T;  if ((A->nrow<3)||(A->ncol<3))    mwerror(FATAL,1,"Image too small !\n");  B = mw_change_cfimage(B, A->nrow, A->ncol);  if (B == NULL) mwerror(FATAL,1,"Not enough memory.\n");    u=*p/100.0;  v=9.0-u;  d=9.0*(1.0-u);  if (!LumOnly)    {      ar=A->red; ag=A->green; ab=A->blue;      br=B->red; bg=B->green; bb=B->blue;            for (y=0; y<A->nrow; y++)	for (x=0; x<A->ncol;x++)	  {	    if ((x==0)||(x==A->ncol-1)||(y==0)||(y==A->nrow-1)) 	      { *br=*ar; *bg=*ag; *bb=*ab;}	    else	      {		SUM(ar,br);		SUM(ag,bg);		SUM(ab,bb);	      }	    ar++; ag++; ab++;	    br++; bg++; bb++;	  }    }  else    {      if (A->model != MODEL_RGB)	mwerror(WARNING,1,"Input image does not use RGB color model !\n");      Conv=2; /* RGB<->HSV */      T=mw_new_cfimage();      cfchgchannels(&Conv, (int *) NULL, (int *) NULL, A, T);      mw_copy_cfimage(T,B);      ab=T->blue; bb=B->blue;      for (y=0; y<T->nrow; y++)	for (x=0; x<T->ncol;x++)	  {	    if ((x==0)||(x==T->ncol-1)||(y==0)||(y==T->nrow-1)) 	      *bb=*ab;	    else	      {		SUM(ab,bb);	      }	    ab++; bb++;	  }      cfchgchannels(&Conv, &Conv, (int *) NULL, B, T);            mw_copy_cfimage(T,B);      mw_delete_cfimage(T);    }    return(B);}

⌨️ 快捷键说明

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