2010年7月1日 星期四

Image Scalar 4 ESL Flow Golden Model

有 ESL Design Flow 概念後, 底下就用最簡單的 Image Scalar 當例子 ESL Design Flow Ref: image scaling 利用內差補點的方式,做 Pixel 的放大縮小. 以 2x2 放大成 4x4 的例子 以 4x4 縮小成 2x2的例子 Ref : CIC 96學年決賽競賽題目(研究所組/大學組) 有了image scaling 的概念後, 開始建立 Golden Model scalar.c

#include <stdio.h>
#include <stdlib.h>


#define LEN 4 


int ARR[LEN][LEN];
int RST[2*LEN][2*LEN];

void DISPLAY_RST(){
int i;
int j;

printf ("i\tj\tRST\n");

for(i=0; i< 2*LEN; i++){
 for(j=0; j< 2*LEN; j++){
     printf("%d\t%d\t%d\n",i,j,RST[i][j]);
  }
  printf("\n");
}


}

void SCALAR_ARR(){
int i;
int j;

   for( i=0; i< LEN; i++){
     for( j=0; j< LEN; j++){
      
        RST[2*i][2*j] = ARR[i][j];
        
        if( i!=LEN-1 && j!=LEN-1 ){
           RST[2*i][2*j+1]  = (ARR[i][j] + ARR[i][j+1])>>1;
           RST[2*i+1][2*j]  = (ARR[i][j] + ARR[i+1][j])>>1;
           RST[2*i+1][2*j+1]= (ARR[i][j] + ARR[i+1][j] + ARR[i][j+1] + ARR[i+1][j+1] )>>2;
      
        }  else if( i!=LEN-1 && j==LEN-1 ){
           RST[2*i][2*j+1]    = ARR[i][j];
           RST[2*i+1][2*j]    = (ARR[i][j] + ARR[i+1][j])>>1;
           RST[2*i+1][2*j+1]  = (ARR[i][j] + ARR[i+1][j])>>1;
       
        } else if( i==LEN-1 && j!=LEN-1 ){
          RST[2*i+1][2*j]   = ARR[i][j];
          RST[2*i][2*j+1]   = (ARR[i][j] + ARR[i][j+1])>>1;
          RST[2*i+1][2*j+1] = (ARR[i][j] + ARR[i][j+1])>>1;
      
        } else {
          RST[2*i+1][2*j+1] = ARR[i][j];
          RST[2*i+1][2*j]   = ARR[i][j];
          RST[2*i][2*j+1]   = ARR[i][j];
        } 
         
   }
 }

}



void INI_ARR(){
int i;
int j;
int k=0;

  for( i=0; i< LEN; i++){
    for( j=0; j< LEN; j++){
          ARR[i][j] = k++;  
         printf("%d\t%d\t%d\n",i,j,ARR[i][j]);
    }
  }
printf("===========\n");
}


int main (int *argc,char argv[]){

INI_ARR();
SCALAR_ARR();
DISPLAY_RST();

return 0;
}
PS : 目前我們只考慮單向的"放大" function.

沒有留言:

張貼留言