21
MEMBUAT APLIKASI PENGOLAHAN CITRA MENGGUNAKAN OPEN CV HISTOGRAM Tim Penyusun: Annisah (50410879) Vibri Ariyaningrum (58410361) UNIVERSITAS GUNADARMA NOVEMBER 2013

Tugas Kelompok Open Cv

Embed Size (px)

Citation preview

MEMBUAT APLIKASI PENGOLAHAN CITRA

MENGGUNAKAN OPEN CV

HISTOGRAM

Tim Penyusun:

Annisah (50410879)

Vibri Ariyaningrum (58410361)

UNIVERSITAS GUNADARMA

NOVEMBER 2013

Histogram Citra Page 2

BAB 1

PENDAHULUAN

Pada saat ini kemajuan teknologi informasi sudah berkembang pesat mulai dari teks,

audio, gambar, dan video. Pada penulisan kali ini kami akan membahas tentang membuat sutu

aplikasi pengolahan citra. Citra atau biasa dikenal sebagai gambar adalah bentuk informasi

visual. Beberapa orang berpendapat bahwa gambar mewakilkan ribuan kata. Kami setuju

denagn pendapat mereka. Pada kenyataannya gambar atau citra tidak seluruhnya terlihat baik.

Terdapat proses untu membuat suatu gambar dapat terlihat lebih baik. Proses tersebut

dinamakan pengolahan citra.

Teknik pengolahan citra sudah digunakan pada dunia perdagangan. Salah satu

contohnya adalah penggunaan barcode pada suatu barang di supermarket. Dimana barcode

tersebut digunakan untuk mempermudah pembacaan harga suatu barang. Bila tidak

menggunakan barcode petugas akan sulit mengetahui harga barang tersebut. Maka digunakan

barcode yang bertujuan agar petugas dapat dengan mudah mengecek harga barang tersebut.

Pengolahan citra merupakan suatu proses perbaikan kualitas citra agar mudah di

interpretasi oleh manusia atau komputer. Proses-proses yang termasuk ke dalam pengolahan

citra, yaitu :

1. Perbaikan kualitas citra (Image Enhancement)

2. Pemugaran citra (Image Restoration)

3. Pemampatan citra (Image Compression)

4. Segmentasi citra (Image Segmentation)

5. Pengorakan citra (Image Analysis)

6. Rekonstruksi citra (Image Recontruction)

Kami akan menjelaskan tahapan pembuatan aplikasi pengolahan citra yang berkaitan

dengan Histogram Citra menggunakan OpenCV. Dengan histogram kita bisa menentukan

apakah citra yang akan dinilai tersebut baik atau malah sebaliknya. Kita juga bisa tahu bahwa

Histogram Citra Page 3

citra tersebut cenderung gelap (under exposure) atau malah cenderung terang (over exposure).

Grafik histogram yang dominan di bagian kiri menandakan gambar cenderung gelap. Puncak

grafik di bagian kiri yang juga tampak sangat tinggi menandakan adanya clipping atau under

exsposure. Grafik histogram yang dominan di bagian kanan menandakan gambar terlalu terang.

Puncak grafik di bagian kanan yang juga tampak sangat tinggi menandakan over exposure.

Komposisi warna pada citra dapat direpresentasikan dalam bentuk histogram. Histogram warna

merepresentasikan distribusi jumlah piksel untuk tiap intensitas warna dalam citra. Untuk

mendefinisikan histogram, warna di kuantisasi menjadi beberapa level diskrit, kemudian untuk

tiap level tersebut dihitung jumlah piksel yang nilainya sesuai.

Histogram Citra Page 4

BAB 2

Installansi Dan Konfigurasi

Pada pembuatan aplikasi pengolahan citra menggunakan OpenCV dibutuhkan beberapa

software yaitu OpenCV 2.4.6 dan Microsoft Visual Studio 2008.

a. Microsoft Visual Studio 2008

Microsoft Visual C++ adalah software yang digunakan sebagai compiler. Compiler

adalah perangkat lunak yang digunakan untuk mengubah source code dari suatu bahasa

pemrograman (dalam kasus ini bahasa pemrogramannya yaitu C++) menjadi native code

/ bahasa mesin (file executable) agar dapat dieksekusi oleh komputer. Microsoft Visual

C++ ini dibuat oleh perusahaan Microsoft.

b. Open CV 2.4.6

OpenCV (Open Computer Vision) merupakan semacam library yang digunakan dalam

membuat aplikasi yang berkaitan dengan computer vision. OpenCV juga menyediakan

banyak fungsionalitas, yang tentunya dapat mempersingkat waktu dalam pembuatan

aplikasi yang lumayan rumit.

2.1 Installasi software Microsoft Visual Studio 2008

Langkah- langkah untuk menginstall Microsoft Visual Studio 2008 adalah:

1. Langkah pertama adalah download software Microsoft Visual Studio 2008

2. Setelah berhasil mendownload. Kemudian ekstrak file.rar tersebut. Klik 2x pada setup

(Aplication)

Histogram Citra Page 5

3. Lalu pilih Install Visual Studio 2008 >> View ReadMe

4. Tampilan selanjutnya akan seperti ini. Kemudian pilih Next

Histogram Citra Page 6

Kemudian pilih i have read and accept the license terms >> Next

5. Setelah itu tampilan selanjutnya adalah

Pilih default >> Install. Maka tahapan selanjutnya adalah installing component, maka

tampilan selanjutnya akan seperti ini:

Histogram Citra Page 7

6. Setelah proses installing selesai maka kita telah berhasil melakukan menginstall

Microsoft Visual Studio 2008.

Histogram Citra Page 8

2.2 Installasi software OpencV 2.4.6

Langkah- langkah untuk menginstall OpenCV 2.4.6 adalah:

A. Langkah pertama adalah download software OpenCV 2.4.6

B. Klik 2x pada sofware OpenCV >> Run

Histogram Citra Page 9

C. Tahapan selanjutnya kita atur tempat penyimpanan folder OpenCV. Kita simpan folder

OpenCV pada folder C. Langkah selanjutnya kita pilih Extract.

D. Setelah kita pilih extract maka tampilannya akan seperti ini. Tampilan ini adalah proses

penginstallan openCV. Setelah proses selesai artinya kita telah berhasil menginstall

OpenCV.

Histogram Citra Page 10

BAB 3

Tahapan Pembuatan Aplikasi Histogram Citra

Pengertian histogram dalam pengolahan citra adalah .representasi grafis untuk distribusi warna

dari citra digital atau menggambarkan penyebaran nilai-nilai intensitas pixel dari suatu citra

atau bagian tertentu di dalam citra. Dari sebuah histogram dapat diketahui frekuensi

kemunculan relatif dari intensitas pada citra, kecerahan, dan kontas dari sebuah gambar.

Histogram citra adalah suatu grafik yang menyatakan hubungan antara BV (brightness value)

dengan frekuensi. Dari histogram pada suatu citra yang ada kita dapat menentukan berapa

buah objek yang terdapat pada citra tersebut. Satu kurva sempurna mencerminkan satu buah

objek. Jadi semakin banyak kurva yang terdapat pada suatu histogram maka semakin bervariasi

pula objek pada citra tersebut. Untuk tiap band yang berbeda pada satu citra, memiliki

histogram dengan bentuk kurva yang berbeda-beda pula.

Histogram citra merupakan salah satu bentuk representasi grafis karakteristik spektral citra

yang bersangkutan. Dengan histogram, analis citra dapat memahami citra yang dipelajari

misalnya aspek kecerahan dan ketajamannya. Dari histogram juga kadang-kadang dapat diduga

jenis saluran spektral citra yang digunakan. Perubahan atas distribusi nilai pada citra secara

langsung berakibat pada perubahan tampilan histogram. Sebaliknya, dengan memainkan

bentuk histogramnya banyak program pengolah citra secara interaktif mampu mengubah

tampilan citranya. Dengan kata lain, perangkat lunak pengolah citra kadang-kadang

menggunakan histogram sebagai jembatan komunikasi antara pengguna dengan data citra.

Histogram citra dipresentasikan dengan dua bentuk: pertama tabel yang memuat kolom-kolom

nilai piksel jumlah absolut setiap nilai piksel, jumlah komulatif piksel, presentase absolut setiap

nilai, dan presentase komulatifnya; kedua, gambaran grafis yang menunjukkan nilai piksel pada

sumbu x dan frekuensi kemunculan pada sumbu y. Melalui gambaran grafis histogram ini,

secara umum dapat diketahui sifat-sifat citra yang diwakilinya. Misalnya citra yang direkam

dengan spectrum gelombang relatif pendek akan menghasilkan “ bukit tunggal “ histogram

yang sempit (unimodal) wilayah yang memuat tubuh air agak luas akan menghasilkan

