Hari
itu Jum'at, 22 Juni 2012. Tidak terasa sudah berada di penghujung semester. Libur
akademik didepan mata. Tapi sayangnya yang libur cuma kegiatan akademiknya
saja. Beberapa kewajiban lain tidak ikut libur. Hehe, tapi ya sudahlah namanya
juga kewajiban dijalani saja lah.
Alhamdulillah,
semua urusan akademik telah beres, tinggal tawakkal dan ikhlas dengan hasil
yang didapat. Kalo lebih baik dari ekspektasi ya rejeki, klo sedikit
mengecewakan ya sudah berarti harus belajar lagi.
Akhir
semester saatnya merapikan file di laptop. Tapi berbeda dari akhir semester
yang sudah terlewati, akhir semester ini bakal lebih banyak file yang dirapikan
karena akhir semester ini harus merapikan file 1 tahun terakhir, semester lalu
belum sempat. Hehe.
Ya
sudah, mau tidak mau lah, indikator harrdisk juga sudah merah, segera dirapikan
saja.
Sambil
menata file di tempat yang sesuai sambil buka-buka file lama. Sampai akhirnya
ketemu file kuliah Image Processing yang saya sendiri lupa pernah punya file
itu. Hehe, maklum sudah setahun yang lalu. Akhirnya biar tidak lupa lagi
ditulis saja lah, hehe.
File
yang saya temukan itu ternyata adalah file tugas kuliah. Tugas itu berkaitan
dengan enhancement pada image processing. Enhancement itu sendiri adalah proses
membuat gambar jadi lebih mudah diidentifikasi sehingga memudahkan proses
berikutnya dalam serangkaian image processing. Proses enchancement itu sendiri
bisa menggunakan banyak metode. Nah, di file yang saya temukan itu menggunakan
metode paling sederhana yaitu metode Histogram Equalization. Mungkin cukup
asing istilahnya kalo belum belajar image processing. Yaa sekedr istilah sih,
yang jelas langkah-langkahnya adalah:
1.
Resize
gambar input ke ukuran tertentu(optional).
public Bitmap
ResizeBitmap(Bitmap b, int nWidth, int
nHeight)
{
Bitmap
result = new Bitmap(nWidth,
nHeight);
using
(Graphics g = Graphics.FromImage((Image)result))
g.DrawImage(b, 0, 0, nWidth,
nHeight);
return
result;
}
2.
Mengubah
gambar input menjadi gambar gray(abu-abu).
public Bitmap
ToGrayscale(Bitmap original)
{
Bitmap
newBitmap = new Bitmap(original.Width,
original.Height);
for
(int i = 0; i < original.Width; i++)
{
for
(int j = 0; j < original.Height; j++)
{
//get
the pixel from the original image
Color
originalColor = original.GetPixel(i, j);
int
grayScale = (int)((originalColor.R * .3) +
(originalColor.G * .59) + (originalColor.B * .11));
Arr[i, j] = (uint)grayScale;
Color
newColor = Color.FromArgb(grayScale,
grayScale, grayScale);
newBitmap.SetPixel(i, j,
newColor);
}
}
return
newBitmap;
}
3.
Menyimpan
nilai pixel gambar ke dalam sebuah array 2 dimensi sesuai resolusi gambar.
public short[,] CreateArray(Bitmap
Input)
{
short
[,]arr = new short[256,
256];
for
(short i = 0; i < Input.Width; i++)
{
for
(short j = 0; j < Input.Height; j++)
{
arr[i, j] = ColorToShort(
Input.GetPixel(i, j));
}
}
return
arr;
}
4.
Membuat
histogram dari data level keabuan dari tiap pixel gambar yang telah berbentuk
array 2 dimensi.
public uint[]
FindNumberPixel(uint[] Graylevel, uint[] NewGray, uint[,]Array)
{
for
(short i = 0; i < 256; i++)
{
Graylevel[i] = 0;
NewGray[i] = 0;
}
for
(short i = 0; i < 256; i++)
{
for
(short j = 0; j < 256; j++)
{
for
(short k = 0; k < 256; k++)
if (Array[i, j] % 256 == k)
Graylevel[k]++;
}
}
NewGray[0] = Graylevel[0];
for
(short i = 1; i < 256; i++)
NewGray[i] = NewGray[i - 1] +
Graylevel[i - 1];
return
NewGray;
}
5.
Melakukan
proses equalization atau perataan level keabuan.
for (short
i = 0; i < 256; i++)
{
for
(short j = 0; j < 256; j++)
{
for
(short k = 0; k < 256; k++)
{
if(Array[i, j] == k)
NewArray[i, j] = 256 *
NewGray[k] / (256 * 256);
}
}
}
6.
Mengembalikan
array hasil equalization ke bentuk gambar.
public Bitmap
CreateNewImage(uint[,] Array)
{
Bitmap
Input = new Bitmap(256,
256);
Color
capt = new Color();
for
(short i = 0; i < Input.Width; i++)
{
for
(short j = 0; j < Input.Height; j++)
{
if
(Array[i, j] >= 256) Array[i, j] = 255;
capt = Color.FromArgb((int)Array[i,
j], (int)Array[i, j], (int)Array[i,
j]);
Input.SetPixel(i, j, capt);
}
}
return
Input;
}
7. Done. Hasil Testing.
Gambar kiri merupakan gambar input yang telah diubah ke gray, gambar kanan adalah gambar output. Text dibawah gambar merupakan nilai-nilai gray yang berubah-ubah selama pemrosesan gambar.
Cukup
sederhana, namun hasilnya cukup lumayan, tidak kalah lah sama hasil Photosop
:p.
Tertarik?
Silahkan mencoba sendiri, source code open source kok, silahkan dipakai sesuai
kebutuhan. Asal bermanfaat it’s okay :D
Source code bisa didownload disini
Sekian dulu, semoga sedikit cerita yang agak nglantur ini bisa bermanfaat. Amiin :D
0 comments:
Post a Comment