Facebook RSS Feed
 
Kinect & Leap Motion: Kızılötesi Görüntüye Ulaşım
Tarih: 05.10.2012, Platform: .NET 4.5, IDE: Visual Studio 2012, Level: 200

Kinect'in üzerindeki kızılötesi verici, derinlik görüntüsü oluşturmak için ve bunun sonucunda da iskelet yapısını algılamak için kullanılıyor. Kızılötesi vericiye bağlı özellikler, ışık kaynağı Kinect'den geldiği için karanlıkta da kullanılabiliyor. Yapılan güncellemelerle birlikte, artık ortamın kızılötesi görüntüsü de elde edilebiliyor. Yazımızda, kızılötesi görüntü özelliğini kullanarak karanlıkta görüntü elde etmek üzerinde duracağız.

Öngereksinimler

Kinect ile uygulama geliştirmek için, www.kinectforwindows.com adresinden Kinect SDK'yı indirip kurmanız gerekiyor.

Çalışma Mantığı

Kızılötesi görüntü uygulaması, RGB görüntü ile aynı mantıkta çalışır. Görüntü formatını Infrared 640x480 30fps olarak ayarladığımızda, saniyede 30 kez 640x480 çözünürlüğündeki kızılötesi görüntü uygulamamıza iletilir. Gelen görüntüyü uygun biçime çevirerek uygulamamızdaki bir image elementi üzerinde gösterebiliriz yada bu veri dizisi üzerinde direkt çalışabiliriz.

Uygulama

Visual Studio ile "Kinect Infrared Goruntu" adında bir WPF uygulaması oluşturalım. Proje referanslarına "Microsoft.Kinect.dll" dosyasını ekleyelim. Geliştireceğimiz uygulama çalıştığında elde edeceğimiz ekran görüntüsü aşağıdaki gibi olacak:

-

Uygulamamızın arayüz tasarımına ait kodlar:

[XAML] MainWindow.xaml

<Window x:Class="KinectInfraredGoruntu.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Kinect Infrared Görüntü" Height="480" Width="640"
        Loaded="Window_Loaded" Closing="Window_Closing" SizeToContent="WidthAndHeight"
        WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize">
    <Grid>
        <Image Name="Image" Width="640" Height="480"/>
    </Grid>
</Window>

Uygulama kodlarımız ise şöyle olacak:

[C#] MainWindow.xaml.cs

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Kinect;
 
namespace KinectInfraredGoruntu
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// Kinect sensörü
        /// </summary>
        KinectSensor kinect;
 
        /// <summary>
        /// Renk bilgisini tutacak Bitmap
        /// </summary>
        WriteableBitmap infraredBitmap;
 
        /// <summary>
        /// Infrared görüntüyü tutacak byte dizisi
        /// </summary>
        private byte[] infraredPixels;
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // Kinect bilgisayara bağlıysa
            if (KinectSensor.KinectSensors.Count > 0)
            {
                // Bulunan ilk sensörü kullan
                kinect = KinectSensor.KinectSensors[0];
 
                // Kinect sensörü başlat
                kinect.Start();
 
                // Renkli görüntü akışını, infrared formatında başlat
                kinect.ColorStream.Enable(ColorImageFormat.InfraredResolution640x480Fps30);
 
                // Infrared verinin depolanacağı diziyi buyutlandır
                this.infraredPixels = new byte[this.kinect.ColorStream.FramePixelDataLength];
 
                // Uygulama penceresinde gösterilecek Bitmap'i oluştur
                infraredBitmap = new WriteableBitmap(
                    kinect.ColorStream.FrameWidth, kinect.ColorStream.FrameHeight,
                    96.0, 96.0,
                    PixelFormats.Gray16,
                    null);
 
                // Image elementinin kaynağına infraredBitmap'i ata
                Image.Source = infraredBitmap;
 
                // Infrared görüntü yakalandığında tetiklenecek event handlerı oluştur
                kinect.ColorFrameReady += ColorFrameReady;
            }
        }
 
        private void ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
        {
            using (ColorImageFrame infraredFrame = e.OpenColorImageFrame())
            {
                if (infraredFrame != null)
                {
                    // Yakalanan infrared piksel verisini geçici diziye aktar
                    infraredFrame.CopyPixelDataTo(infraredPixels);
 
                    // Görüntüyü image elementine aktar 
                    infraredBitmap.WritePixels(
                        new Int32Rect(0, 0, infraredBitmap.PixelWidth, infraredBitmap.PixelHeight),
                        infraredPixels,
                        infraredBitmap.PixelWidth * infraredFrame.BytesPerPixel,
                        0);
                }
            }
        }
 
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            // Uygulama kapatılırken, Kinect çalışıyorsa durdur
            if (kinect != null && kinect.IsRunning)
                kinect.Stop();
        }
    }
}

 Uygulamayı çalıştırdığınızda, RGB görüntünün kızılötesi olarak geldiğini göreceksiniz... 


Ek Dosya: Belirtilmemiş.
Okunma Sayısı: 1911

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi