【问题标题】:Fixing boundary issue in C修复 C 中的边界问题
【发布时间】:2012-09-24 20:43:30
【问题描述】:

我正在编写一个使用均值滤波器的图像平滑程序,但我似乎无法解决最后几个边界问题。我使用整数而不是图像。我已经为 1 个左手角返回正确的值,以及中间整数、左侧整数以及顶部和底部整数。目前我被困在导致边界问题的右侧整数集。

void side2(int a[10][20], int c[10][20], int m, int n)
{
    int i,j;
    for (i=1;i<m-1;i++) {
        for (j=0;j<n-1;j++) {
            c[i][j]=(0+0+a[i-1][j]+a[i+1][j]+a[i][j+1])/3;        
        }         
    } 
}

这只是计算右侧的函数,而不是任何一个角。

这是我得到的输出。要求用户为列和行输入一个数字,这会输出一个随机数生成的矩阵,然后是带有均值滤波器结果的平滑图像。如您所见,右侧很古怪,我似乎无法找到正确的边界值。谁能帮我找到正确的界限,这样我就可以停止得到这些古怪的数字了。

please enter number of columns and rows
5 5
66  49  74  73  44
47  73  69  27  97
96  63  79  68  35
82  86  28  22  14
59   3  24   5  22
The smoothed image is
48  71  63  482009141880
78  60  60  79764514
64  79  55  28696626048
80  31  41  29  19
42  56  12  222009815

【问题讨论】:

  • 我试过了,设置 i=0 会产生相同的结果。

标签: c matrix boundary


【解决方案1】:

您需要在无法进行过滤的边框处写 something。目前,您没有向例如c[1][n-1] 写入任何内容,因此您只会收到未初始化的垃圾邮件。

【讨论】:

  • 你的意思是这样的吗:c[i][n-1]=(0+0+a[i-1][j]+a[i+1][j]+a[i][j+1])/3;。这给了我很好的格式,但它没有做下面的计算。
  • 我的意思是像 for (int i = 0; i &lt; m; i++) { for (int j = 0; j &lt; n; j++) { c[i][j] = 0; }} 在你的功能开始。或任何其他将初始化 c 的条目,这些条目不是由您的主循环编写的。
  • 设置 c[i][n-1] 解决了这个问题,最初我输入了错误的平均值。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
相关资源
最近更新 更多