Pertemuan
kali ini saya akan membuat tentang penajaman gambar dengan menggunakan Opencv.
Pertama kali saya akan membahas tentang Opencv, Opencv adalah library Image Processing berbasis bahasa C++.
OpenCV digunakan oleh banyak developer, scientist, dan programmer
untuk mengembangkan sebuah program pattern recognition.
Untuk membuat program dengan
menggunakan Opencv kita menggunakan program bantuan yaitu Microsoft Visual Studio, dan pada pembuatan Website ini saya
menggunakan Microsoft Visual Studio 2010.
Sebenarnya Opencv itu hanya menjadi support dalam pembuatan website ini,
sedangkan program utama kita mengkodingnya adalah di dalam Microsoft Visual
Studionya.
Saya akan menerang kan tentang
penajaman pada gambar. Penajaman Citra ini bertujuan untuk Memperjelas Tepi
Object pada pencitraan, dan Pelembuatan pada Object. Sedangkan metode yang saya
gunakan untuk membuat penajaman citra disini adalah dengan menggunakan metode Penapis
Lolos Tinggi (High Pass Object), pada metode ini Koefisien Filter boleh
positif, Negatif atau Nol (0) dan Jumlah sema koefisien Nol (0) atau Satu (1).
Penajaman Citra ini juga biasanya disebut dengan sebutan Edge Sharpening.
Penajaman
juga mempunyai 2 perbedaan yaitu Penajaman Citra dan Penajaman Laplaciar.
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <WINDOWS.H>
#include <iostream>
using namespace cv;
using namespace std;
void
unsharpMask(Mat& im)
{
Mat tmp;
GaussianBlur(im, tmp, cv::Size(5,5), 5);
addWeighted(im, 1.5, tmp, -0.5, 0, im);
}
int main(){
/* webcame
Mat image;
VideoCapture cap;
cap.open(0);
Sleep(1000);
namedWindow("window",1);
while(1){
cap>>image;
imshow("window",image);
waitKey(33);
}
*/
Mat img,imgOri, imgLaplacian, imgResult;
//-------------------------------------------------------------------------------------------
test, first of all
// now do it by
hand
img = (Mat_<uchar>(4,4) <<
0,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15);
// first, the
good result
Laplacian(img, imgLaplacian, CV_8UC1);
cout << "let
opencv do it" << endl;
cout << imgLaplacian << endl;
Mat kernel = (Mat_<float>(3,3) <<
0,
1, 0,
1, -4, 1,
0,
1, 0);
int
window_size = 3;
// now, reaaallly by hand
// note that, for
avoiding padding, the result image will be smaller than the original one.
Mat frame, frame32;
Rect roi;
imgLaplacian = Mat::zeros(img.size(),
CV_32F);
for(int y=0; y<img.rows-window_size/2-1; y++) {
for(int x=0; x<img.cols-window_size/2-1; x++) {
roi = Rect(x,y, window_size,
window_size);
frame = img(roi);
frame.convertTo(frame, CV_32F);
frame = frame.mul(kernel);
float
v = sum(frame)[0];
imgLaplacian.at<float>(y,x) = v;
}
}
imgLaplacian.convertTo(imgLaplacian,
CV_8U);
cout << "Laplacian"
<< imgLaplacian << endl;
// a little bit
less "by hand"..
// using
cv::filter2D
filter2D(img, imgLaplacian, -1, kernel);
cout << imgLaplacian << endl;
//-------------------------------------------------------------------------------------------
real stuffs now
img = imread("sample.jpg",
0); // load grayscale image
imgOri = img;
// ok, now try
different kernel
kernel = (Mat_<float>(3,3)
<<
1,
1, 1,
1, -8, 1,
1,
1, 1); // another approximation of second
derivate, more stronger
// do the
laplacian filtering as it is
// well, we need
to convert everything in something more deeper then CV_8U
// because the
kernel has some negative values,
// and we can
expect in general to have a Laplacian image with negative values
// BUT a 8bits
unsigned int (the one we are working with) can contain values from 0 to 255
// so the
possible negative number will be truncated
filter2D(img, imgLaplacian, CV_32F,
kernel);
img.convertTo(img, CV_32F);
imgResult = img - imgLaplacian;
// convert back
to 8bits gray scale
imgResult.convertTo(imgResult, CV_8U);
imgLaplacian.convertTo(imgLaplacian,
CV_8U);
namedWindow("original",
CV_WINDOW_AUTOSIZE);
imshow( "original",
imgOri );
//
namedWindow("laplacian", CV_WINDOW_AUTOSIZE);
//imshow(
"laplacian", imgLaplacian );
namedWindow("result",
CV_WINDOW_AUTOSIZE);
imshow( "result",
imgResult );
while( true ) {
char c
= (char)waitKey(10);
if( c
== 27 ) { break; }
}
return 0;
}
Setelah mengcopy paste codingan
diatas kita sekarang akan mengonfigurasis settingan debuging dan release dengan
cara Project -> (Nama
Project)Propertys setelah itu masuk ke menu Linker -> Input.Pertama saya akan mengubah release terlebih
dahulu dengan cara masuk kedalam configuration
manager -> Ubah Solution Active menjadi Release setelah itu kita masukan codingan lagi kedalam Additional Depedencies.
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
Ssekarang kita akan mengconfigurasi
Debug dengan cara yang sama dengan release tetapi diubah terlebih dahulu pada Solution Activenya menjadi 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
Setelah itu kita akan
mengconfigurasi alamat folder pada tools dengan cara Tools -> Option -> Project and Solution -> VC++ Direktories
-> Library Files
New
Line -> dan beri tambahan seperti ini C:\opencv\build\x86\vc9\lib
Setelah itu kita ubah lagi tetapi
kali ini di include file.
Dengan
menambahkan : C:\opencv\build\includedan C:\opencv\include\opencvi
Setelah
itu kita copy paste image kita kedalam folder opencv kita yang berada pada
direktor : C:\Opencv\samples\cpp.
Langkah selanjutnya dengan mengcopy
image kita ke dalam folder Visual Studio
kita yang berda di direktori : C:\Users\(nama
Komputer)\My Document\Visual Studio 2010\(nama project).
Setelah itu baru kita Debuging dengan cara
Klik F5 atau dengan cara Debug -> Start Debunging.
Nama Kelompok :
Zakie Zakaria (58410823)
Mohammad Iqbal Aristya (54410480)
Kelas : 4ia11
Zakie Zakaria (58410823)
Mohammad Iqbal Aristya (54410480)
Kelas : 4ia11
0 komentar:
Posting Komentar