Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的二维阵列与图像平滑_C_Arrays_Image_2d_Smoothing - Fatal编程技术网

c语言中的二维阵列与图像平滑

c语言中的二维阵列与图像平滑,c,arrays,image,2d,smoothing,C,Arrays,Image,2d,Smoothing,我必须编写一个程序,“将图像作为输入,由2d阵列像素值表示(为简单起见,每个像素可以由整数表示)。通过对阵列中的每个像素应用平均滤波器,输出得到的平滑图像” 我只是在学习阵列,但我甚至不知道如何启动这个程序。每当我搜索这个主题时,它就会变得非常混乱,因为我找到的每个例子或概念都在使用或谈论实际的图像。由于我的程序使用整数,我很难区分什么是需要的,什么不是。基本上我理解这个前提(至少我认为我理解),每个数字都必须取周围4个数字的平均值,但在基本概念之外,我不知道需要做什么。任何帮助、建议或示例都将

我必须编写一个程序,“将图像作为输入,由2d阵列像素值表示(为简单起见,每个像素可以由整数表示)。通过对阵列中的每个像素应用平均滤波器,输出得到的平滑图像”

我只是在学习阵列,但我甚至不知道如何启动这个程序。每当我搜索这个主题时,它就会变得非常混乱,因为我找到的每个例子或概念都在使用或谈论实际的图像。由于我的程序使用整数,我很难区分什么是需要的,什么不是。基本上我理解这个前提(至少我认为我理解),每个数字都必须取周围4个数字的平均值,但在基本概念之外,我不知道需要做什么。任何帮助、建议或示例都将非常有用

谢谢

0)是否加载图像?还是给了你整数数组

1) 我们从一个2D数组开始,生成一个副本:
inti[N][M];int New[N][M]

2) 循环浏览以下值:

for (i = 0; i < N; i++){
    for (j = 0; j < M; j++){
  • 注意,注意(i或j-1)<0和(i或j+1)>N或M。按照您认为合适的方式处理这些边界条件
显然,这是最简单的方法,但看起来你在一个班级里,所以这应该是好的

一个关键概念:

int values[20][20];
float intermediates[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    intermediates = (float)values[y][x];

int means[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    means[y][x] = (int) ( (float) (intermediates[y-1][x-1] + intermediates[y-1][x] + intermediates[y-1][x+1] + intermediates[y][x-1] + intermediates[y][x] + intermediates[y][x+1] + intermediates[y+1][x-1] + intermediates[y+1][x] + intermediates[y+1][x+1]) / 9.0F); //  Divisor is 9 because we added nine values and we're getting the mean
int值[20][20];
浮动中间体[20][20];
对于(int y=1;y<19;y++)
对于(int x=1;x<19;x++)
中间产物=(浮动)值[y][x];
int指[20][20];
对于(int y=1;y<19;y++)
对于(int x=1;x<19;x++)
是指[y][x]=(int)((浮动)(中间产物[y-1][x-1]+中间产物[y-1][x]+中间产物[y-1][x+1]+中间产物[y][x]+中间产物[y][x+1]+中间产物[y+1][x-1]+中间产物[y+1][x]+中间产物[y+1][x+1])/9.0F)除数是9,因为我们加了9个值,得到了平均值
现在有4个角落案例:中间产品[0][0],中间产品[0][19]等等,然后是所有各方


首先将这些值复制到“中间值”中,因为我不想将(浮点)放在所有内容的前面。

1)8位通道RGB图像是三层0-255整数的组合,因此适用于它们的内容适用于您2)您有一个2D图像。循环嵌套for循环中的值I[I,j],并在每个元素执行计算。注意:程序是否接受输入?档案?硬编码变量?你知道如何迭代整数数组吗?我从这里开始。分配有点模糊,我相信应该发生的是,用户应该输入他们想要多少列和行。。。然后,输出生成一个包含多少列和行的矩阵,然后输出“平滑”矩阵。到目前为止,我的程序接收用户对列和行的输入,并使用随机数生成矩阵。我只是停留在这个图像平滑方面。
int values[20][20];
float intermediates[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    intermediates = (float)values[y][x];

int means[20][20];
for (int y = 1; y < 19; y++)
  for (int x = 1; x < 19; x++)
    means[y][x] = (int) ( (float) (intermediates[y-1][x-1] + intermediates[y-1][x] + intermediates[y-1][x+1] + intermediates[y][x-1] + intermediates[y][x] + intermediates[y][x+1] + intermediates[y+1][x-1] + intermediates[y+1][x] + intermediates[y+1][x+1]) / 9.0F); //  Divisor is 9 because we added nine values and we're getting the mean