我必须编写一个程序,“将图像作为输入,由二维数组像素值表示(为简单起见,每个像素都可以用整数表示)。通过将均值滤波器应用于数组”。
我只是在学习数组,但我什至不知道如何启动这个程序。每当我搜索这个主题时,它都会变得非常混乱,因为我发现的每个示例或概念都在使用或谈论实际图像。由于我的程序使用整数,我很难区分需要什么和不需要什么。基本上我理解这个前提(至少我认为我理解),每个数字必须从它周围的 4 个数字中取平均值,但是在基本概念之外,我不知道需要做什么。任何帮助、建议或示例都会很棒。
谢谢
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;
显然这是最简单的方法,但看起来你在上课,所以应该没问题
一个关键概念:
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] 等,然后是所有边。
这些值首先被复制到“中间体”中,因为我不想把(浮动)放在所有东西的前面。