有 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.
沒有留言:
張貼留言