Senin, 06 Juli 2009

Laporan Resmi Praktikum 7

Analisa :

1. Tugas 1

a. Histogram citra gray scale : grafik yang menggambarkan hubungan antara suatu nilai dan banyaknya nilai itu muncul pada sebuah data

b. Kumulatif histogram citra gray scale : banyaknya kemunculan suatu nilai pada sebuah data

c. Histogram equalisasi citra gray scale : suatu proses perataan histogram, dimana distribusi nilai derajat keabuan pada suatu citra dibuat rata

2. Tugas 2


Citra yang dihasilkan menggunakan metode penambahan contrass menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak teralu baik (terlalu terang).

3. Tugas 3

Citra yang dihasilkan menggunakan metode penambahan brightness menjadi lebih terang dari citra aslinya. Namun citra yang dihasilkan tidak terlalu baik (kabur)

4. Tugas 4



Hasil dari hequalization ternyata sesuai dengan yang terdapat pada teori yaitu naik secara linier. Hal tersebut dikarenakan Hequalization (perataan histogram) adalah suatu proses dimana histogram diratakan berdasarkan suatu fungsi linier (garis lurus)

5. Tugas 5

Citra yang didapatkan melalui proses perbaikan citra (enhancement) menggunakan histogram equalisasi ternyata memang lebih baik (jelas) dibandingkan dengan citra aslinya.

Kesimpulan :

1. Metode histogram equalisasi (perataan citra) memang baik digunakan untuk proses enhancement. Citra yang dihasilkan menjadi lebih baik (jelas)
2. Histogram equalization dilakukan dengan cara meratakan distribusi nilai derajat keabuan dari suatu citra.

Laporan Resmi Praktikum 6

Analisa :

1. Latihan 1

a. Transformasi citra negative

Inversi citra adalah proses negatif pada citra, dimana setiap nilai citra dibalik dengan acuan threshold yang diberikan. Gambar yang dihasilkan baru sedikit terlihat ketika slider dimaksimalkan. Untuk citra dengan derajat keabuan 256, proses inversi citra didefinisikan dengan: xn = 255 – x

b. Transformasi citra dengan fungsi LOG


Transformasi menggunakan fungsi LOG akan mempengaruhi contras dari suatu citra, citra yang ditransformasi menggunakan metode ini akan terlihat lebih terang.

c.Transformasi citra dengan fungsi inverse LOG

Transformasi menggunakan fungsi LOG akan mempengaruhi contras dari suatu citra, citra yang ditransformasi menggunakan metode ini akan terlihat lebih gelap.

d.Transformasi citra Nth power


Transformasi citra Nth power menghasilkan citra yang menyerupai grayscale.

e.Transformasi citra Nth root power


Transformasi citra Nth root power menghasilkan citra yang lebih contras menyerupai transformasi menggunakan fungsi LOG

2. Latihan 2


• Negative : Semakin besar input gray level yang diberikan maka semakin kecil nilai output gray level yang dihasilkan. Nilai output yang didapatkan linier.
• LOG : Mula-mula nilai output gray level yang didapatkan mengalami peningkatan yang cukup besar seiring bertambahnya nilai input. Namun saat mencapai nilai input tertentu, peningkatan nilai output menjadi menurun hingga mendekati kondisi steady.
• Inverse LOG : Mula-mula nilai gray level yang didapatkan mengalami peningkatan yang kecil seiring bertambahnya nilai output. Namun saat mencapai nilai input tertentu, nilai output mengalami peningkatan yang cukup besar hingga mendekati kondisi steady
• Nth power : Karakteristiknya hamper sama seperti inverse LOG, namun lebih mendekati linier.
• Nth power root : Karakteristiknya hamper sama seperti LOG, namun lebih mendekati linier

Kesimpulan :

1. Transformasi citra dapat dilakukan dengan berbagai cara, diantaranya dengan inverse (negative), proses logaritmik (LOG dan inverse LOG) , dan power law (Nth power dan Nth power root).
2. Untuk transformasi inverse diperlukan nilai maksimum yang didapatkan dari slider. Untuk transformasi LOG dan inverse LOG diperlukan nilai C yang diinputkan melalui text box. Sedangkan untuk transformasi power law dibutuhkan nilai C dan Y yang diinputkan melalui text box

Laporan Resmi Praktikum 5

Analisa :

1. Latihan 1
Source code untuk brightness :
Nilai warna pada setiap pixel akan diambil rata-rata red, green dan bluenya kemudian nilai rata-rata itu akan ditambahkan dengan nilai brightness yang didapat dari textbox, nilai warna akan dibatasi dari 0 sampai dengan 255,kemudian semua titik akan diberikan nilai warna baru tersebut 2. Latihan 2 Source code untuk contrass :
Sama dengan proses brightness pada gambar RGB tetapi nilai k tidak ditambahkan dengan rata-rata nilai red, green bluenya melainkan dikalikan

3. Latihan 3Source code untuk autolevel :

