187580377-histogram

21
Membuat Aplikasi Pengolahan Citra Histogram dengan menggunakan OpenCV 2013 INDRA LUMBANTOBING (59410282) STEPHANIE SAGITA (56410687) 4IA03

Upload: sri-suryo

Post on 30-Dec-2015

31 views

Category:

Documents


1 download

TRANSCRIPT

“ Membuat Aplikasi Pengolahan

Citra Histogram dengan

menggunakan OpenCV ”

2013

INDRA LUMBANTOBING (59410282)

STEPHANIE SAGITA (56410687)

4IA03

1

KATA PENGANTAR

Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Kuasa atas Rahmat dan

Karunia-Nya sehingga penulis dapat menyelesaikan tugas ebook ini dengan tepat waktu,

ebook ini penulis buat untuk melengkapi salah satu tugas kuliah yaitu matakuliah Pengantar

Pengolahan Citra, ebook ini penulis beri judul “Membuat Aplikasi Pengolahan Citra

Histogram dengan menggunakan OpenCV” . Dalam makalah ini berisi tentang Instalasi

Microsoft Visual Studio 2008, Instalasi Open CV 2.4.6, Cara mengatur Open CV, dan Cara

membuat aplikasi Histogram.

Penulis juga mengucapkan terimakasih kepada semua pihak yang telah membantu demi

terselesainya ebook ini, penulis berterimakasih baik kepada orang tua, Dosen Universitas

Gunadarma khusus nya bapak Eri Prasetyo Wibowo selaku dosen Pengantar Pengolahan

Citra, teman dan kepada semua pihak yang telah membantu terselesainya makalah ini dan

telah memberikan dukungan baik dalam dukungan moral maupun materi.

Penulis juga meminta maaf jika ada kekurangan dalam ebook ini, oleh karena itu penulis

mengharapkan adanya kritik dan saran yang membangun dari para pembaca sehingga penulis

dapat membuat ebook yang lebih baik untuk kedepannya. Sekian pengantar dari penulis

kurang lebihnya penulis meminta maaf.

DEPOK, 16 November 2013

Penulis

2

DAFTAR ISI

KATAPENGANTAR .................................................................................................... 1

BAB 1 – PENDAHULUAN…………...............…………………………………….....3

BAB 2 - INSTALASI DAN KONFIGURASI ……………………….………………. 4

BAB 3 - PROGRAM 1: HISTOGRAM CITRA ……………………………….......... 12

LISTING PROGRAM…………………………………………………………………19

DAFTAR PUSTAKA………………………...........…………………………………..21

3

BAB 1

PENDAHULUAN

Seiring dengan pesatnya kemajuan teknologi informasi, data atau informasi semakin

banyak bila dilihat dari bentuk dan jenisnya. Mulai dari teks, gambar, audio, dan juga video.

Gambar, atau yang bisa juga disebut sebagai citra, berperan sangat penting sebagai

bentuk informasi visual. Ada yang mengatakan bahwa citra (gambar) lebih berarti dari ribuan

kata-kata. Saya membenarkan hal tersebut, karena memang benar dengan melihat suatu

gambar kita langsung bisa mendefinisikan sendiri mengenai gambar tersebut. Dan juga bisa

memberikan banyak arti lainnya.

Terkadang citra yang ada itu tidak sepenuhnya baik maksudnya tidak sepenuhnya

sempurna, perlu dilakukan suatu proses untuk membuatnya menjadi lebih baik. Proses inilah

yang dinamakan pengolahan citra.

Teknik pengolahan citra-pun sudah semakin banyak digunakan. Contohnya saja

dalam dunia perdagangan. Kita semua mungkin sudah tahu dengan yang namanya barcode.

Penggunaan barcode di supermarket dibuat untuk mempermudah pembacaan harga. Bila

tidak menggunakan barcode mungkin petugas bisa dibuat sulit, karena harus mengecek harga

barang satu-satu. Selain itu masih ada lagi, sidik jari untuk kehadiran juga termasuk aplikasi

pengolahan citra.

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)

Di dalam ebook ini akan dijelaskan bagaimana membuat suatu aplikasi yang berkaitan

dengan pengolahan citra. Aplikasinya yaitu Histonogram. Di halaman terakhir, penulis juga

melampirkan source code yang digunakan dalam pembuatan aplikasi tersebut.

4

BAB 2

INSTALASI DAN KONFIGURASI

Dalam pembuatan aplikasi pengolahan citra, penulis menggunakan perangkat lunak berikut :

1. Microsoft Visual C++ 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.

2. OpenCV 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.

Spesifikasi minimum sistem yang harus Anda miliki yaitu :

1,6 GHz or faster processor

1024 MB RAM

3 GB or available hard-disk space

5400 RPM hard-disk Drive

Direct X 9 – capable video car running at 1024 x 768 or higher display resolution

DVD – ROM Drive

5

2.1 INSTALASI

2.1.1 INSTALASI MICROSOFT VISUAL STUDIO 2008

Adapun langkah-langkah instalasi MS Visual Studio 2008 sebagai berikut:

1. Masukkan DVD software MS Visual Studio 2008 kedalam DVD Room PC/laptop

Anda, kemudian akan muncul auto run CD. Jika tidak muncul maka klik file

Setup.exe atau jika anda mendownload software MS Visual Studio langsung saja klik

setup sehingga muncul seperti gmbar aberikut ini :

2. Kemudian pilih menu yang paling atas yaitu "Install Visual Studio 2008", lalu klik

sehingga muncul seperti gambar berikut ini :

6

3. Tunggulah hingga progressbar selesai loading sehingga muncul tombol "Next" seperti

gambar berikut ini :

4. Kemudian klik tombol "Next" di atas sehingga muncul seperti gambar berikut ini :

5. Karena penulis menggunakan lisensi yang disediakan oleh kantor teman saya, maka

secara otomatis product key number akan terisi. Jangan lupa pilih "I have read and

accept the license terms" lalu klik tombol "Next" lagi sehingga muncul seperti gambar

berikut ini :

8

2.1.2 INSTALASI OPENCV 2.1

1. Download terlebih dahulu software OpenCv 2.4.6

2. Setelah selesai download kita akan akan muncul jendela instalasi klik saja next maka

kita akan masuk ke proses ekstrak, seperti gambar dibawah ini :

3. Tunggu sampai proses ekstraksi selesai maka OpenCV sudah terinstall dan dapat

digunakan.

9

2.2 KONFIGURASI / PENGATURAN PADA OPENCV

1. Untuk melakukan konfigurasi pada OpenCv kita bisa melakukannya dengan masuk ke File

-> New -> Project

2. Setelah itu pilih Win32 Console Application

3. Beri nama Histogram (ini dapat diganti sesuka kita)

4. Setelah itu kita setting Project Directories

Klik kanan project>>Properties >>Linker >>Input >>

release

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

10

debug

opencv_features2d246.lib

opencv_highgui246d.lib

opencv_core246d.lib

opencv_imgproc246d.lib

opencv_ml246d.lib

opencv_objdetect246d.lib

opencv_video246d.lib

opencv_contrib246d.lib

opencv_calib3d246d.lib

Klik Tools -> Options -> Projects and Solutions -> VC++ Directories ->

Library

C:\opencv\build\x86\vc9\lib

11

Include

C:\opencv\build\include

C:\opencv\include\opencv

12

BAB 3

HISTOGRAM CITRA

3.1 HISTOGRAM CITRA

Untuk membuat histogram, penulis terlebih dahulu merubah gambar asli menjadi gambar

grayscale (abu-abu), baru setelah itu membuat histogramnya.

3.1.1 Citra asli (RGB).

Citra asli merupakan citra yang memiliki warna alami dan belum mengalami perubahan.

Dalam citra ini terdiri dari kombinasi warna merah (Red), hijau (Green), dan biru (Blue).

Dengan demikian citra ini mempunyai 3 kanal, yang masing-masing kanal memiliki 8 bit per

piksel, berarti total bit keseluruhan yang dimiliki citra ini yaitu 24 bit per piksel.

3.1.2 Citra grayscale.

Citra grayscale terdiri atas warna abu-abu, bervariasi pada warna hitam pada bagian intensitas

terendah dan warna putih pada intensitas tertinggi. Pada citra grayscale, warna bervariasi

antara hitam dan putih, tetapi variasi warna diantaranya sangatlah banyak. Citra grayscale

disimpan dalam format 8 bit untuk setiap sample pixel, yang memungkinkan sebanyak 256

intensitas. Format ini sangatlah membantu dalam pemrograman karena manipulasi bit yang

tidak terlalu banyak.

3.1.3 Histogram.

Dengan histogram kita bisa menentukan apakah citra yang akan dinilai tersebut baik atau

malah sebaliknya. Kita juga bisa tahu bahwa 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.

13

3.2 ALGORITMA

Algoritma membuat histogram citra

1. Konversi citra RGB menjadi citra grayscale

- ambil nilai pixel merah, hijau, biru dari gambar berwarna

- gunakan fungsi matematika dan masukkan nilainya dalam satu warna grayscale

citra grayscale = 0,33 RED + 0,56 GREEN + 0,11 BLUE

- ganti warna merah, hijau, biru dengan warna baru grayscale

2. Membuat matriks dari citra

3. Menentukan intensitas matriks

4. Membuat histogram

3.3 PEMROGRAMAN

Penjelasan kode program

#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;

Perintah include diatas merupakan prepocessor yang digunakan untuk melampirkan file

header.

IplImage * img;

IplImage * gray;

IplImage * histogram;

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

int * hist;

uchar * data;

uchar * * gray_arr;

uchar * * histo_arr;

Digunakan untuk mendeklarasikan variabel-variabel yang akan digunakan di fungsi main.

img = cvLoadImage("Kucing.jpg");

Digunakan untuk memuat gambar dari sumber.

Mat src, dst,src1;

const char* nama_kelompok = "Nama Kelompok";

const char* source_window = "Source image";

const char* equalized_window = "Histogram Image";

14

Mendeklarasikan variabel src, ext, src1 dan juga menetapkan nilai untuk masing-masing

pointer yaitu nama_kelompok, source_window, equalized_window

/// Load image

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

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

Perintah diatas digunakan untuk membaca gambar, gambar yang akan ditampilkan adalah

gambar nama yaitu berisi nama kelompok, dan gambar kucing.

/// Convert to grayscale

cvtColor( src, src, COLOR_BGR2GRAY );

/// Apply Histogram Equalization

equalizeHist( src, dst );

Perintah diatas digunakan untuk merubah warna gambar yang akan ditampilkan

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++) {

// we know that ISO grayscale image is 11%BLUE + 56% GREEN + 33% RED..... so

converitng 1d array into 2d array

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;

}

}

Digunakan untuk mengkonversi gambar ke grayscale.

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

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

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

//gray_arr[i][j]+=80;

k=gray_arr[i][j];

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

//printf("| %d | ", gray_arr[i][j]); // tambahan

hist[k]++;

}

fprintf(pFile,"\n");

//printf("\n"); // tambahan

}

Digunakan untuk membuat histogram array.

/// Display results

namedWindow( nama_kelompok, WINDOW_AUTOSIZE );

namedWindow( source_window, WINDOW_AUTOSIZE );

namedWindow( equalized_window, WINDOW_AUTOSIZE );

imshow( nama_kelompok, src1 );

imshow( source_window, src );

imshow( equalized_window, dst );

15

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);

Perintah diatas digunakan untuk menginisialisasi window yang digunakan dan menampilkan

gambar histogram.

3.4 DEMO PROGRAM

Setelah program dijalankan maka akan mengeluarkan output berupa gambar asli, gambar

abu-abu, gambar histogram, dan intentsitas matriks.

Properti gambar yang digunakan yaitu :

Name : lena.jpg dan nama.jpg

Item type : JPEG image

Dimensions : 512 pixel x 512 pixel

Size : 89,6 KB dan 99,2 KB

Bit depth : 24

Camera maker : EASTMAN KODAK COMPANY

Camera model : KODAK V550 ZOOM DIGITAL CAMERA

Figure 1Original Image

16

Figure 2Grayscale Image

Figure 3 Histogram Image

Figure 4 Histogram Image

17

18

Listing Program

#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;

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("Kucing.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" );

19

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

i_max=find_max(hist,256);

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( "Kucing.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);

}

20

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://www.tenouk.com/installusevisualstudio2008.html

http://adhit8.blogspot.com/2011/06/instalasi-microsoft-visual-studio-team.html

http://priawadi.blogspot.com/2012/09/install-opencv-dengan-visual-c-visual.html