Görüntü işleme

Öncelikle Herkese Merhaba

Görüntü işleme, kaydedilmiş olan, mevcut görüntüleri işlemek, yani mevcut resim ve grafikleri, değiştirmek, yabancılaştırmak ya da iyileştirmek için kullanılır.

Bu yazımda Görüntü işlemeyi C# dili ile kodlamaya çalışacağım. Gri,Binary ve Sobel kenar bulma algoritmalarını aşağıda bulabilirisniz.

Gri ve Binary

gri yapma;

binary yapma;

 

Program kodları;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace goruntuIsleme
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog std = new OpenFileDialog();
            std.ShowDialog();
            
            pictureBox1.ImageLocation = std.FileName;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
            Bitmap image = new Bitmap(pictureBox1.Image);
            Bitmap gri = griYap(image);
            pictureBox2.Image=gri;
            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Fotoğraf Yükleyiniz!");
            }
        }
        private Bitmap griYap(Bitmap bmp)
        {
            for(int i=0;i<bmp.Height-1;i++)
            {
                for(int j=0;j<bmp.Width-1;j++)
                {
                    int deger=(bmp.GetPixel(j,i).R+bmp.GetPixel(j,i).G+bmp.GetPixel(j,i).B)/3;
                    Color renk = Color.FromArgb(deger,deger,deger);

                    bmp.SetPixel(j,i,renk);
                }
            }
            return bmp;
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                Bitmap image = new Bitmap(pictureBox1.Image);
                Bitmap binary = binaryYap(image);
                pictureBox2.Image = binary;
                pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Fotoğraf Yükleyiniz!");
            }
        }
        private Bitmap binaryYap(Bitmap bmp)
        {
            int tmp = 0;
            Bitmap gri = griYap(bmp);
            int esik=esikBul(gri);
            Color renk;
            for (int i = 0; i < gri.Height - 1; i++)
            {
                for(int j=0;j<gri.Width-1;j++)
                {
                    tmp = gri.GetPixel(j, i).G;
                    if(tmp<esik)
                    {
                        renk = Color.FromArgb(0, 0, 0);
                        gri.SetPixel(j, i, renk);
                    }
                    else
                    {
                        renk = Color.FromArgb(255,255,255);
                        gri.SetPixel(j, i, renk);
                    }
                }

            }

            return gri;
        }
        private int esikBul(Bitmap gri)
        {
           int enb = gri.GetPixel(0, 0).G;
           int  enk = gri.GetPixel(0, 0).G;
            for (int i = 0; i < gri.Height - 1; i++)
            {
                for (int j = 0; j < gri.Width - 1; j++)
                {
                    if (enb > gri.GetPixel(j, i).G)
                        enb = gri.GetPixel(j, i).G;
                    if (enk < gri.GetPixel(j, i).G)
                        enk = gri.GetPixel(j, i).G;

                }
            }
            int a=enb;
            int b=enk;
            int  esik = (a+b)/2;
            return esik;
        }
        private void trackBar1_Scroll(object sender, EventArgs e)
        {

        }
    }
}

Sobel Kenar bulma

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SobelKenarBulma
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog std = new OpenFileDialog();
            std.ShowDialog();

            pictureBox1.ImageLocation = std.FileName;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
        private void button4_Click(object sender, EventArgs e)
        {
            Bitmap image = new Bitmap(pictureBox1.Image);
            Bitmap sobel = sobelYap(image);
            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox2.Image = sobel;
        }
        private Bitmap sobelYap(Bitmap image)
        {
            Bitmap gri = griYap(image);
            Bitmap buffer = new Bitmap(gri.Width, gri.Height);//görüntünün boyutlarına sahip boş görüntü oluşturuyorsun
            Color renk;
            int valx, valy,gradient;
            int [,]GX = new int[3, 3];
            int [,]GY = new int[3, 3];
            //Yatay kenar 
            GX[0, 0] = -1; GX[0, 1] = 0; GX[0, 2] = 1;
            GX[1, 0] = -2; GX[1, 1] = 0; GX[1, 2] = 2;
            GX[2, 0] = -1; GX[2, 1] = 0; GX[2, 2] = 1;


            //Dikey kenar

            GY[0, 0] = -1; GY[0, 1] = -2; GY[0, 2] = -1;
            GY[1, 0] = 0; GY[1, 1] = 0; GY[1, 2] = 0;
            GY[2, 0] = 1; GY[2, 1] = 2; GY[2, 2] = 1;


            for (int i = 0; i < image.Height; i++)
            {
                for (int j = 0; j < image.Width; j++)
                {
                    if (i == 0 || i == gri.Height - 1 || j == 0 || j == gri.Width - 1)
                    {
                        renk = Color.FromArgb(255, 255, 255);
                        buffer.SetPixel(j, i, renk);
                        valx = 0;
                        valy = 0;
                    }
                    else
                    {
                        valx = gri.GetPixel(j - 1, i - 1).R * GX[0, 0]
                            + gri.GetPixel(j,i - 1).R * GX[0, 1]
                            + gri.GetPixel(j + 1, i - 1).R * GX[0, 2]
                            + gri.GetPixel(j - 1, i).R * GX[1, 0]
                            + gri.GetPixel(j, i).R * GX[1, 1]
                            + gri.GetPixel(j+1,i).R * GX[1, 2]
                            + gri.GetPixel(j - 1, i + 1).R * GX[2, 0]
                            + gri.GetPixel(j, i+1).R * GX[2, 1]
                            + gri.GetPixel(j + 1, i + 1).R * GX[2, 2];

                        valy = gri.GetPixel(j - 1, i - 1).R * GY[0, 0]
                             + gri.GetPixel(j, i - 1).R * GY[0, 1]
                             + gri.GetPixel(j + 1, i - 1).R * GY[0, 2]
                             + gri.GetPixel(j - 1, i).R * GY[1, 0]
                             + gri.GetPixel(j, i).R * GY[1, 1]
                             + gri.GetPixel(j + 1, i).R * GY[1, 2]
                             + gri.GetPixel(j - 1, i + 1).R * GY[2, 0]
                             + gri.GetPixel(j, i + 1).R * GY[2, 1]
                             + gri.GetPixel(j + 1, i + 1).R * GY[2, 2];

                        gradient =(int)( Math.Abs(valx) + Math.Abs(valy));


                        if (gradient < 0)
                            gradient = 0;
                        if (gradient > 255)
                            gradient = 255;

                        renk = Color.FromArgb(gradient, gradient, gradient);
                        buffer.SetPixel(j, i,renk);

                        
                    }
                }
            }
            return buffer; ;
        }
        private Bitmap griYap(Bitmap bmp)
        {
            for (int i = 0; i < bmp.Height - 1; i++)
            {
                for (int j = 0; j < bmp.Width - 1; j++)
                {
                    int deger = (bmp.GetPixel(j, i).R + bmp.GetPixel(j, i).G + bmp.GetPixel(j, i).B) / 3;
                    Color renk = Color.FromArgb(deger, deger, deger);

                    bmp.SetPixel(j, i, renk);
                }
            }
            return bmp;
        }



        private void pictureBox2_Click(object sender, EventArgs e)
        {

        }
    }
}

 

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir