c中的2d阵列和图像平滑

时间:2012-09-28 20:55:16

标签: c arrays image 2d smoothing

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

我只是在学习数组,但我对如何开始这个程序感到迷茫。每当我搜索这个主题时,它就会变得非常混乱,因为我发现的每个例子或概念都在使用或谈论实际图像。由于我的程序使用整数,我很难区分需要什么和不需要什么。基本上我理解前提(至少我认为我这样做),每个数字必须取其周围4个数字的平均值,但在基本概念之外,我对于需要做什么感到茫然。任何帮助,建议或示例都会很棒。

感谢

2 个答案:

答案 0 :(得分:0)

0)加载图片?或者你给了整数数组?

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

2)遍历值:

for (i = 0; i < N; i++){
    for (j = 0; j < M; j++){

3)做你的东西

New[i][j] = sum(I[i-1][j] + I[i][j-1]...)/4;
  • 注意,小心(i或j-1)去&lt; 0和(i或j + 1)> N或M.如您所愿,处理这些边界条件。

显然这是最简单的方法,但它看起来像是在课堂上所以应该没问题

答案 1 :(得分:0)

一个关键概念:

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

现在有4个极端情况:中间体[0] [0],中间体[0] [19]等,然后是所有方面。

首先将值复制到“中间人”中,因为我不想把(浮动)放在所有内容之前。