PCDA2 Praktek7 2003040070

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Source Code

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 Latihan2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
//membuat objek openFileDialog
OpenFileDialog ofd = new OpenFileDialog();

//set tipe file default


ofd.DefaultExt = "bmp";

//filter untuk menentukan file apa saja yang boleh dipilih


ofd.Filter = "image files|*.png; *.jpg; *.bmp; *.jpeg";

//cek apakah file sudah dipilih?


if (ofd.ShowDialog() == DialogResult.OK)
{
//jika sudah, tampilkan file image pada pictureBox1
pictureBox1.Image = new Bitmap(ofd.FileName);
Bitmap bmp = new Bitmap(pictureBox1.Image);
}
}
private void button2_Click(object sender, EventArgs e)
{
//ambil gambar yang tampil di pictureBox1
Bitmap bmp = new Bitmap(pictureBox1.Image);

int r, g, b;
int i;

int m = bmp.Height; //tinggi image


int n = bmp.Width; //lebar image

Color p;

#region konversi ke grayscale

for (int y = 0; y < m - 1; y++)


{
for (int x = 0; x < n - 1; x++)
{
//ambil piksel dengan alamat (x, y)
p = bmp.GetPixel(x, y);
r = p.R;
g = p.G;
b = p.B;
i = Convert.ToInt16(0.2989 * r + 0.5870 * g + 0.1141 * b);

//mengubah nilai piksel R, G, B dengan nilai intensitas i


bmp.SetPixel(x, y, Color.FromArgb(i, i, i));
}
}
pictureBox2.Image = bmp; //menampilkan citra hasil konversi di picture box
#endregion
}

private void button3_Click(object sender, EventArgs e)


{
Bitmap bmp2 = new Bitmap(pictureBox2.Image); //citra grayscale dari pictureBox2
int height = bmp2.Height;
int width = bmp2.Width;
Color p;
double N = height * width;

int[] histogram = new int[256]; //untuk histogram citra grayscale


double[] w1 = new double[256]; //untuk weight/bobot background
double[] w2 = new double[256]; //untuk weight/bobot foreground
double[] m1 = new double[256]; //untuk mean background
double[] m2 = new double[256]; //untuk mean foreground
double[] v1 = new double[256]; //untuk variance background
double[] v2 = new double[256]; //untuk variance foreground
double[] WCV = new double[256]; //Whitin Class Variance
double[] prob = new double[256]; //Probabilitas
double w2_ = 0;
double w1_ = 0;
double m1_ = 0;
double m2_ = 0;
double v1_ = 0;
double v2_ = 0;
double WCV_ = 0;

//mendapatkan histogram citra grayscale


#region mendapatkan histogram citra grayscale
int intesitas;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
p = bmp2.GetPixel(x, y);
intesitas = p.B;

for (int j = 0; j < 256; j++)


{
if (intesitas == j)
{
histogram[j] = histogram[j] + 1;
break;
}
}
}
}
#endregion

//mencari probabilitas nilai intensitas


#region mencari probabilitas
for (int l = 0; l < 256; l++)
{
prob[1] = histogram[1] / N;
}
#endregion

//mencari nilai weight background dan weight foreground


#region mencari nilai weight background dan weight foreground
for (int l = 0; l < 256; l++)
{
w1_ = 0;
for (int m = 1; m > 0; m--)
{
w1_ = w1_ + prob[m];
}
w1[1] = w1_;
}
for (int l = 0; l < 256; l++)
{
w2_ = 0;
for (int m = l+1; m < 256; m++)
{
w2_ = w2_ + prob[m];
}
w2[1] = w2_;
}
#endregion

//mencari mean background dan mean foreground


#region mencari mean background dan mean foreground
for (int l = 0; l < 256; l++)
{
w1_ = 0;
m1_ = 0;
for (int m = l; m > 0; m--)
{
w1_ = w1_ + histogram[m];
}
for (int n = 1; n > 0; n--)
{
m1_ = (m1_ + (n * histogram[n]));
}
if (w1_ == 0)
{
m1[1] = 0;
}
else
{
m1[l] = m1_ / w1_;
}
}
for (int l = 0; l < 256; l++)
{
w2_ = 0;
m2_ = 0;
for (int m = l + 1; m < 256; m++)
{
w2_ = w2_ + histogram[m];
}
for (int n = 1 + 1; n < 256; n++)
{
m2_ = (m2_ + (n * histogram[n]));
}
if (w2_ == 0)
{
m2[l] = 0;
}
else
{
m2[l] = m2_ / w2_;
}
}
#endregion

//mencari variance background dan foreground


#region mencari variance background dan foreground
for (int l = 0; l < 256; l++)
{
w2_ = 0;
v2_ = 0;
for (int m = l + 1; m < 256; m++)
{
v2_ = v2_ + Math.Pow((m - m2[m]), 2) * histogram[m];
}
for (int n = l + 1; n < 256; n++)
{
w2_ = w2_ + histogram[n];
}
if (w2_ == 0)
{
v2[l] = 0;
}
else
{
v2[l] = v2_ / w2_
; }
}
for (int l = 0; l < 256; l++)
{
w1_ = 0;
v1_ = 0;
for (int m = l; m > 0; m--)
{
v1_ = v1_ + Math.Pow((m - -m1[m]), 2) * histogram[m];
}
for (int n = l; n > 0; n--)
{
w1_ = w1_ + histogram[n];
}
if (w1_ == 0)
{
v1[l] = 0;
}
else
{
v1[l] = v1_ / w1_;
}
}
#endregion

//mencari nilai WCV dan WCV terkecil


#region mencari nilai WCV dan WCV terkecil
for (int l = 0; l < 256; l++)
{
WCV[l] = w1[l] * v1[l] + w2[l] * v2[l];
Console.WriteLine("WCV[" + l + "] : " + WCV[l]);
}

double minWCV = WCV[1];


for (int l = 0; l < 256; l++)
{
if (minWCV < WCV[l])
{
minWCV = minWCV;
}
else
minWCV = WCV[l];
}
Console.WriteLine("minimal WCV : " + minWCV);
#endregion

//nilai threshold itu diambil dari


//nilai index intensitas histogram grayscale
//yang mempunyai nilai WCV terkecil
int threshold = 0;
for (int l = 0; l < 256; l++)
{
if (minWCV == WCV[l])
{
threshold = l;
}
}
Console.WriteLine("Threshold A: " + threshold);

//thresholding ---> konversi citra biner


//menggunakan nilai threshold yang didapat
#region thresholding
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
p = bmp2.GetPixel(x, y);
intesitas = p.B;

if (intesitas < threshold)


{
bmp2.SetPixel(x, y, Color.FromArgb(0, 0, 0));
}
}
}
pictureBox3.Image = bmp2;
#endregion
}
}
}

Form
Hasil Debug

You might also like