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

📄 shapeenhcommon.cpp

📁 《Visual C++小波变换技术与工程实践》靳济芳编著的光盘程序。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		Int blkx, 
		Int blky, 
		Int mblksize, 
		Int max_blkx)

{
    Int i, j, i2, j2, x, y, x2, y2, k, l;

    Int mborder		= MBORDER,
	mblksize_ext	= mblksize+(mborder<<1);/* bordered bab size in the current layer: 20 */
    Int border		= BORDER,
	blksize		= mblksize>>1,		/* bab size in the lower layer : 8 */
	blksize_ext	= blksize+(border<<1);	/* bordered bab size in the lower layer: 8 */
    Int width2 = object_width,
	height2 = object_height,
	width = width2 >> 1,
	height = height2 >> 1;
 
    /*-- Initialize bordered babs -----------------------------------*/
    for ( i=k=0; i<blksize_ext; i++)
	for( j=0; j<blksize_ext; j++, k++)
		bordered_lower_bab[k] = 0;

    for ( i=k=0; i<mblksize_ext; i++)
	for( j=0; j<blksize_ext; j++, k++)
		bordered_half_bab[k] = 0;

    for ( i=k=0; i<mblksize_ext; i++)
	for( j=0; j<mblksize_ext; j++, k++)
		bordered_curr_bab[k] = 0;
	
    /*-- Copy original babs ----------------------------------------*/
    for ( j=k=0, l=border*blksize_ext; j<blksize; j++, l+=blksize_ext ) 
        for ( i=0; i<blksize; i++, k++ ) 
	   bordered_lower_bab[l+i+border] = lower_bab[k];

    for ( j=k=0, l=mborder*blksize_ext; j<mblksize; j++, l+=blksize_ext ) 
        for ( i=0; i<blksize; i++, k++ ) 
	   bordered_half_bab[l+i+border] = half_bab[k];

    for ( j=k=0, l=mborder*mblksize_ext; j<mblksize; j++, l+=mblksize_ext ) 
        for ( i=0; i<mblksize; i++, k++ ) 
	   bordered_curr_bab[l+i+mborder] = curr_bab[k];

    /*----- Top border -----------------------------------------------*/

    /*-- Top border for lower  layer --*/
    x = blkx * blksize - border;
    y = blky * blksize - border;
    for( j=l=0, k=y*width; j<border; j++, k+=width, l+=blksize_ext ) 
    {
          for( i=0; i<blksize_ext; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
	  }
    }

   /*-- Top border for half  layer --*/
    x = blkx * blksize - border;
    y = blky * mblksize - mborder;
    for( j=l=0, k=y*width; j<mborder; j++, k+=width, l+=blksize_ext ) 
    {
          for( i=0; i<blksize_ext; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) ) 
	    	bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0);
	  }
    }

    /*-- Top border for current layer --*/
    x2 = blkx * mblksize - mborder;
    y2 = blky * mblksize - mborder;
    for( j2=l=0, k=y2*width2; j2<mborder; j2++, k+=width2, l+=mblksize_ext ) 
    {
          for( i2=0; i2<mblksize_ext; i2++ ) 
	  {
	    if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) ) 
	    	bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0);
	  }
    }

    /*----- Left border ----------------------------------------------*/

    /*--  Left border for the lower layer --*/
    x = blkx * blksize - border;
    y = blky * blksize;
    for( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext) 
    {
          for( i=0; i<border; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
	  }
    }

   /*--  Left border for the half higher layer --*/
    x = blkx * blksize - border;
    y = blky * mblksize;
    for( j=0, l=mborder*blksize_ext, k=y*width; j<mblksize; j++, k+=width, l+=blksize_ext) 
    {
          for( i=0; i<border; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) ) 
	    	bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0);
	  }
    }

   /*--  Left border for the current layer --*/
    x2 = blkx * mblksize - mborder;
    y2 = blky * mblksize;
    for( j2=0, l=mborder*mblksize_ext, k=y2*width2; j2<mblksize; 
					j2++, k+=width2, l+=mblksize_ext) 
    {
          for( i2=0; i2<mborder; i2++ ) 
	  {
	    if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) ) 
	    	bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0);
	  }
    }

    /*----- Right border ---------------------------------------------*/

    x = (blkx + 1) * blksize;
    y = blky * blksize;
    x2 = (blkx + 1) * mblksize;
    y2 = blky * mblksize;

    /*-- Right border for the lower layer --*/
    for ( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext) 
    {
          for ( i=0; i<border; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_lower_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0);
          }
    }
   /*----- Right border ---------------------------------------------*/

    x = (blkx + 1) * blksize;
    y = blky * blksize;
    x2 = (blkx + 1) * mblksize;
    y2 = blky * mblksize;

    /*-- Right border for the half layer --*/
    for ( j2=0, l=mborder*blksize_ext; j2<mblksize; j2++, l+=blksize_ext) 
    {
	  j = j2>>1;
	  k = (y+j)*width;

          for ( i=0; i<border; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) {
	    	bordered_half_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0);
		if(/* LowShape[k+x+i-1] == 0 && */ y+j+1 < height && j2%2==1) { /* avoid the odd subsampling mishap */
		  bordered_half_bab[l+i+blksize+border] =  ( LowShape[k+x+i] != 0) | ( LowShape[k+width+x+i] != 0);
		}
	    }
          }
    }

    /*-- Right border for the currnet layer --*/
    for ( j2=0, l=mborder*mblksize_ext; j2<mblksize; j2++, l+=mblksize_ext) 
    {
	  j = j2>>1;
	  k = (y+j)*width;

          for ( i2=0; i2<mborder; i2++ ) 
	  {
	    i = i2 >> 1;
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_curr_bab[l+i2+mblksize+mborder] = ( LowShape[k+x+i] != 0);
          }
    }
   
    /*----- Bottom border --------------------------------------------*/

    x = blkx * blksize - border;
    y = (blky + 1) * blksize;
    x2 = blkx * mblksize - mborder;
    y2 = (blky + 1) * mblksize;

    /*-- Bottom border for the lower layer --*/
    for ( j=0, l=(blksize+border)*blksize_ext, k=y*width; j<border; 
						j++, k+=width, l+=blksize_ext) 
    {
          for ( i=0; i<blksize_ext; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
          }
    }

    /*-- Bottom border for the half layer --*/
    for ( j2=0, l=(mblksize+mborder)*blksize_ext; j2<mborder; j2++, l+=blksize_ext) 
    {
	  j = j2>>1;
	  k = (y+j)*width;
	
          for ( i=0; i<blksize_ext; i++ ) 
	  {
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_half_bab[l+i] = ( LowShape[k+x+i] != 0);
          }
    }

   /*-- Bottom border for the current layer --*/
    for ( j2=0, l=(mblksize+mborder)*mblksize_ext; j2<mborder; j2++, l+=mblksize_ext) 
    {
	  j = j2>>1;
	  k = (y+j)*width;
	
          for ( i2=0; i2<mblksize_ext; i2++ ) 
	  {
	    i = i2>>1;
	    if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) 
	    	bordered_curr_bab[l+i2] = ( LowShape[k+x+i] != 0);
          }
    }

    return;
}

⌨️ 快捷键说明

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