邻居位置之间的平均值

时间:2013-04-11 23:22:34

标签: c

我有一个方形矩阵,我需要在每个矩阵位置的邻居之间做平均值,它们的所有邻居都在矩阵本身内。

用一个例子解释,如果我有这样的矩阵:

10 11  1  4
 5  1  6  9
 9  0  2  7
 7  4  9  8

平均值仅在(2,2),(2,3),(3,2)和(3,3)位置计算。

在这些操作之后,最终矩阵将在下面列出:

5.00  4.56
4.78  5.11

很抱歉我的解释很混乱,我是C语言的初学者,我在使用这个算法时遇到了很多困难。

对于能向我解释并向我展示解决方案的所有人,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于没有显示代码,我猜你的问题在于算法本身的创建,而不是C.

我建议1.具有平均3x3矩阵中的数字的函数。 2.制作一个循环,通过矩阵将此函数应用于适当的块。

这些步骤并不难完成,我相信你会在网上找到很多可以帮助你的代码。

答案 1 :(得分:0)

注意:建议您显示目前已尝试或尝试的内容。通常,没有任何先前尝试的一般性公开问题会被投票。既然您是初学者并且是图像处理的爱好者,那么我无法帮助您编写此代码并发布此解决方案以帮助您入门。

正如Paulpro评论的那样,您的问题是低通过滤器实现。在给定的数据矩阵中,您必须找出可以通过3 x 3窗口平均的点。因此,首先我将解释如何识别这些要点。请在下面找到带有注释的示例代码,以解释这些点的识别。

// Input Data
int input_array[4][4] = { {10, 11, 1, 4}, {5, 1, 6, 9}, {9, 0, 2, 7}, {7, 4, 9, 8}};

// To calculate the average 
float sum ;

// Row counter, column counter, dimension of the square matrix
int row_ctr, col_ctr, array_dimension;
int row, col;

array_dimension = 4; // Initialization

// Run the loop for the entire array    
for(row_ctr = 0; row_ctr < array_dimension; row_ctr++)
{
    // If the current row's top neighbor is outside the boundary or
    // the bottom neighbor is outside the boundary, PASS and continue with
    // next row
    if(((row_ctr - 1) < 0) || ((row_ctr + 1) >= array_dimension))
    {
        continue;
    }
    // Run the loop for array dimension
    for(col_ctr = 0; col_ctr < array_dimension; col_ctr++)
    {
         // If the current column's left neighbor is outside the boundary or
         // right neighbor is outside the boundary, PASS and continue with
         // next column
         if(((col_ctr - 1) < 0) || ((col_ctr + 1) >= array_dimension))
         {
              continue;
         }
         // Initialize sum to 0.0
         sum = 0.0;
         // Reset to Top Left corner by going (-1, -1) from current position
         row = row_ctr - 1; 
         col = col_ctr - 1;

         sum = input_array[(row+0)][col] + 
                 input_array[(row+0)][(col+1)]+ input_array[(row+0)][(col+2)];
         sum += input_array[(row+1)][col] + 
                  input_array[(row+1)][(col+1)]+ input_array[(row+1)][(col+2)];
         sum += input_array[(row+2)][col] + 
                  input_array[(row+2)][(col+1)]+ input_array[(row+2)][(col+2)];

         // Find the average    
         sum = sum / 9.0;
         printf("Average being found for (%d, %d) is %6.2f\n", row_ctr, col_ctr, sum);
     }
}

执行此代码时,输​​出将显示为

Average being found for (1, 1) is   5.00
Average being found for (1, 2) is   4.56
Average being found for (2, 1) is   4.78
Average being found for (2, 2) is   5.11