187580377-histogram
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 :
7
6. Pilih saja fitur "Default" sesuai rekomendasi sistem. Jika, tampilan Anda sudah sesuai
dengan gambar di atas. Silakan klik tombol "Install" sehingga muncul seperti gambar
berikut ini :
7. Inilah proses instalasi komponen, tunggulah beberapa menit hingga proses benar-
benar selaesai. Lalu muncul seperti gambar berikut ini :
8. Instalasi telah selesai dilakukan maka klik tombol "Finish".
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
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
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