kenampakan histogram dengan dua puncak, apabila direkam pada spektrum inframerah dekat

(bi-modal). Histogram unimodal yang sempit biasanya kurang mampu menyajikan kenampakan

obyek secara tajam, sedangkan histogram yang gemuk (lebar) relatif lebih tajam dibandingkan

yang sempit.

Penajaman kontras citra melalui histogram dapat dilakukan dengan dua macam cara yaitu

perentangan kontras dan ekualisasi histogram. Perentangan kontras merupakan upaya

mempertajam kenampakan citra dengan merentang nilai maksimmum dan nilai minimum citra.

Kompresi citra justru sebaliknya dilakukan dengan memampatkan histogram yaitu menggeser

Histogram Citra Page 11

nilai minimum ke nilai minimum baru yang lebih tinggi dan menggeser nilai maksimum ke nilai

maksimum baru yang lebih rendah sehingga histogramnya menjadi lebih “langsing”. Berbeda

halnya dengan perentangan kontras yang bersifat linier, ekualisasi histogram merupakan upaya

penajaman secara non- linier yang menata kembali distribusi nilai piksel citra dalam bentuk

histogram ke bentuk histogram yang baru, dimana dapat terjadi penggabungan beberapa nilai

menjadi nilai baru dengan frekuensi kemunculan yang baru pula. Untuk penajaman citra sendiri

meliputi semua operasi yang menghasilkan citra baru dengan kenampakan visual dan

karakteristik visual yang berbeda. Citra baru disini maksudnya aadalah citra dengan

kenampakan yang lebih bagus dibanding dengan citra aslinya.

Penajaman citra (enhancement) dalam pengertiannya adalah proses mengubah nilai piksel

secara sistematis sehingga menghasilkan efek kenampakan citra yang lebih ekspresif sesuai

dengan kebutuhan pengguna. Meliputi semua operasi yang menghasilkan citra baru dengan

kenampakan visual dan karakteristik spektral yang berbeda. Penajaman Kontras ini bertujuan

untuk memperoleh kesan kontras yang lebih tinggi. Dengan mentransformasi seluruh nilai

kecerahan maka hasilnya adalah berupa citra baru dengan nilai maksimum awal, dan nilai

minimum baru lebih rendah dari nilai minimum awal dan jika dilihat secara visual hasilnya

berupa citra baru yang variasi hitam putihnya lebih menonjol sehingga tampak lebih tajam dan

memudahkan proses interpretasi.

Kontras citra dapat dilakukan dengan merentangkan nilai kecerahan pikselnya. Citra asli

biasanya memiliki panjang gelombang yang lebih sempit dari 0-255. Sehingga hasil citra baru

memiliki histogram yang memiliki kurva lebih besar.

Pemfilteran adalah cara untuk ekstraksi bagian data tertentu dari suatu himpunan data dengan

menghilangkan bagian-bagian data yang tidak diinginkan.

Filter dirancang untuk menyaring informasi spectral sehingga menghasilkan citra baru yang

mempunyai variasi nilai spektral yang berbeda dengan citra asli. Terdapat dua jenis filtering,

yaitu filter high pass dan filter low pass.

1. Filter high pass menghasilkan citra dengan variasi nilai kecerahan yang besar dari piksel

ke piksel, sedangkan filter low pass justru sebaliknya, memiliki fungsi untuk menaikkan

frekwensi sehingga batas satu bentuk dengan bentuk lainnya menjadi jelas. Tujuannya untuk

menonjolkan perbedaan antara objek ataupun perbedaan nilai, kondisi ataupun sifat antar

objek yang diwakili oleh nilai piksel.

Histogram Citra Page 12

2. Filter low pass adalah batas antara satu bentuk dengan bentuk lainnya menjadi kabur

sehingga terkesan memiliki gradasi yang halus. Tujuannya untuk memperhalus kenampakan

citra.

Dalam pembuatan aplikasi pengolahan citra menggunakan OpenCV kita menggunakan

microsoft visual studio 2008 untuk penulisan sintak dan untuk melakukan proses eksekusi.

a. Langkah pertama adalah buka software Microsoft Visual Studio 2008. Untuk membuat

project baru pilih New Project >> Visual C++ >> Win 32 >> (kemudian isi Name dengan

latihan) >> OK . Karena nama project yang kita gunakan adalah Latihan.

b. Setelah itu kita buka folder OpenCv untuk mengambil kodingan project yang akan kita

