Cardoso Gabriel Schade - Microsoft Kinect: Crie aplicações interativas стр 14.

Шрифт
Фон

Casa do Código

<Slider Name="slider" Width="20" Orientation="Vertical"

Minimum="-27" Maximum="27" SmallChange="1" Value="0"

Height="{Binding ElementName=imagemCamera, Path=ActualHeight}"

Thumb.DragCompleted="slider_DragCompleted"

Grid.Column="1" Grid.Row="1"/>

</Grid>

</Window>

Como você pode ter notado, no código anterior o componente nomeado slider,

interpreta o evento DragCompleted. Este é o mesmo evento que utilizamos no ca-

pítulo anterior, agora temos de implementá-lo para que ele sincronize a propriedade ElevationAngle do Kinect com o valor do componente slider.

private void slider_DragCompleted

(object sender,

System.Windows.Controls.Primitives.DragCompletedEventArgs e)

{

kinect.ElevationAngle = Convert.ToInt32(slider.Value);

}

Após estas implementações você já pode utilizar a aplicação e alterar o ângulo

de elevação do sensor através do componente visual!

46

Casa do Código

Capítulo 4. Fluxo de Cores

Figura 4.8: Aplicação com o componente Slider

Antes de passarmos para o novo assunto eu sugiro que você faça mais testes com

outros tipos de formato para o fluxo de cores. Faremos uma pequena alteração para o formato infrared apenas para termos contato com este formato que é bem diferente dos demais.

Para alterar o formato do fluxo de cores basta passar por parâmetro no método

Enable o formato InfraredResolution640x480Fps30, além disso, em nossa

criação do BitmapSource precisamos alterar o PixelFormat para Gray16.

Com estas simples alterações, a imagem que será exibida no componente já será totalmente diferente, conforme a figura 4.9.

47

4.3. Refatoração

Casa do Código

Figura 4.9: Fluxo de cores infravermelho

É importante lembrar-se que o SDK não permite a inicialização de dois formatos

diferentes para o mesmo fluxo, então não é possível habilitar o infravermelho e o RGB, por exemplo, visto que o infravermelho apesar de ser bastante diferente não é um fluxo a parte, e sim uma configuração do fluxo de cores.

48

Capítulo 5

Fluxo de Profundidade

Neste capítulo iremos incrementar a aplicação anterior utilizando alguns conceitos de profundidade. Veremos como utilizaremos as informações deste fluxo para de-tectarmos usuários e a distância que os objetos estão do sensor.

5.1

Formatos

O sensor de profundidade do Kinect também possui diferentes tipos de formato e

para utilizar um formato é exatamente igual ao sensor RGB, ou seja, o parâmetro referente ao formato pode ser informado no método Enable do fluxo de profundidade ( DepthStream).

No formato deste fluxo, é possível alterar somente a resolução, pois em todos

os formatos o FPS (frames per second) ou quadros por segundo permanece 30 e a

quantidade de bits por pixel permanece 16. A figura 5.1 ilustra a diferença entre os formatos.

5.2. Entendendo um pouco mais sobre a profundidade

Casa do Código

Figura 5.1: Tabela de Configurações do sensor de profundidade

5.2

Entendendo um pouco mais sobre a profundi-

dade

A configuração de near mode disponível somente na versão do Kinect para Windows afeta diretamente este fluxo, pois o Kinect possui uma distância mínima e máxima para que ele possa verificar a distâncias dos objetos. Esta variação de distância no formato normal é de no mínimo 0,8m e no máximo 4m. No near mode esta distância

muda para 0,5m no mínimo e no máximo 3m. Você deve optar pelo formato que

mais se encaixa em sua aplicação, ou utilizar somente o modo padrão caso a versão de seu Kinect seja a versão para Xbox 360.

A imagem reconhecida pelo Kinect pode ser descrita em um formato conhecido

como RGBD, ou seja, Red-Green-Blue-Depth. Todo pixel de profundidade possui 16

bits, sendo 13 bits para informações referentes à profundidade e 3 bits que identificam se o pixel pertence à um humano.

Esta área de 3 bits que identifica os humanos é conhecida por player segmen-

tation data, ou seja, segmento de dados de um jogador ou usuário. A câmera de

profundidade é capaz de reconhecer até 6 usuários em frente ao sensor e todas estas informações citadas são obtidas através da classe DepthImagePixel.

O fluxo de profundidade está intimamente ligado ao fluxo de esqueleto, pois am-

bos utilizam recursos uns dos outros para obterem informações, um exemplo disso é o próprio player segmentation data. Para que estas informações estejam disponíveis no quadro de profundidade é necessário que o fluxo de esqueleto esteja ativo.

Todas estas informações referentes à profundidade são capturadas pelo Kinect

50

Casa do Código

Capítulo 5. Fluxo de Profundidade

utilizando uma técnica conhecida como Efeito Parallax. Este efeito ocorre natural-mente em nossa própria visão para identificar a distância dos objetos. Não cabe ao escopo deste livro a explicação deste efeito, mas para que você possa compreendê-lo de maneira simples e superficial imagine o seguinte cenário, você está em um carro em uma rodovia e ao lado desta rodovia existem diversas árvores e montanhas, ao olhar pela janela você consegue perceber que as árvores que estão mais próximas à rodovia passam mais rápido do que a montanha que está ao fundo, esta percepção

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке