-5

如何从该数组中排除和计算大于 4095 的值:编辑:所以这是我拥有的最终代码,它基本上适用于某些鼠标点,但是有一些例外情况,深度和相邻值之间的差异太大(参见http://s7.directupload.net/images/131007/uitb86ho.jpg上的绿色标记框)。屏幕截图中有一个红色框,其中包含 441 个像素,这 441 个像素的平均值为 1198 毫米,其中 x;y 15;463 上的深度仅为约 614 毫米。不知道较大的平均值来自哪里,因为它应该被 if 条件(d < 4095)排除在外。

    protected void imageIR_MouseClick(object sender, System.Windows.Input.MouseEventArgs e)
    {
        // Get the x and y coordinates of the mouse pointer.
        System.Windows.Point mousePoint = e.GetPosition(imageIR);
        double xpos_IR = mousePoint.X;
        double ypos_IR = mousePoint.Y;
        int x = (int)xpos_IR;
        int y = (int)ypos_IR;
        lbCoord.Content = "x- & y- Koordinate [pixel]: " + x + " ; " + y;
        int d = (ushort)pixelData[x + y * this.depthFrame.Width];
        d = d >> 3;
        int xpos_Content = (int)((x - 320) * 0.03501 / 2 * d/10);
        int ypos_Content = (int)((240 - y) * 0.03501 / 2 * d/10);
        xpos.Content = "x- Koordinate [mm]: " + xpos_Content;
        ypos.Content = "y- Koordinate [mm]: " + ypos_Content;
        zpos.Content = "z- Koordinate [mm]: " + (d);

        // Calculate the average value of array element
        int sum = 0;
        int i;
        i = Convert.ToInt32(gr_ordnung.Text);
        i = int.Parse(gr_ordnung.Text);
        int m;
        int n;
        int d_mw = 0;
        int count = 0;

        for (m = x - i; m <= x + i; m++)
        {
            for (n = y - i; n <= y + i; n++)
            {
                int d_array = (ushort)pixelData[m + n * this.depthFrame.Width];
                d_array = d_array >> 3;

                // With condition that if one of those values is more than 4095:
                if (d_array <= 4095)
                {
                    sum += d_array;
                    count++;
                    d_mw = sum / count;
                }

                tiefen_mw.Content = "Tiefen-MW [mm]: " + d_mw;
            }
        }
    }

因此,“if”条件意味着如果我有d_array(在我的情况下为 100 个像素)从 m = xi 到 m = x+i 和 n = yi 到 n = y+i 小于 4095,那么只需执行“正常” ' 计算其中平均值是所有值的总和除以总元素的数量。

现在“else”条件意味着:如果我的d_array值大于 4095,那么它应该被声明为 0,并且不计入平均值。我是否正确编写了语法?

4

2 回答 2

1

在你做任何事情之前检查一下:

int d_array = (ushort)pixelData[m + n * this.depthFrame.Width];
d_array = d_array >> 3;

if (d_array > 4095) continue; // <-- this

不知道更多..很难给你一个更好的答案。

于 2013-10-07T08:48:54.950 回答
1

你可以LinQ很容易地做到这一点:

using System.Linq;
...
int[] values = new int[10];
// Fill array
...
int[] usefulValues = values.Where(i => i <= 4095).ToArray();
int numberOfUselessValues = values.Length - usefulValues.Length;

更新>>>

试试这个:

int count_useful = 0; // <<< Important to initialise this here

for (m = x - i; m <= x + i; m++)
{
    for (n = y - i; n <= y + i; n++)
    {
        int d_array = (ushort)pixelData[m + n * this.depthFrame.Width];
        d_array = d_array >> 3;

        if (d_array <= 4095) 
        {
            sum += d_array;
            count_useful++;
        }
    }
}

d_mw = sum / count_useful; // <<< Perform these sums outside of the loop
tiefen_mw.Content = "Tiefen-MW [mm]: " + d_mw;
于 2013-10-07T08:51:40.890 回答