27 Mart 2012 Salı

C# Görüntü işleme

İlk Olarak Burayı Okumalısınız

Öncelikle görüntü işleme üzerine olan kodları birebir hepsini ben yazmadım bunun için google da “c# color tracking” diye bir arama gerçekleştirdim ve referans olarak http://www.uguryalcin.de/c/372 adresini belirledim.

Konuya geçecek olursak, ilk önce birkaç kütüphane dosyasına ihtiyacınız olacak. örnek projede kütüphaneler mevcut bunlar kendinizi daha da ileri götürmek için. aforge kütüphanesini indirmek isteyebilirsiniz.

Ekran görüntüsü.


Ben aslına bakarsanız kod anlatma konusunda pek iyi değilim. Örnek projeyi indirin. Kodları silin aralarına bir şeyler eklemeye çalışın ve öğrenin. Şimdi yeni bir soru ile daha karşılaşıyoruz. Aynı anda birkaç görüntü almak istersek ne yapmalıyız. Aslında onunda cevabı basit ama biraz da sizin araştırma yapıp kendi blogunuzda yayınlamanız için onu size bırakıyorum. Yayınlamış olduğunuz yazıyı yorumlardan paylaşırsanız çok mutlu olurum.

Sağlıcakla kalın :)


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Güzel Aforge
//////////////
using AForge;
using AForge.Imaging.Filters;
using AForge.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;
using AForge.Vision;
using AForge.Vision.Motion;
namespace GoruntuIsleme2
{
public partial class Form1 : Form
{
private VideoCaptureDevice kameraAygit;
private FilterInfoCollection webcamAygit;
public Form1()
{
InitializeComponent();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (kameraAygit != null && kameraAygit.IsRunning)
{
kameraAygit.SignalToStop();
kameraAygit = null;
}
}
private void Form1_Load(object sender, EventArgs e)
{
webcamAygit = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo VideoCaptureDevice in webcamAygit)
{
comboBox1.Items.Add(VideoCaptureDevice.Name); // WebCamleri listele
comboBox1.SelectedIndex = 0;
}
kameraAygit = new VideoCaptureDevice(webcamAygit[comboBox1.SelectedIndex].MonikerString);//webcam listesinden kafadan birinciyi al diyoruz.
kameraAygit.NewFrame += new NewFrameEventHandler(cam_goruntu_new_frame);
kameraAygit.DesiredFrameRate = 30;//saniyede kaç görüntü alsın istiyorsanız. FPS
kameraAygit.DesiredFrameSize = new Size(320, 240);//görüntü boyutları
kameraAygit.Start();
}
void cam_goruntu_new_frame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap image = (Bitmap)eventArgs.Frame.Clone();
Bitmap image1 = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = image;
ColorFiltering filter = new ColorFiltering();
filter.Red = new IntRange(150, 255);
filter.Green = new IntRange(0, 75);
filter.Blue = new IntRange(0, 75);
filter.ApplyInPlace(image1);
nesnebul(image1);
}
public void nesnebul(Bitmap image)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.MinWidth = 2;
blobCounter.MinHeight = 2;
blobCounter.FilterBlobs = true;
blobCounter.ObjectsOrder = ObjectsOrder.Size;
Grayscale griFiltre = new Grayscale(0.2125, 0.7154, 0.0721);
Bitmap griImage = griFiltre.Apply(image);
blobCounter.ProcessImage(griImage);
Rectangle[] rects = blobCounter.GetObjectsRectangles();
pictureBox2.Image = griImage;
foreach (Rectangle recs in rects)
{
if (rects.Length > 0)
{
Rectangle objectRect = rects[0];
//Graphics g = Graphics.FromImage(image);
Graphics g = pictureBox1.CreateGraphics();
using (Pen pen = new Pen(Color.FromArgb(252, 3, 26), 2))
{
g.DrawRectangle(pen, objectRect);
}
//Cizdirilen Dikdörtgenin Koordinatlari aliniyor.
int objectX = objectRect.X + (objectRect.Width / 2);
int objectY = objectRect.Y + (objectRect.Height / 2);
g.DrawString(objectX.ToString() + "X" + objectY.ToString(), new Font("Arial", 12), Brushes.Red, new System.Drawing.Point(250, 1));
g.Dispose();
}
}
}
}
}

Bence buraya kadar geldiysen  buradasın

C# pixel, görüntü işleme

İlk olarak Görüntü İşleme ile ilgili olan yazıyı okumanızı tavsiye edilir.


http://yzgrafik.ege.edu.tr/~tekrei/dosyalar/sunum/gi.pdf bu dökümanın 25.sayfasındaki formülü kullanarak siyah beyaz bir resim yapalım dedim.

Ekran görüntüsü aşağıdaki gibi oldu.

Kaynak kodda şu şekilde ya da c# Pixel İşleme

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace pixelIsleme

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

Bitmap PixelTara(Bitmap Goruntu)

