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