buat. Alamat yang digunakan adalah opencv >> samples >> cpp. Kodingan yang kami

gunakan adalah image. Kodingan tersebut kami copy kemudian paste pada Visual

Studio.

Kodingan yang digunakan

#include "stdafx.h"

#include <stdio.h>

#include <cv.h>

#include <iostream>

#include <conio.h>

#include <cxcore.h>

#include <highgui.h>

#include <stdlib.h>

#include "cv.h"

using namespace std;

using namespace cv;

Histogram Citra Page 13

//Returns the index of the maximum element in the array

int find_max(int * hist,int n){

int i_max=0;

for( int i=0;i<n;i++)

if(hist[i]>hist[i_max])

i_max=i;

printf("Nilai matriks yang paling sering muncul = %d\n",i_max);

return (i_max);

}

void main(){

IplImage * img;

IplImage * gray;

IplImage * histogram;

int height, width, step, channels,k,i_max;

int * hist;

uchar * data;

uchar * * gray_arr;

uchar * * histo_arr;

img = cvLoadImage("bendera.jpg");

height = img->height;

width = img->width;

step = img->widthStep;

channels = img->nChannels;

data = (uchar *)img->imageData;

hist = (int *)calloc(256,sizeof(int));

histo_arr =(uchar * * )malloc(sizeof(uchar * )*(height + 1));

gray_arr = (uchar * * )malloc(sizeof(uchar * )*(height + 1));

for(int i=0; i<height; i++) {

histo_arr[i]=(uchar *)malloc(sizeof(uchar)*(width + 1));

gray_arr[i] = (uchar * )malloc(sizeof(uchar)*(width + 1));

for(int j=0; j<width; j++) {

gray_arr[i][j] = (0.11*data[i*step + j*channels] + 0.56*data[i*step +

j*channels + 1] + 0.33*data[i*step + j*channels + 2]);

histo_arr[i][j] = 0;

}

}

printf("\nUntuk dapat mengetahui intensitas matriks,\n\

Anda dapat melihat program notepad yang terbuka atau \n\

bisa juga dengan melihat file matriks-histogram.txt");

printf("\n\nUntuk melihat bentuk histogramnya,\n\

Anda harus menutup (close) program notepad yang terbuka,\n\

Baru setelah itu window histogram akan muncul");

FILE * pFile;

pFile = fopen("matriks-histogram.txt","w");

for(int i=0;i<height;i++) {

fprintf(pFile,"baris %d --> ",(i+1));

for (int j=0;j<width;j++) {

k=gray_arr[i][j];

fprintf (pFile, "| %d | ", gray_arr[i][j]);

hist[k]++;

}

fprintf(pFile,"\n");

}

fclose (pFile);

printf("\n"); // tambahan

system("notepad.exe matriks-histogram.txt" );

printf("\n+---Info seputar gambar---+\n");

i_max=find_max(hist,256);

Histogram Citra Page 14

printf("MAX=%d\ni=%d",hist[i_max],i_max);

for(int i=(height-1);i>0;i--) {

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

if(i<=((hist[j]*height)/hist[i_max])) {

histo_arr[height-i][j*(width/256)]=255;

}}}

printf("\nUkuran gambar = %d x %d",width,height);

printf("\nPanjang Gambar (height) = %d pixel ",height);

printf("\nLebar Gambar (width) = %d pixel \n",width);

gray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);

histogram = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);

for(int i=0; i<height; i++) {

for(int j=0; j<width; j++) {

gray->imageData[i*gray->widthStep + j*gray->nChannels] =

gray_arr[i][j];

}}

for(int i=0; i<height; i++) {

for(int j=0; j<width; j++) {

histogram->imageData[i*histogram->widthStep + j*histogram->nChannels] =

histo_arr[i][j];

}}

cvNamedWindow("Original Image", CV_WINDOW_NORMAL);

cvMoveWindow("Original Image", 100, 100);

cvShowImage("Original Image", img);

cvNamedWindow("GrayScaled Image", CV_WINDOW_NORMAL);

cvMoveWindow("GrayScaled Image", 500, 100);

cvShowImage("GrayScaled Image", gray);

cvNamedWindow("Histogram Image",CV_WINDOW_NORMAL);

cvMoveWindow("Histogram Image",100,100);

cvShowImage("Histogram Image",histogram);

Mat src, dst,src1;

const char* equalized_window = "Gambar Histogram";

const char* nama_kelompok = "Nama Kelompok";