{

Bitmap yeniGoruntu = new Bitmap(Goruntu.Width, Goruntu.Height);//Bitmap sınıfımızı oluşturduk.

for (int i = 0; i < Goruntu.Width; i++)//resmi yatay olarak taramak için

{

for (int j = 0; j < Goruntu.Height; j++)//resmi dikey olarak taramak için

{

Color Pixel = Goruntu.GetPixel(i, j);//color sınıfını ile pixel rengini alıyoruz.

int GriTonlama = (Pixel.R + Pixel.G + Pixel.B) / 3;//almış olduğumuz renk değerini gri tona çevirmek için kullanmamız gereken formül.

yeniGoruntu.SetPixel(i, j, Color.FromArgb(GriTonlama, GriTonlama, GriTonlama));//yeni görüntümüze gri tonlamadaki pixel değerini veriyoruz.

}

}

return yeniGoruntu;

}

private void button1_Click(object sender, EventArgs e)

{

pictureBox2.Image = PixelTara(new Bitmap(pictureBox1.Image));

}

}

}

// kod açıklamaları

//-----------------

//int GriTonlama = (Pixel.R + Pixel.G + Pixel.B) / 3;

//Pixel.R ile o pixelin Kırmızı değerini alıyoruz. G,B de green ve blue temsil ediyor.

C# Görüntü İşleme

Herkese merhabalar,


Bu yazı dizimizde görüntü işlemeden bahsedeceğiz. Şunu belirtmek isterim ki bende yeni merak saldım bu alana ve buradan yaptığım işten çok yararlandığım kaynaklardan ve internetten nasıl kaynak bulduğum konusuna değineceğim. Sizinde bildiğiniz üzere internetten bir çok yazılmış makale bulunmakta, Aforge ‘ya henüz kulak aşınalığınız yoksa araştırmaya yeni başladığınız kanısına varıyorum. Ben bir şeye başlamadan önce her zaman doğru soruları bulmaya çalışırım ve sürekli soru sorma stilimi değiştirerek bilgiye ulaşmaya çalışırım. Şimdi bu konu hakkında kabataslak bir fikir oluşturmak için sorularımızı oluşturmamız ve cevaplarını aramamız gerekiyor.


1- Görüntü işleme nedir?

2- Resimlerde veya görüntülerde pixsel değerlerini nasıl okurum?

3- Webcam ‘de gerçek zamanlı olarak belirlediğim renkleri nasıl bulurum?(c# color tracking)

4- Yüz, nesne tanıma algoritmaları nasıl oluşturulur?

5- C# ‘ta görüntü işleme üzerine oluşturulmuş örnekler nelerdir?

6- Bu beş sorudan öğrendiklerimle ne yapmak istiyorum?


1.Görüntü işleme konusunda http://mehmetsalihdeveci.net/category/goruntu-isleme/ bu kaynağı tavsiye edebilirim ve kısmen google içerisindeki diğer sayfalarıda bakmanızı şiddetle tavsiye ediyorum. Ufkunuzu genişletecek bir çok yazı okuyabilirsiniz. Mesela http://yzgrafik.ege.edu.tr/~tekrei/dosyalar/sunum/gi.pdf

1.soruyu araştırken bulmuş olduğum bir video ilginizi çekebilir.



2. sorumuzun kısa cevabı c#’da Bitmap ve Color nesnesinden geçiyor. Kısaca şöyle bir örnek verebiliriz.


Bitmap resim = new Bitmap(pictureBox1.Image);

Ve hemen akabinde SetPixel ve Getpixel paremetrelerini kullanacağız.


3.sorumuz ile ilgili youtube da bir çok video, forum sitelerinde de yapımı ile ilgili bilgi mevcut. Ben bu işi yapmak için aforge kullanmayı düşünüyorum çünkü en basit o gibi görünüyor. Aforgenet için http://www.aforgenet.com/ bu sayfada birkaç saat geçirmeniz gerekiyor. İngilizce bilmemeniz durumunda ise size önerebileceğim en iyi kaynak google translate J Opencv ile ilgili de birkaç yer gördüm fakat o bana biraz fazla karışık geldi.


Diğer soruları şimdilik rafa kaldırmak zorundayım zira onlar biraz daha sıkıntılı işlemler özelliklede 4.soru şimdi adım adım ilerleyebilmek için öğrendiklerimizle birkaç örnek yapalım.

4 Mart 2012 Pazar

Yine yeni yeniden




Yazıp yazmama konusunda çelişkiye düşmüştüm ama sonuç karşınızda;

Yine yeni bir düzen kurmaya çalışıyorum ve her şey planlarım doğrultusunda giderse eğer 5 seneye kadar bu kadar çok yaşam mücadelesi vermem gerekmeyecek.

Planlarım ne mi dersin? Anlatmak için henüz zaman var. İnş. hayata geçince buradan çalışmalarımız hakkında bilgi veririz :)