首页 > 试题广场 >

数字图像,尤其是从宇宙飞船发回的数字图像可能会包含尖峰脉冲。

[问答题]

数字图像,尤其是从宇宙飞船发回的数字图像可能会包含尖峰脉冲。为第12道编程练习题添加消除尖峰脉冲的函数。该函数应该将每一个值和它上下左右的相邻值比较,如果该值与它周围每个值的差都大于1,就用所有相邻值的平均值(取与其最接近的整数)取代这个值。注意到边界上的点的相邻点少于4个,所以它们需要特殊处理。

/*  data example:

0 0 9 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 2 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 5 2 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 1 9 8 5 4 5 2 0 0 0 0 0 0 0 0 0

0 0 0 0 9 0 0 0 0 0 0 0 5 8 9 9 8 5 0 4 5 2 0 0 0 0 0 0 0 0

0 0 9 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 4 5 2 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 1 8 5 0 0 0 4 5 2 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 4 5 2 0 0 0 0 0

5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5

8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8

9 9 9 9 0 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 3 9 9 9 9 9 9 9

8 8 8 8 8 8 8 8 8 8 8 8 5 8 9 9 8 5 8 8 8 8 8 8 8 8 8 8 8 8

5 5 5 5 5 5 5 5 5 5 5 5 5 8 9 9 8 5 5 5 5 5 5 5 5 5 5 5 5 5

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 6 6 0 0 0 0 0 0

0 0 0 0 2 2 0 0 0 0 0 0 5 8 9 9 8 5 0 0 5 6 0 0 6 5 0 0 0 0

0 0 0 0 3 3 0 0 0 0 0 0 5 8 9 9 8 5 0 5 6 1 1 1 1 6 5 0 0 0

0 0 0 0 4 4 0 0 0 0 0 0 5 8 9 9 8 5 0 0 5 6 0 0 6 5 0 0 0 0

0 0 0 0 5 5 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 6 6 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 5 8 9 9 8 5 0 0 0 0 0 0 0 0 0 0 0 0

*/

推荐
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 FILE *fp;
 char name[30],photo[20][31],table[] = " .':~*=&%@";
 int num[20][30],row,column,i=0;
 printf("input the name of source file:");
 gets(name);
 if ( ( fp=fopen(name,"r") ) == NULL )
 {
 printf("Can't open %s",name);
 exit(1);
 }
 for (row=0; row<20; row++)
 for (column=0; column<30; column++)
 fscanf(fp,"%d",&num[row][column]);
 for (row=0; row<20; row++)
 for (column=0; column<30; column++)
 {
 if(row==0&&column==0)
 {
 if(   (num[row][column] - num[row][column+1])>1 && (num[row][column] - num[row+1][column])>1  )
 num[row][column] = ( num[row][column+1] + num[row+1][column] ) / 2 + 0.5;//加0.5是为了四舍五入
 }
 else if(row==0&&column==29)
 {
 if(   (num[row][column] - num[row][column-1])>1 && (num[row][column] - num[row+1][column])>1  )
 num[row][column] = ( num[row][column-1] + num[row+1][column] ) / 2 + 0.5;
 }
 else if(row==19&&column==0)
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row][column+1])>1  )
 num[row][column] = ( num[row-1][column] + num[row][column+1] ) / 2 + 0.5;
 }
 else if(row==19&&column==29)
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row][column-1])>1  )
 num[row][column] = ( num[row-1][column] + num[row][column-1] ) / 2 + 0.5;
 }
 else if(row==0)
 {
 if(   (num[row][column] - num[row][column-1])>1 && (num[row][column] - num[row+1][column])>1  && (num[row][column] - num[row][column+1])>1  )
 num[row][column] = ( num[row][column-1] + num[row+1][column] + num[row][column+1]) / 3 + 0.5;
 }
 else if(column==0)
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row+1][column])>1  && (num[row][column] - num[row][column+1])>1  )
 num[row][column] = ( num[row-1][column] + num[row+1][column] + num[row][column+1]) / 3 + 0.5;
 }
 else if(row==19)
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row][column-1])>1  && (num[row][column] - num[row][column+1])>1  )
 num[row][column] = ( num[row-1][column] + num[row][column-1] + num[row][column+1]) / 3 + 0.5;
 }
 else if(column==29)
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row+1][column])>1  && (num[row][column] - num[row][column-1])>1  )
 num[row][column] = ( num[row-1][column] + num[row+1][column] + num[row][column-1]) / 3 + 0.5;
 }
 else
 {
 if(   (num[row][column] - num[row-1][column])>1 && (num[row][column] - num[row+1][column])>1  && (num[row][column] - num[row][column-1])>1  && (num[row][column] - num[row][column+1])>1  )
 num[row][column] = ( num[row-1][column] + num[row+1][column] + num[row][column-1]) + num[row][column+1]/ 4 + 0.5;
 }
 }
 for (row=0; row<20; row++)
 {
 for (column=0; column<30; column++) 
 photo[row][column] = table[ num[row][column] ];
 photo[row][column] = '\0';
 } 
 for (row=0; row<20; row++)
 puts(photo[row]);
 printf("input the name of destination file:");
 gets(name);
 if ( ( fp=fopen(name,"w") ) == NULL )
 {
 printf("Can't open %s",name);
 exit(1);
 }
 for (row=0; row<20; row++)
 fprintf(fp,"%s\n",photo[row]);
 return 0;
}

发表于 2018-05-05 22:02:08 回复(0)