src1 = imread( "nama.jpg",1 );

src = imread( "bendera.jpg",1 );

cvtColor( src, src, COLOR_BGR2GRAY );

equalizeHist( src, dst );

namedWindow( nama_kelompok, CV_WINDOW_NORMAL );

namedWindow( equalized_window, CV_WINDOW_NORMAL );

imshow( nama_kelompok, src1 );

imshow( equalized_window, dst );

cvWaitKey(0);

cvReleaseImage(&img);

cvReleaseImage(&gray);

cvReleaseImage(&histogram);

free(gray_arr);

free(histo_arr);

}

Histogram Citra Page 15

c. Kemudian kita setting relese dan debug. Untuk mengaturnya kita masuk ke Project >>

Latihan Properties

d. Ketika sudah tampil coba property page nya kemudian klik Linker >> Input. Pertama

kita atur relese. Untuk mengatur relese kita ubah pada bagian Configuration >> Relese

Histogram Citra Page 16

>> Additional Include Directories. Kita kita input kodingan. Kodingan yang kita input

adalah:

opencv_features2d246.lib

opencv_highgui246.lib

opencv_core246.lib

opencv_imgproc246.lib

opencv_ml246.lib

opencv_objdetect246.lib

opencv_video246.lib

opencv_contrib246.lib

opencv_calib3d246.lib

Setelah itu klik OK

e. Setelah itu kita atur Debug. Caranya sama hanya saja pada Configuration kita ubah

menjadi Debug. Yang berbeda hanya kodingannya. Kodingan yang digunakan pada

debug adalah: opencv_features2d246.lib

opencv_highgui246d.lib

opencv_core246d.lib

opencv_imgproc246d.lib

opencv_ml246d.lib

Histogram Citra Page 17

opencv_objdetect246d.lib

opencv_video246d.lib

opencv_contrib246d.lib

opencv_calib3d246d.lib

Setelah itu klik OK

Jika Relese dan Debug sudah kita atur kemudian pilih Apply >> OK

f. Langkah selanjutnya adalah mengatur alamat folder pada Tools. Kita pilih Tools >>

Properties Project >> Project and Solution >> VC++ Directories. Pertama kita atur Library

File. Maka yang kita atur pada show directories >> Library files. Selanjutnya kita pilih

new line (kita masukan alamat folder penyimpanan) >> OK.

kita coppy paste C:\opencv\build\x86\vc9\lib pada library files

Histogram Citra Page 18

g. Setelah itu kita atur library pada Include files. Kita ubah Show directories foe menjadi

Include files.ada 2 alamat yag akan kita input yaitu:

C:\opencv\build\include

C:\opencv\include\opencv

Kemudian pilih OK

h. Setelah itu kita paste image ke dalam folder Visual Studio 2008 >> Projects >> latihan>>

latihan. Tampilan folder saat image berhasil kita paste pada folder visual studio.

Histogram Citra Page 19

i. Setelah semua settingan selesai kita atur lalu pilih save project. Kemudian kita jalankan

program dengan menngunakan tombol F5 pada keyboard atau kita pilih Debug >> start

Debugging.

Jika program berhasil maka hasil gambar seperti ini:

Histogram Citra Page 20

Matriks pada gambar histogram

Tampilan gambar nama.jpg setelah di histogram

Histogram Citra Page 21

Daftar Pustaka

Buku dan Ebook

Fatta, Hanif Al. 2007. Konversi Format Citra RGB Ke Format Grayscale Menggunakan Visual

Basic.

Nursyamsu, Ardi. 2011. Masuki Dunia Hacker Dengan C++. Jakarta: Jasakom.

Wibowo, Esther dan Erick Kurniawan. 2008. Histogram.

Hidayatno, Achmad dkk. 2010. Analisis Deteksi Tepi Pada Citra Berdasarkan Perbaikan

Kualitas Citra

Website

http://opencv.willowgarage.com/documentation/cpp/

http://docs.opencv.org/

http://www.codeblues.in/programming.php

https://sammypatikawa.wordpress.com/2012/05/11/greyscale/

http://www.mathworks.com/support/solutions/en/data/1-ECUGQX/

http://blog.aguskurniawan.net/post/opencv-210-with-visual-studio-2010.aspx

http://myopencv.wordpress.com/2009/06/14/image-enhancement-using-hsv-color-space/

http://mahisaajy.blogspot.com/

http://www.guntara.com/2013/04/pengenalan-histogram-citra-dan.html