0

我必须编写一个程序,“将图像作为输入,由二维数组像素值表示(为简单起见,每个像素都可以用整数表示)。通过将均值滤波器应用于数组”。

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

谢谢

4

2 回答 2

0

0)加载图像?还是给定整数数组?

1)我们从一个二维数组开始,生成一个副本: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)< 0 且(i 或 j+1)> N 或 M。按照您认为合适的方式处理这些边界条件。

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

于 2012-09-28T21:06:51.697 回答
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 种极端情况:intermediates[0][0]、intermedias[0][19] 等,然后是所有边。

这些值首先被复制到“中间体”中,因为我不想把(浮动)放在所有东西的前面。

于 2012-09-28T21:08:21.223 回答