Перелистывание 2D-изображения, которое хранится в одномерном массиве в F # - PullRequest
0 голосов
/ 03 ноября 2011

Я работаю с Kinect и пытаюсь получить данные глубины и обработать их.

По сути, когда я обрабатываю кадры глубины из Kinect, я хочу сохранить 2 - данные фронтальной глубины плеера испина.Затем мне нужно перевернуть данные назад, чтобы потом их можно было использовать для построения 3D-модели плеера.

Проблемы, с которыми я сталкиваюсь, это переворачивание этих данных назад.

Iиметь данные глубины в виде 1D массива длины (320 * 240 = 76800), для которого я планировал перевернуть каждую строку (320 позиций в массиве), чтобы перевернуть изображение.

let mutable flipped = Array.create (320*240) 0
for y=0 to 239 do
    for x=0 to 319 do
        let n = ((y)* 320 + x)
        flipped.[n] <- depths.[(320*(y+1))-(n+1)]

System.Diagnostics.Debug.WriteLine("DepthsMax:" + Array.max(depths).ToString())
System.Diagnostics.Debug.WriteLine("FlippedMax:" + Array.max(flipped).ToString())

Массив глубин содержит данные, которые я пытаюсь перевернуть, однако этот код заставляет перевернутый массив полностью состоять из 0.

Кто-нибудь может заметить, что я делаю неправильно?

Спасибо

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

Прежде всего, обратите внимание, что вам не нужно, чтобы flipped был изменяемым, поскольку вы никогда не переназначаете его (вы только изменяете его).

В отношении самой проблемы.Учитывая n = 320*y + x, вы смотрите на индекс:

320 * (y+1) - n - 1
= 320 * y + 320 - (320 * y + x) - 1
= 319 - x

Таким образом, вы всегда обращаетесь к данным только из первой строки.Вы хотите получить доступ к индексу y*320 + (319-x) или 320*(y+1) - (x+1), а не 320*(y+1) - (n+1).

1 голос
/ 03 ноября 2011

Если я правильно понимаю, индексы строк не изменились, и данные в каждой строке должны быть обращены:

for row=0 to 239 do
  for col=0 to 319 do
    flipped.[320*row+col] <- depths.[320*row+319-col]
...