Auto level akan mengatur brightness dan contrass gambar secara otomatis, dengan cara mencari nilai terbesar dan terkecil rata-rata red green blue tiap-tiap pixel, setelah itu akan dicari jarak antara nilai terkcil dan terbesar yang akan dijadikan sebagai nilai untuk memperbaiki citra, dalam hal ini citra akan diubah ke format grayscale

Kesimpulan :

1. Brightness adalah proses penambahan kecerahan dari nilai derajat keabuan. Proses brightness ini dilakukan dengan menambahkan nilai derajat keabuan dengan suatu nilai penambah.
2. Mengubah kontras dari suatu citra adalah proses pengaturan nilai range interval pada setiap nilai derajat keabuan

Laporan Resmi Praktikum 4

Analisa :

1. Latihan 1
- Pada pengubahan sebuah gambar menjadi grayscale dapat dilakukan dengan cara mengambil semua pixel pada gambar kemudian warna tiap pixel akan diambil informasi mengenai 3 warna dasar yaitu merah, biru dan hijau (melalui fungsi warnatoRGB), ketiga warna dasar ini akan dijumlahkan kemudian dibagi tiga sehingga didapat nilai rata-rata. Nilai rata-rata inilah yang akan dipakai untuk memberikan warna pada pixel gambar sehingga warna menjadi grayscale, tiga warna dasar dari sebuah pixel akan diset menjadi nilai rata-rata (melalui fungsi RGBtowarna)
- Proses dari rumus keduanya hampir sama, bedanya pada rumus pertama warna pada setiap pixel yang telah dirata-rata akan dikalikan dengan nilai derajat keabuan (th), sehingga terjadi pengelompokan warna menjadi beberapa kelompok sesuai dengan nilai kuantisasinya.

2. Latihan 2
a. Untuk rumus x = 0.2r + 0.2g + 0.5b


b. Untuk rumus x = 0.5r + 0.5g + 0b

c. Untuk rumus x = 0.5r + 0g + 0.5b

Gambar yang paling terang diperoleh pada saat menggunakan rumus ke-2 (x = 0.5r + 0.5g + 0b). Sedangkan gambar paling tidak terang diperoleh saat menggunakan rumus ke-1 (x = 0.2r + 0.2g + 0.5b).

3. Latihan 3
- Thresholding digunakan untuk mengatur jumlah derajat keabuan yang ada pada citra. Dengan menggunakan thresholding maka derajat keabuan bisa diubah sesuai keinginan, misalkan diinginkan menggunakan derajat keabuan 16, maka tinggal membagi nilai derajat keabuan dengan 16. Proses thresholding ini pada dasarnya adalah proses pengubahan kuantisasi pada citra, sehingga untuk melakukan thresholding dengan derajat keabuan dapat digunakan rumus:

dimana :
w adalah nilai derajat keabuan sebelum thresholding
x adalah nilai derajat keabuan setelah thresholding

- Hubungan thresholding dengan kuantisasi citra yaitu kuantisasi citra dapat diperoleh berdasarkan derajat keabuan yang dimasukkan dalam rumus thresholding.

4. Latihan 4
Gambar dengan thresholding 2
Gambar hasil konversi citra ke citra biner

Ternyata gambar yang dihasilkan dengan nilai thresholding 2 dan gambar hasil konversi citra ke citra biner tidak sama. Untuk gambar yang pertama digunakan metode thresholding dengan nilai derajad keabuan sebesar 2.

Kesimpulan :

1. Pada proses thresholding, kuantisasi citra yang bervariasi dapat diperoleh dengan mengubah nilai derajat keabuan pada rumus thresholding.
2. Proses kuantisasi hampir sama dengan grayscale, bedanya warna pada setiap pixel yang telah dirata-rata akan dikalikan dengan nilai derajat keabuan (th), sehingga terjadi pengelompokan warna mejadi beberapa kelompok sesuai dengan nilai kuantisasinya

Laporan Resmi Praktikum 3

ANALISA

Hasil praktikum dapat dilihat pada gambar 1. Untuk mengambil gambar, kita tekan 'load gambar', dan untuk membalik gambar tersebut secara horizontal, kita tekan 'balik horizontal', sedangkan apabila kita ingin membalik gambar secara vertikal kita tinggal menekan 'balik vertikal'.






hal yang dilakukan pertama adalah mengambil semua pixel tiap baris dalam
gambar dengan perintah getPixel. Kemudian pixel-pixel yang didapat disimpan
dalam array yang nantinya akan diset (ditampilkan) dalam picture2, pada picture 2
baris pertama akan diisi oleh pixel-pixel dari baris terbawah dari gambar,
sehingga gambar akan terbalik yang atas menjadi bawah.
Program pada button 3 :






Kesimpulan :
1. Kita dapat membuat suatu aplikasi menggunakan visual C++ untuk keperluan membalik gambar baik secara vertikal maupun horizontal.
2. Aplikasi tersebut dibuat menggunakan dialog based
3. Untuk membuat gambar menjadi terbalik, kita masukkan program untuk merubah posisi pixel gambar tersebut

Tugas 7 (Aplikasi Pengolahan Citra)

BATAS CITRA LESI KANKER KULIT

Kanker kulit merupakan salah satu jenis kanker yang cukup serius. Walaupun, malignant melanoma (salah satu jenis kanker kulit yang fatal) bukan merupakan kanker yang banyak terjadi di Indonesia, tetapi kanker tersebut tumbuh lebih cepat dibandingkan jenis kanker yang lain [1]. Diagnosis dini terhadap kanker tersebut merupakan hal yang penting, karena kemungkinan untuk dapat disembuhkan pada tahap dini sangat besar.

Dermatoscopic adalah teknik pencitraan non-invasive dengan menggunakan minyak immersion, yang akan membuat permukaan kulit lebih transparan, sehingga memberikan visualisasi yang lebih baik bagi struktur-struktur permukaan kulit. Citra dermatoscopic memberikan gambaran yang lebih detail dibandingkan dengan citra macroscopic.

TAHAPAN PROSES.

Deteksi batas citra lesi kanker kulit merupakan tahapan awal dan sangat penting bagi suatu sistem penunjang diagnosis penyakit kulit berbantukan komputer. Akurasi diagnosis ditentukan oleh akurasi deteksi batas lesi kanker kulit tersebut. Deteksi batas citra lesi kanker kulit memiliki beberapa tahapan proses [6], yaitu : Akuisisi Citra (image acquisition), Pra Proses (preprocessing), Ekstraksi Fitur (feature extraction), Segmentasi (segmentation) dan Pasca Proses (postprocessing).

Image Acquisition

Akuisisi citra merupakan tahap awal, pada tahap ini citra lesi kanker kulit pada pasien akan diambil/ditangkap. Kamera akan dipergunakan untuk tahapan ini. Kamera yang umum dipergunakan pada tahap ini, dapat berupa kamera analog atau digital. Untuk citra yang diambil dengan menggunakan kamera analog perlu dilakukan konversi ke dalam bentuk citra digital.

Preprocessing

Beberapa citra dermatoscopic mengandung elemen-elemen seperti; tekstur kulit, gelembung udara dan rambut yang membuat deteksi batas lebih sulit. Untuk mengatasi permasalahan tersebut, perlu dilakukan proses pendahuluan dengan melakukan penghalusan. Proses penghalusan yang dipergunakan terdiri dari Dullrazor dan Filter.Penggunaan Dullrazor ditujukan untuk menghilangkan rambut yang terdapat pada citra warna lesi kulit, terutama rambut yang cukup tebal dan memiliki warna dasar yang menyerupai warna lesi kulit. Keberadaan rambut tersebut dapat mempengaruhi proses deteksi batas citra lesi kulit, oleh karena itu rambut pada citra lesi kulit harus dihilangkan.Pemilihan filter merupakan tahapan yang penting dalam deteksi tepi lesi kulit. Filter gaussian dan median merupakan filter paling sering dipergunakan [6]. Unjuk kerja yang kurang maksimal dari filter tersebut ditunjukkan dengan citra yang dihasilkan memiliki gambaran batas yang semakin kabur. Berdasarkan eksperimen yang telah dilakukan M. Emre Celebi, Alp. Aslandogan dan Paul M. Bergstresser [6], didapatkan hasil bahwa; Filter bilateral memberikan hasil yang terbaik disusul PGF.

Color Quantization

Citra 24 bit pada umumnya mengandung ribuan warna, sehingga menimbulkan kesulitan untuk menanganinya. Oleh sebab itu perlu dilakukan kuantisasi warna. Tujuan dari proses ini adalah memperoleh beberapa perwakilan warna yang dapat membedakan satu bagian dengan bagian lainnya pada citra tersebut. Dari beberapa eksperimen, jumlah perwakilan warna yang cukup baik berkisar sekitar 20 warna. Pada beberapa penelitian, sejumlah metode kuantisasi warna seperti, median-cut, k-mean, variance-based, octree, pairwise clustering, uniform dan popularity diperbandingkan.Diperoleh hasil bahwa pairwise clustering memberikan nilai RMS (total kesalahan kuantisasi berbanding jumlah piksel citra) terkecil, Sedangkan variance-based memberikan waktu proses yang tercepat.

Segmentation

Proses selanjutnya adalah melakukan segmentasi terhadap citra lesi kanker kulit. Pada proses ini, citra akan dibagi menjadi beberapa bagian. Metode segmentasi region growing akan dipergunakan pada tahap ini. Region growing terdiri atas proses penentuan piksel yang akan menjadi titik awal dan akan berkembang dimulai dari titik awal tersebut. Region growing akan diikuti proses region merging.

Postprocessing

Citra lesi kulit yang sudah tersegmentasi seringkali masih mengandung bagian kulit sehat. Pendekatan segmentasi X.lu [16] diterapkan untuk menghilangkan sisa bagian kulit yang sehat. Pada pendekatan tersebut akan dibentuk jendela dengan ukuran 10x10 pada keempat sudut citra dan menentukan nilai rata-ratanya. Bagian citra yang memiliki jarak warna yang lebih kecil daripada threshold warna kulit sehat akan dihilangkan [16].

Tugas 6

// searching for vertical lines

short[,] vse = new short[3, 3] {
{ 0, 1, 0 },
{ 0, 1, 0 },
{ 0, 1, 0 }
};
AForge.Imaging.Filters.HitAndMiss vFilter =
new AForge.Imaging.Filters.HitAndMiss( vse );
System.Drawing.Bitmap vImage = vFilter.Apply( image );
// searching for horizontal lines

short[,] hse = new short[3, 3] {
{ 0, 0, 0 },
{ 1, 1, 1 },
{ 0, 0, 0 }
};
AForge.Imaging.Filters.HitAndMiss hFilter =
new AForge.Imaging.Filters.HitAndMiss( hse );
System.Drawing.Bitmap hImage = hFilter.Apply( image );


source code 2
// create filter sequence
AForge.Imaging.Filters.FiltersSequence filterSequence =
new AForge.Imaging.Filters.FiltersSequence();
// add 8 thinning filters with different structuring elements
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{0, 0, 0}, {-1, 1, -1}, {1, 1, 1}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{-1, 0, 0}, {1, 1, 0}, {-1, 1, -1}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{1, -1, 0}, {1, 1, 0}, {1, -1, 0}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{-1, 1, -1}, {1, 1, 0}, {-1, 0, 0}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{1, 1, 1}, {-1, 1, -1}, {0, 0, 0}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{-1, 1, -1}, {0, 1, 1}, {0, 0, -1}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{0, -1, 1}, {0, 1, 1}, {0, -1, 1}}, HitAndMissMode.Thinning ));
filterSequence.Add(new AForge.Imaging.Filters.HitAndMiss(
new short [,] {{0, 0, -1}, {0, 1, 1}, {-1, 1, -1}}, HitAndMissMode.Thinning ));
// create filter iterator for 10 iterations
AForge.Imaging.Filters.FilterIterator filter =
new AForge.Imaging.Filters.FilterIterator(filterSequence, 10);

Senin, 22 Juni 2009

Tugas 5

Program di bawah ini merupakan program utama dari program untuk pengenalan angka dari 0 - 9 :

//Konversi dari data pixel ke RGB dan dari data RGB ke data Pixel:
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16;
}
long int RGBToWarna(int Red, int Green, int Blue){return(Red+(Green<<8)+(Blue<<16));
}

//Program untuk melakukan load angka (*.bmp).
void CAngkaDlg::OnLoad1()
{static char BASED_CODE szFilter[]="Bitmap Files (*.bmp)|*.bmp||";
CFileDialog m_ldFile(TRUE,"*.bmp",name, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
if(m_ldFile.DoModal()==IDOK) { name=m_ldFile.GetPathName();
}
CDC* pDC = m_pic1.GetDC(); CDC dcMem;
CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap) {
if(m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach(); m_bmpBitmap.Attach(hBitmap);
}
m_pic1.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem.CreateCompatibleDC(pDC); dcMem.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);
}

//Program untuk menampilkan proyeksi integral horizontal dari angka .
void CAngkaDlg::OnHip1() {
int i,j; int red,green,blue; long int warna;
CDC* pDC = m_pic1.GetDC(); CDC dcMem; CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
m_pic1.GetClientRect(rect); m_bmpBitmap.GetBimap(&bm);
dcMem.CreateCompatibleDC(pDC); dcMem.SelectObject(&m_bmpBitmap);
for(j=0;j<,bm.bmWidth;j++){
hx1[j]=0;
for(i=0;i<,bm.bmHeight;i++)
{
warna=dcMem.GetPixel(j,i);
WarnaToRGB(warna,&red,&green,&blue);
hx1[j]+=(float)(255-red)/255;}
hx1[j]=hx1[j]/2;
}
CDC* pDC1 = m_pic3.GetDC();
for(i=1;iMoveTo(i*0.75,0);
pDC1->LineTo(i*0.75,hx1[i]); }
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bm.bmWidth,bm.bmHeight,SRCCOPY);
}

//Program untuk menampilkan proyeksi integral vertikal dari angka.
void CAngkaDlg::OnVip1() {
int i,j; int warna,red,green,blue; CDC* pDC = m_pic1.GetDC();
CDC dcMem1; CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap) {
if(m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap); }
m_pic1.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem1.CreateCompatibleDC(pDC); dcMem1.SelectObject(&m_bmpBitmap);
for(j=0;j<,bm.bmHeight;j++) {
hy1[j]=0;
for(i=0;i<,bm.bmWidth;i++) {
warna=dcMem1.GetPixel(j,i);
warnaToRGB(warna,&red,&green,&blue);
hy1[j]+=(float)(255-red)/255; }
hy1[j]=hy1[j]/2;
}
CDC*pDC1= m_pic2.GetDC(); for(i=0;i pDC1->MoveTo(0,0.75*i); pDC1->LineTo(hy1[i],0.75*i);
}}

Jumat, 19 Juni 2009

Tugas 4

program:
void CMbohDlg::OnButton1()
{ int i,j,red,green,blue,gray; long int warna,warnagray;
CDC* pDC = m_pic1.GetDC(); CDC dcMem1; CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"a.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{ if(m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach(); m_bmpBitmap.Attach(hBitmap);
}
m_pic1.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem1.CreateCompatibleDC(pDC); dcMem1.SelectObject(&m_bmpBitmap);
for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}

void CMbohDlg::OnButton2()
{ int i,j,red,green,blue,th; long int warna,wgray,xgray; CDC* pDC = m_pic2.GetDC(); CDC dcMem1;
CRect rect; BITMAP bm;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"a.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach(); m_bmpBitmap.Attach(hBitmap);
}
m_pic2.GetClientRect(rect); m_bmpBitmap.GetBitmap(&bm);
dcMem1.CreateCompatibleDC(pDC); dcMem1.SelectObject(&m_bmpBitmap);
th= int (256/16);
for(i=0;iStretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}

//fungsi menggubah warna ke rgb
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{ *Red = warna & 0x000000FF; *Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16; }

//fungsi mengubah rgb ke warna
long int RGBToWarna(int Red, int Green, int Blue)
{ return(Red+(Green<<8)+(blue<<16));}

Senin, 25 Mei 2009

jawaban Tugas 1

Void CTgs1View::OnTestOpenfile( )
{
// TODO: Add your command handler code here
static char BASED_CODE szFilter]="Bitmap Files (*.bmp)|*.bmp||";
CFileDialog m_ldFile(TRUE, "*.bmp", name, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter);
if(m_ldFile.DoModal()==IDOK)
{
name=m_ldFile.GetPathName();
LoadGambar();
}}
// merubah data pixel ke RGB
void WarnaToRGB(long int warna,int *Red, int *Green, int *Blue)
{
*Red = warna & 0x000000FF;
*Green = (warna & 0x0000FF00) >> 8;
*Blue = (warna & 0x00FF0000) >> 16;
}
//merubah RGB ke data pixel
long int RGBToWarna(int Red, int Green, int Blue)
{
return(Red+(Green<<8)+(blue<<16));>
}

// Menampilkan gambar hasil dari open file
void CEdgeRobertView::LoadGambar(void)
{
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,s;
long int w;
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), name,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);

// Proses RGB to GRAY-SCALE
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
w=dcMem.GetPixel(j,i);
WarnaToRGB(w,&r,&g,&b);
s=int((r+g+b)/3);
w=RGBToWarna(s,s,s);
dcMem.SetPixel(j,i,w);
}
pDC->BitBlt(0,0,250,250,&dcMem,0,0,SRCCOPY);
}

void CEdgeRobertView::OnTestEdgerobert()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b;
int resultr,resultg,resultb;
long int w,mat[1][2];
int h[1][2],hr,hg,hb;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=2; // Menyatakan ukuran filter
// Penentuan kernel filter
h[0][0]=-1; h[0][1]=1;
int u=0;//Menyatakan ukuran filter orizontal
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j,i);
mat[0][1]=dcMem.GetPixel(j,i+1);
hr=0;hg=0;hb=0;
//Menyatakan ukuran filter vertikal
f0r(int v=0;v<2;v++){>
WarnaToRGB(mat[u][v],&r,&g,&b);
hr+=r*h[u][v];
hg+=g*h[u][v];
hb+=b*h[u][v];
}
resultr=hr;
resultg=hg;
resultb=hb;
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
w=RGBToWarna(resultr,resultg,resultb);
dcMem.SetPixel(j,i,w);

void CTgs1View::OnTestEdgeprewitt()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[250][250];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-1; hy[1][1]=0; hy[1][2]=1;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-1; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=1; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}

void CTgs1View::OnTestEdgesobel ()
{
// TODO: Add your command handler code here
CDC* pDC = GetDC();
CDC dcMem;
int i,j,r,g,b,u,v;
int resultr,resultg,resultb;
long int mat[3][3],temp[150][150];
int hy[3][3],hx[3][3],hrx,hgx,hbx,hry,hgy,hby;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&m_bmpBitmap);
// Proses Konvolusi
int nh=3; // Menyatakan ukuran filter
// Penentuan kernel filter hy
hy[0][0]=-1; hy[0][1]=0; hy[0][2]=1;
hy[1][0]=-2; hy[1][1]=0; hy[1][2]=2;
hy[2][0]=-1; hy[2][1]=0; hy[2][2]=1;
// Penentuan kernel filter hx
hx[0][0]=-1; hx[0][1]=-2; hx[0][2]=-1;
hx[1][0]=0; hx[1][1]=0; hx[1][2]=0;
hx[2][0]=1; hx[2][1]=2; hx[2][2]=1;
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++){>
mat[0][0]=dcMem.GetPixel(j-1,i-1);
mat[0][1]=dcMem.GetPixel(j,i-1);
mat[0][2]=dcMem.GetPixel(j+1,i-1);
mat[1][0]=dcMem.GetPixel(j-1,i);
mat[1][1]=dcMem.GetPixel(j,i);
mat[1][2]=dcMem.GetPixel(j+1,i);
mat[2][0]=dcMem.GetPixel(j-1,i+1);
mat[2][1]=dcMem.GetPixel(j,i+1);
mat[2][2]=dcMem.GetPixel(j+1,i+1);
hrx=0;hgx=0;hbx=0;
hry=0;hgy=0;hby=0;
f0r(u=0;u
f0r(v=0;v
WarnaToRGB(mat[u][v],&r,&g,&b);
hrx+= r*hx[u][v];
hgx+= g*hx[u][v];
hbx+= b*hx[u][v];
hry+= r*hy[u][v];
hgy+= g*hy[u][v];
hby+= b*hy[u][v];
}
resultr=abs(hrx)+abs(hry);
resultg=abs(hgx)+abs(hgy);
resultb=abs(hbx)+abs(hby);
if(resultr>255)resultr=255;
if(resultg>255)resultg=255;
if(resultb>255)resultb=255;
temp[j][i]=RGBToWarna(resultr,resultg,resultb);
}
f0r(i=0;i<250;i++)>
f0r(j=0;j<250;j++)>
dcMem.SetPixel(j,i,temp[j][i]);
pDC->BitBlt(250,0,500,250,&dcMem,0,0,SRCCOPY);
}

Jawaban TUGAS 2













































Kamis, 23 April 2009

Dasar Pengolahan Citra (2)

Tujuan:
1. Mahasiswa dapat membuat program untuk memproses gambar dengan mengambil
warna RGB
2. Mahasiswa dapat membuat program untuk memproses gambar dengan
meletakkan warna RGB pada lokasi x dan y

Buatlah program untuk melakukan perputaran citra yang setiap baris pada picture-box 1
menjadi kolom pada picture-box 2 dan setiap kolom pada picture box 1 menjadi baris
pada picture box 2. Tampilan formnya seperti pada file praktikum




Rabu, 22 April 2009

Analisa Praktikum II



Terdapat ketidaksempurnaan pada gambar di samping, yaitu adanya gambar lain yang masuk pada tampilan warna blue, namun untuk hasil output pada kombinasi warna RGB masing-masing bernilai 255, 255, 255 adalah warna putih hal ini sudah termasuk memenuhi kriteria.






Pada percobaan kedua memahami maksud dari percobaan ini. Yaitu bagaimana kita memproses gambar dengan mengambil warna RGB (red,green,blue). Tampilan awal adalah pada saat penekanan tombol merah warna yang keluar adalah merah. Begitu juga sama halnya untuk warna hijau dan biru. dan menamplikan semua warna langsung yaitu Red, Green, dan Blue















Kesimpulan :
1. Suatu gambar dapat di proses dengan mengambil warna RGB nya. Sehingga dapat diketahui susunan warna RGB nya
2. Dengan program, digunakan untuk memproses gambar dengan meletakkan warna RGB dan lokasi x dan y




Kamis, 02 April 2009

Analisa Laporan Praktikum 1

ANALISA

Setelah menyelesaikan praktikum pertama, dapat dianalisa bahwa untuk mengerjakan praktikum tersebut pertama-tama kita membuat suatu projek baru yaitu berupa Multiple document, bukan Dialog based seperti pada percobaan sebelumnya. Projek tersebut diberi nama Test. Kemudian kita membuat menu-menu yang dibutuhkan berikut submenunya. Menu yang saya buat hanya dua yaitu Menu dan Bantuan. Untuk Menu ada empat submenu yang saya buat yaitu ‘Satu’, ‘Dua’, ‘Tiga’, ’Empat’, dan ‘Lima’. Sedangkan untuk ‘Bantuan’ hanya ada satu submenu yaitu Tentang Test. Listing programnya adalah :

void CTestView::OnSatu()

{

// TODO: Add your command handler code here

MessageBox("Selamat Belajar Pengolahan Citra");

}

void CTestView::OnDua()

{

// TODO: Add your command handler code here

CDC* pDC = GetDC();

pDC->TextOut(10,10,"Ini adalah Teks");

}

void CTestView::OnTiga()

{

// TODO: Add your command handler code here

CDC* pDC = GetDC();

pDC->MoveTo(50,20);

pDC->LineTo(50,200);

pDC->TextOut(30,5,"y");

pDC->MoveTo(50,200);

pDC->LineTo(250,200);

pDC->TextOut(260,200,"x");

}

void CTestView::OnEmpat()

{

// TODO: Add your command handler code here

}

void CTestView::OnLima()

{

// TODO: Add your command handler code here

}

Pada latihan no. 1, kita diminta untuk membuat suatu program untuk menampilkan messagebox dengan tulisan ‘Selamat Belajar Pengolahan Citra’ apabila salah satu submenu dipilih. Untuk menampilkan messagebox tersebut, menu yang dipilih adalah ‘Menu’ sedangkan submenu yang dipilih adalah ‘Satu

Pada latihan no. 2, kita diminta untuk membuat program yang bisa menampilkan tulisan ‘Ini adalah teks’ apabila salah satu submenu dipilih. Untuk menampilkan tulisan tersebut, menu yang dipilih adalah ‘Menu’, sedangkan submenu yang dipilih adalah ‘Dua


Pada latihan no. 3, kita diminta untuk membuat program yang bisa menampilkan sumbu x dan y apabila salah satu submenu dipilih. Untuk menampilkan tulisan tersebut, menu yang dipilih adalah ‘Menu’, sedangkan submenu yang dipilih adalah ‘Tiga

KESIMPULAN

  • MFC dapat digunakan untuk membuat program yang bisa menampilkan dan memroses suatu gambar.

  • Untuk membuat program yang menghasilkan tampilan seperti pada percobaan awal, jenis projek yang dipilih yaitu ‘Dialog based’. Sedangkan untuk membuat program yang menghasilkan tampilan seperti pada latihan, jenis projek yang dipilih yaitu ‘Multiple document’.


Rabu, 01 April 2009

Dasar Pengolahan Citra (1)

Tujuan:
Tujuan dari praktikum ini adalah :
1. Mahasiswa dapat membuat program untuk memproses gambar dengan mengambil warna RGB
2. Mahasiswa dapat membuat program untuk memproses gambar dengan meletakkan warna RGB pada lokasi x dan y

Dasar Teori:
Dasar dari pengolahan citra adalah pengolahan warna RGB pada posisi tertentu. Dalam pengolahan citra warna dipresentasikan dengan nilai hexadesimal dari 0x00000000 sampai 0x00ffffff. Warna hitam adalah 0x00000000 dan warna putih adalah 0x00ffffff. Definisi nilai warna di atas seperti gambar 2.1.Variabel 0x00 menyatakan angka dibelakangnya adalah hexadesimal.

Setiap warna mempunyai range nilai 00 (angka desimalnya adalah 0) dan ff (angka desimalnya adalah 255), atau mempunyai nilai derajat keabuan 256 = 28. Dengan demikian range warna yang digunakan adalah (28)(28)(28) = 224 (atau yang dikenal dengan istilah True Colour pada Windows). Nilai warna yang digunakan di atas merupakan gambungan warna cahaya merah, hijau dan biru. Sehingga untuk menentukan nilai dari suatu warna yang bukan warna dasar digunakan gabungan skala kecerahan dari setiap warnanya.












Dari gambar diatas untuk menentukan warna tertentu dapat dengan mudah dilakukan, yaitu dengan mencampurkan ketiga warna dasar RGB. Tabel dapat anda gunakakn sebagai referensi


Percobaan:
Untuk langkah-langkah praktikum dapat anda lihat pada modul praktikum anda.

Rabu, 18 Maret 2009

Pendahuluan I : Perkenalan MFC

Tujuan:
1. Mahasiswa dapat membuat program pengolahan citra menggunakan Visual C++ dengan MFC.
2. Mahasiswa dapat membuat dialog menggunakan Visual C++ dengan MFC.

Pada pratikum yang pertama ini membahas tentang pengenalan MFC.Ini adalah bahasan praktikum yang pertama dari mata kuliah pengolahan citra digital atau yang sering disebut dengan image prosessing.

Apakah sebenarnya MFC itu ?

MFC sebenarnya adalah merupakan komponen yang terdapat pada IDE (Integarated Development Environment) dari Visual C++ 6 yang mana pada komponen ini atau area ini digunakan untuk membuat atau mengedit tampilan dialog box yang bukan form window
Pada perkuliahan semester sebelum - sebelumnya telah digunakan software Visual C++ yaitu pada mata kuliah pemrograman aka tetapi tidak semua komponen - komponen IDE yang ada didalamnya beum digunakan secara keseluruhan, dan saat ini salah satu komponen IDE terebut digunakan pada praktikum pengolahan citra digital. Adapun komponen- komponen IDE yang lainnya antara laian yaitu : Toolbox, Dialog Editor(MFC), Solution Explorer, Class View, Resource View, dan properties Window.
Karena MFC ini digunakan pada praktikum pengolahan citra maka sudah seharusnya kita mengetahui terlebih dahulu apa itu pengolahan citra, pengolahan citra atau image prossesing adalah suatu pemrosesan gambar dari gambar asli menjadi gambar lain sesuai dengan keinginan kita.
IDE merupakan singkatan dari Integrated Development Environment, apa ya itu??setelah kulihat di kmus online, yang artinya integrated itu mengintegrasikan, trus development itu pengembangan, dan environment itu lingkungan,,hmm,trnyata masih rumit juga ya, klo dimaknai satupersatu,,tapi intinya IDE digunakan untuk membuat lingkungan (baca : sistem) yang dibangun secara terintegrasi.
Untuk mencobanya, dibutuhkan beberapa hal sebagai berikut :
1. Seperangkat komputer dengan software Visual C++ 6.0
2. Modul praktikum (baca : buku manual prosedur praktikum)
3. Siapkan smangat dan niat untuk menuntut ilmu
4. Awali dengan bismillah
5. Perhatikan dan praktikkan, tahap demi tahap prosedur praktikum yang ada.

