/*********************************/ /** Solution to ComputingII **/ /** Exercise 1(a) PJM 08/02/00 **/ /*********************************/ #pragma windows #include #include #include <\DBOS\graphics.h> // These libraries must be included #include // to use graphics functions void Plot_2D_Array(int *); // Function to plot grey-scale graph void filter(int *); // Function to filter image (1D) int main(void) { FILE *fp; int data[128][128]; //array to hold image data int *pointer; int row,col,ctrl; fp=fopen("noisy.dat","r"); for (row=0;row<128;row++) // load data into 2D array { for (col=0;col<128;col++) fscanf(fp,"%d",&data[row][col]); } fclose(fp); winio("%gr[black]%ww%lw",128,128,&ctrl); // OPEN GRAPHICS WINDOW pointer=&data[0][0]; // the variable "pointer" points to the data array filter(pointer); // FILTER DATA Plot_2D_Array(pointer); // pass the filtered data array to the Plot_2D_Array function } void Plot_2D_Array(int *array) { short i,rows,cols; // SET UP GREY SCALE for (i=0;i<256;i++) set_video_dac(i,i,i,i); // DISPLAY IMAGE for (rows=0;rows<128;rows++) { for (cols=0;cols<128;cols++) set_pixel(cols,rows,*(array+cols+(128*rows))); } } void filter(int *data_array) { int i,j,sum,average,xcoord,ycoord,check; int filter_array[128][128]; // Calculate average values for (i=0;i<128;i++) { for(j=1;j<127;j++) { sum=0; // set sum=0 for (xcoord=-1;xcoord<=1;xcoord++) // sum with neighbouring pixels sum=sum+*(data_array+j+xcoord+(128*i)); average=sum/3; // calculate average filter_array[i][j]=average; // set values in filtered array } } for (i=0;i<128;i++) // copy filtered array values for (j=1;j<127;j++) // into original array *(data_array+j+(128*i))=filter_array[i][j]; }