UJIAN TENGAH SEMESTER
PENGOLAHAN CITRA
CITRA GRAYSCALE, BRIGHTNESS, NEGATIVE, DAN HISTOGRAM
Disusun untuk memenuhi matakuliah Pengolahan Citra yang dibimbing
Oleh Bapak Heru Wahyu Herwanto
Nama :
NIMAS HADI ATMAJA
140535605069
S1 TI 2014 B
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 TEKNIK INFORMATIKA
OKTOBER 2016
PENGOLAHAN CITRA
CITRA GRAYSCALE, BRIGHTNESS, NEGATIVE DAN HISTOGRAM
TUJUAN
Memahami cara installing opencv pada visual studio 2010
Memahami pengolahan citra dengan cara grayscale, brightness, negative dan histogram.
DASAR TEORI
Citra dan Pengolahan Citra
Citra atau Image merupakan istilah lain dari gambar, yang merupakan informasi berbentuk visual. Suatu citra diperoleh dari penangkapan kekuatan sinar yang dipantulkan oleh objek. Ketika sumber cahaya menerangi objek, objek memantulkan kembali sebagian cahaya tersebut. Pantulan ini ditangkap oleh alat-alat pengindera optik, misalnya mata manusia, kamera, scanner dan sebagainya. Bayangan objek tersebut akan terekam sesuai intensitas pantulan cahaya. Ketika alat optik yang merekam pantulan cahaya itu merupakan mesin digital, misalnya kamera digital, maka citra yang dihasilkan merupakan citra digital. Pada citra digital, kontinuitas intensitas cahaya dikuantisasi sesuai resolusi alat perekam.
Suatu citra adalah fungsi intensitas 2 dimensi f(x, y), dimana x dan y adalah koordinat spasial dan f pada titik (x, y) merupakan tingkat kecerahan (brightness) suatu citra pada suatu titik. Citra digital adalah citra f(x,y) yang telah dilakukan digitalisasi baik koordinat area maupun brightness level. Nilai f di koordinat (x,y) menunjukkan brightness atau grayness level dari citra pada titik tersebut.
Citra Digital adalah representasi dari sebuah citra dua dimensi sebagai sebuah kumpulan nilai digital yang disebut elemen gambar atau piksel. Piksel adalah elemen terkecil yang menyusun citra dan mengandung nilai yang mewakili kecerahan dari sebuah warna pada sebuah titik tertentu. Umumnya citra digital berbentuk persegi panjang atau bujur sangkar (pada beberapa sistem pencitraan ada pula yang berbentuk segienam) yang memiliki lebar dan tinggi tertentu. Ukuran ini biasanya dinyatakan dalam banyaknya piksel sehingga ukuran citra selalu bernilai bulat. Setiap piksel memiliki koordinat sesuai posisinya dalam citra. Koordinat ini biasanya dinyatakan dalam bilangan bulat positif, yang dapat dimulai dari 0 atau 1 tergantung pada sistem yang digunakan. Setiap piksel juga memiliki nilai berupa angka digital yang merepresentasikan informasi yang diwakili oleh piksel tersebut. Format data citra digital berhubungan erat dengan warna. Pada kebanyakan kasus, terutama untuk keperluan penampilan secara visual, nilai data digital merepresentasikan warna dari citra yang diolah. Format citra digital yang banyak dipakai adalah Citra Biner (monokrom), Citra Skala Keabuan (gray scale), Citra Warna (true color), dan Citra Warna Berindeks.
Pengolahan citra adalah sebuah proses pengolahan yang inputnya adalah citra. Ouputnya dapat berupa citra atau sekumpulan karakteristik atau parameter yang berhubungan dengan citra. Istilah pengolahan citra digital secara umum didefinisikan sebagai pemrosesan citra dua dimensi dengan komputer. Dalam definisi yang lebih luas, pengolahan citra digital juga mencakup semua data dua dimensi. Citra digital adalah barisan bilangan nyata maupun kompleks yang diwakili oleh bit-bit tertentu.
Pengolahan citra memiliki beberapa fungsi, diantaranya adalah:
Digunakan sebagai proses memperbaiki kualitas citra agar mudah diinterpretasi oleh manusia atau komputer.
Digunakan untuk Teknik pengolahan citra dengan mentrasformasikan citra menjadi citra lain. Contoh : pemampatan citra (image compression) Sebagai proses awal (preprocessing) dari komputer visi.
Pengolahan citra dapat dibagi kedalam tiga kategori yaitu :
Kategori rendah melibatkan operasi-operasi sederhana seperti pra-pengolahan citra untuk mengurangi derau, pengaturan kontras, dan pengaturan ketajaman citra. Pengolahan kategori rendah ini memiliki input dan output berupa citra.
Pengolahan kategori menengah melibatkan operasi-operasi seperti segmentasi dan klasifikasi citra. Proses pengolahan citra menengah ini melibatkan input berupa citra dan output berupa atribut (fitur) citra yang dipisahkan dari citra input. Pengolahan citra kategori melibatkan proses pengenalan dan deskripsi citra.
Pengohalan kategori tinggi ini termasuk menjadikan objek-objek yang sudah dikenali menjadi lebih berguna, berkaitan dengan aplikasi, serta melakukan fungsi-fungsi kognitif yang diasosiasikan dengan vision.
OpenCV
OpenCV (Open Computer Vision) adalah sebuah API (Application Programming Interface) Library yang sudah sangat familiar pada Pengolahan Citra Computer Vision. Computer Vision itu sendiri adalah salah satu cabang dari Bidang Ilmu Pengolahan Citra (Image Processing) yang memungkinkan komputer dapat melihat seperti manusia. Dengan vision tersebut komputer dapat mengambil keputusan, melakukan aksi, dan mengenali terhadap suatu objek. Beberapa pengimplementasian dari Computer Vision adalah Face Recognition, Face Detection, Face/Object Tracking, Road Tracking, dll. OpenCVadalah library Open Source untuk Computer Vision untuk C/C++, OpenCV didesain untuk aplikasi real-time, memiliki fungsi-fungsi akuisisi yang baik untuk image/video.
OpenCV sendiri terdiri dari 5 library, yaitu :
CV : untuk algoritma Image processing dan Vision.
ML : untuk machine learning library
Highgui : untuk GUI, Image dan Video I/O.
CXCORE : untuk struktur data, support XML dan fungsi-fungsi grafis.
CvAux
Struktur dan Konten OpenCV :
Histogram
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 relative dari intensitas pada citra, kecerahan, dan kontas dari sebuah gambar.
Proses Histogram :
Gambar gelap : histogram cenderung ke sebelah kiri
Gambar terang : histogram cenderung ke sebelah kanan
Gambar low contrast : histogram mengumpul di suatu tempat
Gambar high contrast : histogram merata di semua tempat
Sumbu ordinat vertikal merupakan representasi piksel dengan nilai tonal dari tiap-tiap deret bin pada sumbu axis horizontalnya. Sumbu axis terdiri dari deret logaritmik bindensitometry yang membentuk rentang luminasi atau exposure range yang mendekati respon spectral sensitivity visual mata manusia. Deret bin pada density yang terpadat mempunyai interval yang relatif sangat linear dengan variabel mid-tone terletak tepat di tengahnya. Pada umumnya, sebuah histogram hanya memetakan seluruh nilai tonal dari citra digital pada bin luminasi masing-masing. Nilai tonal tersebut telah tersedia dalam color space yang umum digunakan adalah sRGB dan AdobeRGB yang mempunyai nilai gamma γ = 2,2.
Informasi yang didapat dari Histogram :
Puncak histogram intensitas pixel yangpaling menonjol
Lebar puncak rentang kontras
Citra yang baik mengisi daerah derejatkeabuan secara penuh dan merata pada setiap nilai intensitas pixel
Over-exposed (terlalu terang) dan under-exposed (terlalu gelap) memiliki rentang kontras sempit.
Kegunaan histogram dalam pengolahan citra :
Untuk melihat apakah distribusi informasi yang ada dalam suatu citra sudah baik atau belum.
Histogram juga banyak digunakan dalam texture analysis, yaitu analisa untuk melihat apakah kedua tekstur sama atau berbeda. Misalkan seberapa mirip tekstur karpet A dengan tekstur karpet B.
Untuk melihat apakah pencahayaan dan contrast suatu citra sudah cukup atau belum (terlalu terang atau terlalu gelap). Caranya histogram dari suatu citra yang terlalu terang cenderung mengumpul di nilai grey level yang tinggi (ke arah nilai 255), sebaliknya histogram dari suatu citra yang terlalu gelap cenderung mengumpul di nilai grey level yang rendah (ke arah nilai 0).
Citra Greyscale
Citra Greyscale merupakan citra digital yang hanya memiliki satu nilai kanal pada setiap pixelnya, dengan kata lain nilai bagian RED = Green = BLUE. Nilai tersebut digunakan untuk menunjukkan tingkat intensitas. Warna yang dimiliki adalah warna dari hitam, keabuan, dan putih. Tingkatan keabuan di sini merupakan warna abu dengan berbagai tingkatan dari hitam hingga mendekati putih. Citra greyscale berikut memiliki kedalaman warna 8 bit (256 kombinasi warna keabuan).
Gambar 4.1 Grayscale
Citra RGB
Suatu citra biasanya mengacu ke citra RGB. Sebenarnya bagaimana citra disimpan dan dimanipulasi dalam komputer diturunkan dari teknologi televisi, yang pertama kali mengaplikasikannya untuk tampilan grafis komputer. Jika dilihat dengan kaca pembesar, tampilan monitor komputer akan terdiri dari sejumlah triplet titik warna merah (RED), hijau (GREEN) dan biru (BLUE). Tergantung pada pabrik monitornya untuk menentukan apak titik tersebut merupakan titik bulat atau kotak kecil, tetapi akan selalu terdiri dari 3 triplet red, green dan blue. Citra dalam komputer tidak lebih dari sekumpulan sejumlah triplet dimana setiap triplet terdiri atas variasi tingkat keterangan (brightness) dari elemen red, green dan blue. Representasinya dalam citra, triplet akan terdiri dari 3 angka yang mengatur intensitas dari Red (R), Green (G) dan Blue (Blue) dari suatu triplet. Setiap triplet akan merepresentasikan 1 pixel (picture element). Suatu triplet dengan nilai 67, 228 dan 180 berarti akan mengeset nilai R ke nilai 67, G ke nilai 228 dan B k nilai 180. Angka-angka RGB ini yang seringkali disebut dengan color values. Pada format .bmp citra setiap pixel pada citra direpresentasikan dengan dengan 24 bit, 8 bit untuk R, 8 bit untuk G dan 8 bit untuk B.
Gambar 5.1 bit RGB
Brightness
Brightness adalah proses untuk kecerahan citra, jika intensitas pixel dikurangi dengan nilai tertentu maka citra akan menjadi lebih gelap, dan sebaliknya jika intensitas pixelnya ditambah dengan nilai tertentu maka akan lebih terang.
Gambar 6.1 Rumus Brightness
dimana
f0(x,y) : Nilai pixel pada titik x,y setelah brightness
fi(x,y) : Nilai Pixel pada titik x,y citra asli
k : Nilai Penguatan kecerahan
Negative
Citra negatif merupakan citra yang berkebalikan dengan citra asli, sama seperti film negatif hasil pengambilan citra dengan menggunakan kamera konvensional. Jika terdapat sebuah citra yang mempunyai jumlah gray level L dengan range [0 hingga L-1], maka citra negatif diperoleh dari transformasi negatif dengan persamaan :
Gambar 7.1 Rumus Negative
Keterangan :
s = citra hasil transformasi negatif.
L = jumlah gray level sebuah citra.
r = citra asli.
AKTIFITAS PRAKTIKUM
Installing opencv pada visual studio
Untuk menginstall opencv 2.4.10 ini langkah pertama kita ekstrak opencv ini pada direktori C. Kemudian klik Extract
Setelah selesai, tambahkan directori tempat opencv tersebut pada PATH sistem dengan cara buka control panel – system and security – system – advanced system settings dan klik Environment variables.
Pada langkah selanjutnya cari menu Path dan klik edit.
Masukkan directory tempat opencv seperti gambar dibawah.
Setelah kita melakukan langkah-langkah diatas, selanjutnya kita akan membuat project baru dan cara mengatur visual C++.
Untuk langkah pertama kita masuk pada visual studio 2010 kemudian pilih menu new project, dan pilih visual C++ - Empty Project, beri nama dan letak yang diinginkan.
Klik OK. Langkah selanjutnya yaitu klik kanan pada project (cobacitra) pilih property kemudian pilih VC++ Directories – Include Directories dan klik edit.
Klik new line kemudian masukkan seperti pada contoh dan klik OK.
Langkah selanjutnya yaitu pilih Library Directories dan masukkan juga seperti yang ada pada contoh dibawah ini dan klik OK.
Setelah itu kembali pada property dialog dan pilih Linker – Input – Additional Dependecies dan kemudian tambahkan new entries dengan menyalin tipe file seperti dibawah dan klik OK
opencv_calib3d2410d.lib
opencv_contrib2410d.lib
opencv_core2410d.lib
opencv_features2d2410d.lib
opencv_flann2410d.lib
opencv_gpu2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_legacy2410d.lib
opencv_ml2410d.lib
opencv_nonfree2410d.lib
opencv_objdetect2410d.lib
opencv_photo2410d.lib
opencv_stitching2410d.lib
opencv_ts2410d.lib
opencv_video2410d.lib
opencv_videostab2410d.lib
Langkah selanjutnya yaitu membuat item untuk menulis code yang sesungguhnya. Caranya dengan klik kanan pada project (cobacitra) pilih Add – new item – visual C++ - C++ file. Kemudian beri nama yang diinginkan dan klik Add.
Maka project sudah siap untuk digunakan.
Citra Grayscale, brightness, negative dan histogram
Histogram Gambar Asli
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
using namespace std;
using namespace cv;
int main() {
Mat src, dst;
/// Load image
src = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG", 1);
if (!src.data) {
return -1;
}
/// Separate the image in 3 places ( B, G and R )
vector bgr_planes;
split(src, bgr_planes);
/// Establish the number of bins
int histSize = 256;
/// Set the ranges ( for B,G,R) )
float range[] = {0, 256} ;
const float* histRange = {range};
bool uniform = true;
bool accumulate = false;
Mat b_hist, g_hist, r_hist;
/// Compute the histograms:
calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);
calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate);
calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate);
// Draw the histograms for B, G and R
int hist_w = 512; int hist_h = 400;
int bin_w = cvRound((double) hist_w/histSize);
Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0,0,0));
/// Normalize the result to [ 0, histImage.rows ]
normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
/// Draw for each channel
for(int i=1; i
line(histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at(i-1))),
Point(bin_w*(i), hist_h - cvRound(b_hist.at(i))),
Scalar(255, 0, 0), 2, 8, 0);
line(histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at(i-1))) ,
Point(bin_w*(i), hist_h - cvRound(g_hist.at(i))),
Scalar(0, 255, 0), 2, 8, 0 );
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at(i-1))) ,
Point(bin_w*(i), hist_h - cvRound(r_hist.at(i))),
Scalar(0, 0, 255), 2, 8, 0);
}
/// Display
imshow("Image", src);
imshow("Histogram", histImage );
waitKey(0);
return 0;
}
Tampilan :
Penjelasan :
Pada program diatas kita belajar membuat sebuah histogram menggunakan aplikasi Microsoft Visual Studio, OpenCV dan menggunakan bahasa C++ dari sebuah citra atau gambar dengan warna aslinya. Langkah pertama yang harus kita lakukan adalah membuat fungsi main() dimana isinya antara lain memanggil gambar yang ingin dibuat histogramnya, memisahkan gambar tersebut menjadi 3 bagian yaitu warna merah, hijau, dan biru (red, green dan blue), menetapkan nomor bin-nya yaitu 256, mengatur jarak warna untuk merah, hijau dan biru, menghitung histogram, menggambar histogram untuk merah, hijau dan biru, menormalkan kembali hasilnya, menggambar untuk setiap channelnya, dan yang terakhir yaitu menampilkan hasil dari histogram dan gambar tersebut.
Histogram Greyscale
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
using namespace std;
using namespace cv;
int main() {
Mat src, gray;
src = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG", 0);
gray = src.clone();
namedWindow("Gray", 1);
imshow("Gray", gray);
// Initialize parameters
int histSize = 256; // bin size
float range[] = {0, 255};
const float *ranges[] = {range};
// Calculate histogram
MatND hist;
calcHist(&gray, 1, 0, Mat(), hist, 1, &histSize, ranges, true, false);
// Show the calculated histogram in command window
double total;
total = gray.rows * gray.cols;
for (int h=0; h
float binVal = hist.at(h);
cout<<" "<
}
// Plot the histogram
int hist_w = 512; int hist_h = 400;
int bin_w = cvRound((double) hist_w/histSize);
Mat histImage(hist_h, hist_w, CV_8UC1, Scalar( 0,0,0));
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
for (int i=1; i
line(histImage, Point(bin_w*(i-1), hist_h - cvRound(hist.at(i-1))),
Point(bin_w*(i), hist_h - cvRound(hist.at(i))),
Scalar(255, 0, 0), 2, 8, 0 );
}
namedWindow("Result", 1 );
imshow("Result", histImage);
waitKey(0);
return 0;
}
Tampilan :
Penjelasan :
Pada program diatas kita belajar membuat sebuah histogram menggunakan aplikasi Microsoft Visual Studio, OpenCV dan menggunakan bahasa C++ dari sebuah citra atau gambar greyscale. Langkah pertama yang harus kita lakukan adalah membuat fungsi main()dimana isinya antara lain memanggil gambar yang ingin dibuat histogramnya, menginisialisasi parameternya yang didalam nya terdapat menetapkan bin-nya, kemudian menghitung histogramnya, menampilkan hasil perhitungan di command window nantinya, menggambar histogram untuk masing-masing warna merah, hijau dan biru, dan yang terakhir menampilkan hasil output dari program.
Citra GrayScale, Brightness dan Negative
#include
#include
#include
#include
using namespace cv;
using namespace std;
double alpha;
int beta;
int main()
{
alpha = 1.0;
beta = 80;
Mat img = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG"); //gambar asli
imshow("Original Picture", img);
Mat im = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG",0); //pembuatan grayscale
Mat ima = im.clone();
imshow("Grayscale", ima);
//negatif RGB
Mat imag = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG");
for(int i=0;i
{
for(int j=0;j
{
for(int channel=0; channel < 3; channel++){
imag.at(i,j)[channel] = 255 - imag.at(i,j)[channel];
}
}
}
imshow("Negative RGB",imag);
//brightness RGB
Mat image = imread("D://kuliah//semester 5//Pengolahan Citra//gambar.JPG");
Mat new_image = Mat::zeros( image.size(), image.type() );
for( int y = 0; y < image.rows; y++ )
{
for( int x = 0; x < image.cols; x++ )
{
for( int c = 0; c < 3; c++ )
{
new_image.at(y,x)[c] = saturate_cast( alpha*( image.at(y,x)[c] ) + beta );
}
}
}
imshow("Brightness 3 Warna", new_image);
waitKey(0);
}
Tampilan :
Penjelasan :
Pada program diatas kita belajar membuat sebuah pengolahan citra grayscale, brightness dan negative menggunakan aplikasi Microsoft Visual Studio, OpenCV dan menggunakan bahasa C++. Langkah pertama yang harus kita lakukan adalah membuat fungsi main() dimana isinya antara lain menampilkan (memanggil) gambar asli terlebih dahulu, kemudian gambar asli tersebut dirubah menjadi bentuk grayscale. Pembuatan gambar atau citra negatif RGB menggunakan perulangan dimana nantinya setiap pixel dirubah menjadi 255 dan kemudian akan dikurangi dengan nilai pixel itu sendiri (nilai pixel yang sebelumnya). Untuk pengolahan citra brightness menggunakan perulangan dimana nilai setiap pixelnya akan ditambahkan dengan 80, namun apabila nilai pixel tersebut lebih besar dari 255 maka hasil dari pixel tersebut menggunakan nilai maksimalnya yaitu tetap 255.
Kesimpulan
Pengolahan citra adalah sebuah proses pengolahan yang inputnya adalah citra. Ouputnya dapat berupa citra atau sekumpulan karakteristik atau parameter yang berhubungan dengan citra. Histogram dalam pengolahan citra dapat diartikan sebagai representasi grafis untuk distribusi warna dari citra digital atau menggambarkan penyebaran nilai-nilai intensitas pixel dari suatu citra.
Dalam pengolahan citra kita dapat mengolah sebuah gambar menjadi brightness dengan cara menambah nilai intensitas pixel, untuk mengolah gambar negatif kita dapat mengembalikan nilai pixel asli dari gambar tersebut. Sedangkan untuk grayscale hanya memiliki 1 kanal yang merupakan tingkat kebuan gambar itu sendiri dengan tingkatan dari hitam sampai mendekati putih.
Daftar Pustaka
Ramy Sayed. 2014. Installing OpenCV 2.4.10 for Visual Studio 2010. http://runlearning.blogspot.co.id/2014/12/installing-opencv-2410-in-visual-c-2010.html (Diakses pada 6 Oktober 2016)
Ridick,Fajar. 2014. INFO::Pengertian OpenCV. https://fajar-el-ridikc.blogspot.com/2014/12/info-pengertian-opencv.html#.WAdePdJ95dg . (Diakses pada 19 Oktober 2016)
Putra, Darma. 2010. Pengolahan Citra Digital. Yogyakarta. ANDI.
Sapermana, Romli. 2015. Pengertian Citra dan pengolahan Citra. http://www.romlisapermana.com/2015/07/pengertian-citra-dan-pengolahan-citra.html . (Diakses pada 19 Oktober 2016)
Rahman, Sayuti. 2013. http://say-community.blogspot.co.id/2013/12/keceraha-brightness.html . (Diakses pada 19 Oktober 2016)
Wicaksana, Anggit. 2015. https://www.academia.edu/12351876/Pengolahan_Citra_Digital_-_Citra_Negatif . (Diakses Pada 19 Oktober 2016)
Oktavia, Deby dan Novalia, Kiki. 2012. Tugas Pengolahan Citra – Histogram. http://debyoktavia68.blogspot.co.id/2012/11/pengolahan-citra-histogram_13.html . (Diakses pada 20 Oktober 2016)