
Jika anda menggunakan tools C# (languange) sebagai olah citra dan Framework AForge.Net dan Accord.Net lumayan lengkap
lanjut..
Setelah melakukan explore (hanya karena) ingin
mengetahui nilai pixel dari suatu citra, mereka
(framework AForge.Net dan Accord.Net) tidak satupun menyediakan class untuk itu. Hampir semua operasi
olah citra menggunakan argument class Image.
Misalkan filter (menggunakan convolution)
AForge.Imaging.Filters.Dilatation
dilation=new AForge.Imaging.Filters.Dilatation();
atau menggunakan cara berikut
// define emboss kernel
int[,] kernel = {
{ -2, -1, 0 },
{ -1, 1, 1 },
{ 0, 1, 2 } };
// create filter
AForge.Imaging.Filters.Convolution filter = new AForge.Imaging.Filters.Convolution( kernel );
int[,] kernel = {
{ -2, -1, 0 },
{ -1, 1, 1 },
{ 0, 1, 2 } };
// create filter
AForge.Imaging.Filters.Convolution filter = new AForge.Imaging.Filters.Convolution( kernel );
Dikarenakan semua menggunakan Class Image
sebagai inputannya bukan matrix atau array sangat menyulitkan bagi pemula yang ingin bereksperimen (daripada menggunakan Matlab). Hampir semua proses read and writel pixel didalam method tersebut dan langsung mengembalikan Image sebagai output argument nya.
sebagai inputannya bukan matrix atau array sangat menyulitkan bagi pemula yang ingin bereksperimen (daripada menggunakan Matlab). Hampir semua proses read and writel pixel didalam method tersebut dan langsung mengembalikan Image sebagai output argument nya.
Matlab menggunakan
berbagai class untuk mempresentasikan data image yaitu
Logical = 1 dan 0
Uint8 = 1 sampai 255
Double = 0 sampai 1
Sedangkan
JImage
Format.Logical = 1 dan 0
Format.Uint8 = 1 sampai 255
Format.Float = 0 sampai 1
Hal diatas akan menjadi ambigu, misalkan pada komputasi untuk filter
dilation (penulis ingin melakukan
penebalan - mode biner) maka output dari dilation.Apply(image) adalah
image maka yang akan tampil bukan 0 (hitam) dan 1 (putih) tapi 255 (putih) à
ini sangat benar sekali dikarenakan logical hanya untuk proses morphologi saja
bukan untuk format file image (disimpan / disajikan ke standar monitor), maka
bila pada mode logical nilai 1 (putih) akan langsung dikonvert ke 255. Yah bagi
orang yang paham akan mudah sekali, tapi bagi orang awam akan menjadi
membingungkan (mungkin yang diharapkan adalah bilangan logical)
Seringkali kita dihadapkan kasus untuk melakukan
komputasi convolution yang menggunakan berbagai filter (komputasi morpologià
dilation + blob to count of items )sebelum hasil akhir nya ditampilkan sebagai
Image. Jika anda ingin dalam format array2D (matrix), maka anda harus siap-siap
lihat source code nya kalau tidak ingin melakukan dalam format class Image.
//init file
Bitmap bitmap=new Bitmap("D:/New Picture (1).bmp");
//init blob
AForge.Imaging.BlobCounter blobs=new AForge.Imaging.BlobCounter(bitmap);
//show after
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("original jumlah objek before dilation "+blobs.ObjectsCount.ToString(),bitmap,2000));
//init dilate
AForge.Imaging.Filters.Dilatation dilation=new AForge.Imaging.Filters.Dilatation();
Bitmap postDilation=dilation.Apply(bitmap);
//init blob
blobs=new AForge.Imaging.BlobCounter(postDilation);
//show
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("jumlah objek after dilation "+blobs.ObjectsCount.ToString(),postDilation,3000));
Bitmap bitmap=new Bitmap("D:/New Picture (1).bmp");
//init blob
AForge.Imaging.BlobCounter blobs=new AForge.Imaging.BlobCounter(bitmap);
//show after
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("original jumlah objek before dilation "+blobs.ObjectsCount.ToString(),bitmap,2000));
//init dilate
AForge.Imaging.Filters.Dilatation dilation=new AForge.Imaging.Filters.Dilatation();
Bitmap postDilation=dilation.Apply(bitmap);
//init blob
blobs=new AForge.Imaging.BlobCounter(postDilation);
//show
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("jumlah objek after dilation "+blobs.ObjectsCount.ToString(),postDilation,3000));