Percobaan:
Menjalankan Visual C++ dengan MFC

1. Membuka Visual C++ 6.0
Pilih menu : Start->Programs->Microsoft Visual Studio 6.0->Microsoft Visual C++ 6.0
2. Memberi nama program
Pilih menu : File->New->Projects->MFC AppWizard(exe)
Isi Project name misalnya dengan: dialog
Tekan tombol OK
3. Memilih isi program
Step 1 :
What tipe of application would you like to create (aplikasi apa yang ingin dibuat) pilih dialog based untuk membuat aplikasi memakai dialog. Perhatikan gambar 1.4. a dialog step 1. Tekan tombol Next.
Step 2 :
1. What features would you like to include?
(fitur apa saja yang akan dimasukkan) pilih About box dan 3D
controls untuk pilihan standar.
2. What features would you like to include?
(mendukung aplikasi apa ?) pilih ActiveX controls untuk pilihan
standar.
3. Would you like to include WOSA support ? Window Sockets tidak
dipilih untuk pilihan standard.
4. Please enter a title for your dialog ? Title sudah berisi text sama
dengan nama project untuk pilihan standard
Perhatikan gambar 1.4.b. dialog step 2. Tekan tombol Next.
Step 3 :
1. What style of project would you like ?
Pilihan standard dan yang aktif hanya MFC Standard.
2. Would you like to generate source file comments ? pilihan standard Yes, Please
3. How would you like to use the MFC Library ? pilihan standard As a shared DLL
Tekan tombol Next
Step 4 :
AppWizard creates the following classes for you
Tekan tombol Finish akan muncul New Project Information.
Kemudian tekan tombol OK. Tampilan awal dialog akan dihasilkan

4. Cara menjalankan program
Pilih menu : Build->Execute (!), Dialog Hasil Execute
Tekan tombol Yes, untuk menutup aplikasi.

Cara Mendisain Dialog
Catatan : Jika Dialog Editor tidak tampak buka pada Resource View (Ctrl-Shift-E) double click pada IDD_TEST_DIALOG.
1. Cara membuat dialog
Buat aplikasi AppWizard seperti pada praktikum 1 dan beri nama project dengan Dialog
Pilih ResourceView pada workspace
Pilih folder paling atas dengan cara klik pada tanda +
Pilih folder dialog dengan cara klik pada tanda +
Klik 2 kali IDD_DIALOG_DIALOG

2. Menghapus dan menambah control pada dialog
Untuk menghapus control : aktifkan control dengan cara klik pada area control lanjutkan dengan menekan tombol delete. Cobalah untuk menghapus control : text TODO, button OK dan Cancel.
control pada toolbox Untuk menambah control: (button) pilih icon drag drop ke editor dialog.
(static text) pilih icon control pada toolbox drag drop ke editor dialog.
(picture box) pilih icon control pada toolbox drag drop ke editor dialog.
Tambahkan control (dua button, 1 static text, 1 picture) pada dialog editor

3. Mengaktifkan control
Pilih control button1, double clik, pada dialog Add Member Function klik OK.
Atau klik kanan, pilih klik ClassWizard, pada MFC Class Wizard Dialog

Messages aktifkan BN_CLICKED, double clik, pada dialog Add Member Function klik OK.
4. Rubah terlebih dahulu ID dari static text = ID_label dan ID dari picture = ID_pic1, dengan cara aktifkan control dan klik kanan pilih properti.

5. Pada dialog MFC classwizard,Member Variabels edit type dan member dari control sebagai berikut

6. Menulis fungsi pada button1 clik Tambahkan program untuk menampilkan pesan pada static text seperti
dibawah ini
void CDialogDlg::OnButton1()
{
// TODO: Add your control notification handler code here
SetDlgItemText(IDC_label,"Belajar Prak Citra dgn VC++ dan MFC");
}
Jalankan program dengan memilih menu Build->Execute (!)

7. Tambahkan deklarasi kelas CBitmap pada File View – Header Files – dialogDlg.h
// Construction
public:
CDialogDlg(CWnd* pParent = NULL); // standard constructor
CBitmap m_bmpBitmap;
//

8. Menulis fungsi pada button2 clik
void CDialogDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CDC* pDC = m_pic1.GetDC();//
CDC dcMem1;
CRect rect;//kotak di picture
BITMAP bm;//
HBITMAP
hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"pens.bmp",IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
m_pic1.GetClientRect(rect);//
m_bmpBitmap.GetBitmap(&bm);//
dcMem1.CreateCompatibleDC(pDC);
dcMem1.SelectObject(&m_bmpBitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem1,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//
}
Jalankan program dengan memilih menu Build->Execute (!)