Pada
kesempatan kali ini kami akan membahas tentang Smoothing pada sebuah
citra yang diajukan guna melengkapi tugas pengolahan citra. Disini kami
melakukan smoothing menggunakan Opencv dan Ms Visual studio untuk
memperoleh pelembutan citra yang baik. Pengertian Smoothing itu sendiri
adalah Penyamaan pixel (guna
penghalusan) dengan sebelah-sebelahnya, untuk mengurangi kontras dan
mensimulasikan citra yang tidak fokus. sedangkan tujian dari Pelembutan Citra
(smoothing) yaitu mengurangi noise pada suatu image. Noise-noise
tersebut muncul sebagai akibat dari hasil pensamplingan yang tidak bagus. Pixel
komponen yang mempunyai noise pada umumnya memiliki frekuensi yang tinggi.
Kompoen citra yang berfrekuensi rendah akan diloloskan dan komponen yang
mempunyai frekuensi tinggi akan ditahan.
Smoothing, juga disebut kabur, adalah operasi
pengolahan citra sederhana dan sering digunakan. Pada proses pelembutan citra
(Smoothing) disini, kami menggunakan Opencv dan juga microsoft visual studio
untuk membuat sebuah program aplikasinya. Microsoft visual studio digunakan
untuk menuliskan sebuah code smoothing, dimana pada program aplikasi ini kami
menggunakan beberapa filter teknik smoothing atau pengkaburan, diantaranya
yaitu teknik Homogenous Blur, Gaussian Blur, Median Blur serta Bilateral Blur.
berikut adalah code yang digunakan untuk pembuatan aplikasi smoothing :
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
using namespace cv;
/// Global Variables
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;
Mat src; Mat dst;
char window_name[] = "Filter Demo 1";
/// Function headers
int display_caption( char* caption );
int display_dst( int delay );
/**
* function main
*/
int main( int argc, char** argv )
{
namedWindow( window_name, CV_WINDOW_AUTOSIZE );
/// Load the source image
src = imread( "../images/lena.jpg", 1 );
if( display_caption( "Original Image" ) != 0 ) { return 0; }
dst = src.clone();
if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; }
/// Applying Homogeneous blur
if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; }
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
{ blur( src, dst, Size( i, i ), Point(-1,-1) );
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
/// Applying Gaussian blur
if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; }
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
{ GaussianBlur( src, dst, Size( i, i ), 0, 0 );
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
/// Applying Median blur
if( display_caption( "Median Blur" ) != 0 ) { return 0; }
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
{ medianBlur ( src, dst, i );
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
/// Applying Bilateral Filter
if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
{ bilateralFilter ( src, dst, i, i*2, i/2 );
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
/// Wait until user press a key
display_caption( "End: Press a key!" );
waitKey(0);
return 0;
}
int display_caption( char* caption )
{
dst = Mat::zeros( src.size(), src.type() );
putText( dst, caption,
Point( src.cols/4, src.rows/2),
CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );
imshow( window_name, dst );
int c = waitKey( DELAY_CAPTION );
if( c >= 0 ) { return -1; }
return 0;
}
int display_dst( int delay )
{
imshow( window_name, dst );
int c = waitKey ( delay );
if( c >= 0 ) { return -1; }
return 0;
}
Pada code diatas terdapat empat jenis
pengkaburan, yaitu Homogenous blur, Gaussian Blur, Median Blur dan Bilateral
Blur. berikut adalah cuplikan code masing masing teknik pengkaburan.
Homogeneous blur if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; } for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) { blur( src, dst, Size( i, i ), Point(-1,-1) ); if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
Pada Homogenous blur disini kita menggunakan 4 argumen :
- src : Sumber gambar
- dst : image Destination
- Ukuran ( w , h) : Mendefinisikan ukuran kernel yang akan digunakan ( piksel w lebar dan tinggi h piksel )
- Titik ( -1 , -1 ) : Menunjukkan di mana titik jangkar ( pixel dievaluasi ) terletak terhadap lingkungan . Jika ada nilai negatif , maka pusat kernel dianggap sebagai titik anchor .
Gaussian blur if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; } for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) { GaussianBlur( src, dst, Size( i, i ), 0, 0 ); if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } } Pada Gaussian blur disini kita menggunakan 4 argumen :
- src : Sumber gambar
- dst : image Destination
-
Ukuran ( w , h) : Ukuran kernel yang akan digunakan ( tetangga dipertimbangkan ) . w dan h harus angka ganjil dan positif jika ukuran thi akan dihitung dengan menggunakan \ sigma_ { x } dan \ sigma_ { y } argumen.
- \ sigma_ { x } : Standar deviasi dari x . Menulis 0 menyiratkan bahwa \ sigma_ { x } dihitung dengan menggunakan ukuran kernel .\ sigma_ { y } : Standar deviasi dalam y . Menulis 0 menyiratkan bahwa \ sigma_ { y } dihitung dengan menggunakan ukuran kernel .
Median blur if( display_caption( "Median Blur" ) != 0 ) { return 0; } for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) { medianBlur ( src, dst, i ); if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
Pada Median blur disini kita menggunakan 3 argumen :
- src : Sumber gambar
- dst : image Destination
-
i: Ukuran dari kernel ( hanya satu karena kami menggunakan jendela persegi ) . bilangan i harus ganjil
Bilateral blur if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; } for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ) { bilateralFilter ( src, dst, i, i*2, i/2 ); if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
Pada Bilateral blur disini kita menggunakan 5 argumen :
- src : Sumber gambar
- dst : image Destination
- d : Diameter lingkungan masing-masing pixel.
- \sigma_ {warna} : Standar deviasi dalam ruang warna .
- \sigma_ {ruang} : Standar deviasi dalam koordinat ruang ( dalam hal piksel )
cukup
sekian penjelasan dari kami mengenai smoothing pengolahan citra, untuk
hasil gambar tiap tiap teknik pengkaburan atau smoothing akan menyusul
(berupa gambar). terima kasih...
tim penyusun :
Muhamad Asep Saputra (54410563)
Robby Johari (NPM)
Refferensi :