Class new Ext.Utility.ShowImage().InitShow()
merupakan class yang dibuat oleh penulis untuk menampilkan mulitple Windows
Form pada modus console (mirip dengan imshow pada matlab).
Histogram
Class Histogram (ambigu) hanya menyediakan
komputasi statistik biasa seperti std,mean,max,min,total tidak menyediakan histogram (nilai sebaran).


Form diatas (dibuat oleh penulis menggunakan
ZedGraph)
Kesimpulan
Seperti yang sudah dipaparkan sebelumnya bahwa,- kebanyakan class seringkali menggunakan class Image sebagai argument input bukan matrix. Framework langsung melakukan “bedah” pixel dari Image langsung didalam method tersebut serta menghasilkan output berupa class Image
belum adanyaclass yang menyediakan read dan write value pixel, sehingga semua menggunakan class Image. Anda harus membuat class tersendiri bila menginginkannya

Bitmap bitmap=new Bitmap("D:/hasil.bmp");
Ext.ReadImage readImage=new ReadImage(bitmap);
byte[,]r=readImage.Red;
byte[,]g=readImage.Green;
byte[,]b=readImage.Blue;
Ext.ReadImage readImage=new ReadImage(bitmap);
byte[,]r=readImage.Red;
byte[,]g=readImage.Green;
byte[,]b=readImage.Blue;
//create
truecolor
byte[,]red=new byte[255,255];
byte[,]green=new byte[255,255];
byte[,]blue=new byte[255,255];
for(int i=0;i<red.GetLength(0);i++)
{
for(int j=0;j<red.GetLength(1);j++)
{
red[i,j]=(byte)j;
if(i>100)
green[i,j]=(byte)j;
//red[i,j]=(byte)j;
}
}
Ext.CreateImage create=new Ext.CreateImage(red,green,blue);
Bitmap bitmap=create.Btmp;
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("true color ",bitmap,2000));
byte[,]green=new byte[255,255];
byte[,]blue=new byte[255,255];
for(int i=0;i<red.GetLength(0);i++)
{
for(int j=0;j<red.GetLength(1);j++)
{
red[i,j]=(byte)j;
if(i>100)
green[i,j]=(byte)j;
//red[i,j]=(byte)j;
}
}
Ext.CreateImage create=new Ext.CreateImage(red,green,blue);
Bitmap bitmap=create.Btmp;
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("true color ",bitmap,2000));
//create gray color
byte[,]gray=new byte[256,256];
for(int i=0;i<gray.GetLength(0);i++)
{
for(int j=0;j<gray.GetLength(1);j++)
{
gray[i,j]=(byte)i;
}
}
Ext.CreateImage create=new Ext.CreateImage(gray);
Bitmap bitmap=create.Btmp;
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("gray ",bitmap,2000));
for(int i=0;i<gray.GetLength(0);i++)
{
for(int j=0;j<gray.GetLength(1);j++)
{
gray[i,j]=(byte)i;
}
}
Ext.CreateImage create=new Ext.CreateImage(gray);
Bitmap bitmap=create.Btmp;
new Ext.Utility.ShowImage().InitShow(new MyDataBitmap("gray ",bitmap,2000));
Note:
Package Ext.
merupakan class yang dibuat oleh penulis untuk memudahkan dalam olah citra di
C# dalam modus console application
No comments:
Post a Comment