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