Laporan ini membahas tentang konvolusi, filter linear, deteksi tepi, dan piramida Gaussian pada pengolahan citra digital menggunakan OpenCV. Metode-metode yang dijelaskan meliputi konvolusi, filter Gaussian, bilateral, dan Canny untuk deteksi tepi serta penjelasan teori piramida Gaussian untuk dekomposisi dan rekomposisi citra.
1. LAPORAN WORKSHOP KOMPUTER VISI
LINEAR FILTER DAN EDGE DETECTION
LUSIANA DIYAN NINGRUM
2210181051
3 D4 TEKNIK KOMPUTER B
PRODI SARJANA TERAPAN TEKNIK KOMPUTER
DEPARTEMEN TEKNIK INFORMATIKA DAN KOMPUTER
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
SURABAYA
2. KONVOLUSI
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat kernel;
Point anchor;
double delta=0;
int ddepth=-1;
int kernel_size=2;
// Initialize arguments for the filter
anchor = Point(1, 1);
Mat img = imread("E:/trial/trial/view.jpg", 17), hasil,
img_gray = imread("E:/trial/trial/view.jpg", 16);
// Loop - Will filter the image with different kernel sizes each 0.5 seconds
int ind = 0;
// Update kernel size for a normalized box filter
kernel = Mat::ones(kernel_size, kernel_size, CV_32F) /
(float)(kernel_size*kernel_size);
// Apply filter
filter2D(img, hasil, ddepth, kernel, anchor, delta, BORDER_DEFAULT);
imshow("Source RGB", img);
imshow("Hasil RGB", hasil);
filter2D(img_gray, hasil, ddepth, kernel, anchor, delta, BORDER_DEFAULT);
imshow("Source Gray", img_gray);
imshow("Hasil Gray", hasil);
waitKey();
return EXIT_SUCCESS;
}
1/2
5. ANALISA
konvolusi adalah operasi matematis citra digital, yaitu mengalikan sebuah citra dengan
sebuah mask atau kernel atau filter atau template. Konvolusi berguna untuk perbaikan
kualitas citra, mengurangi noise, distorsi deteksi, menghaluskan suatu citra atau memperjelas
citra dengan menggantikan nilai piksel dengan sejumlah nilai piksel yang sesuai atau
berdekatan dengan piksel aslinya. Dengan adanya konvolusi ini dapat menghaluskan atau
menghilangkan noise pada image sehingga image terlihat lebih kabur kontrasnya karena
konvolusi memiliki efek pemerataan derajat keabuan. Dapat dilihat dari gambar hasil
percobaan bahwa semakin kecil pengalinya maka gambar yang dihasilkan semakin smooth
atau gambar lebih kabur, sebagai contoh gambar yang dikonvolusi 1/15 lebih kabur hasilnya
dibandingkan image yang dikonvolusi sebesar 1/5.
GAUSSIAN FILTER
1. Image File
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat img = imread("E:/trial/trial/view.jpg", 17),
grayImg = imread("E:/trial/trial/view.jpg", 16);
7. 10
2. Livecam
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
if (cap.isOpened() == false)
{
cout << "Cannot open the video file" << endl;
cin.get();
return -1;
}
while (1)
{
Mat frame, gray_frame, hasil;
cap >> frame;
cap.read(frame);
cvtColor(frame, gray_frame, COLOR_BGR2GRAY);
char c = (char)waitKey(1);
if (c == 27)
break;
cout << "Default Cols : " << frame.cols << endl;
cout << "Default Rows : " << frame.rows << endl << endl;
8. GaussianBlur(frame, hasil, Size(3, 3), 8, 0);
imwrite("GBlur.jpg", hasil);
/// Display
imshow("CAMERA", frame);
imshow("Gaussian Blur", hasil);
}
waitKey();
return EXIT_SUCCESS;
}
ANALISA
Pengolahan citra dengan menggunakan efek gaussian blur menyebabkan suatu citra menjadi
kabur sehingga sudut-sudut tajam pada citra akan menjadi lebih halus. Seperti pada gambar
hasil percobaan bahwa image yang mendapatkan efek gausian blur sebesar 10 memiliki sudut
– sudut image yang lebih halus atau mengabur dibandingkan dengan citra yang memperoleh
efek Gaussian sebesar 3. Semakin besar nilai efek Gaussian yang diberikan maka citra
gambar akan semakin halus dan sudut – sudut pada gambar (edge) terlihat lebih mengabur
sehingga image terlihat blur.
BILATERAL FILTER
1. Image File
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat img = imread("E:/trial/trial/view.jpg", 17),
grayImg = imread("E:/trial/trial/view.jpg", 16);
imshow("Original Image", img);
imshow("Gray Image", grayImg);
Mat Bfilter, Bfiltergray;
10. 15
ANALISA
Filter bilateral adalah filter penghalusan non-linier , menjaga tepi , dan mengurangi noise
untuk gambar . Ini menggantikan intensitas setiap piksel dengan nilai intensitas rata-rata
tertimbang dari piksel terdekat. Bobot ini dapat didasarkan pada distribusi Gaussian.
Implementasi filter bilateral pada citra image di atas adalah menghaluskan tepi gambar
sehingga semakin halus penampang dari citra.
2. Livecam
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
if (cap.isOpened() == false)
{
cout << "Cannot open the video file" << endl;
cin.get();
return -1;
15. ANALISA
Tepi suatu obyek dalam citra dinyatakan sebagai titik yang nilai keabuannya berbeda
cukup besar dengan titik yang ada di sebelahnya. Parameter angka di dalam fungsi Canny
berguna untuk mengatur kerapatan program dalam mendeteksi tepi. Semakin besar nilai
parameter maka jangkauan tepi yang dideteksi semakin luas, sebaliknya semakin kecil
nilai parameter akan menghasilkan deteksi tepi yang rapat.
2. Livecam
#include <opencv2opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/calib3d.hpp>
#include <opencv2/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0);
if (cap.isOpened() == false)
{
cout << "Cannot open the video file" << endl;
cin.get();
return -1;
}
while (1)
{
Mat frame, gray_frame, edges;
cap >> frame;
cap.read(frame);
cvtColor(frame, gray_frame, COLOR_BGR2GRAY);
16. char c = (char)waitKey(1);
if (c == 27)
break;
cout << "Default Cols : " << frame.cols << endl;
cout << "Default Rows : " << frame.rows << endl << endl;
Canny(frame, edges, 20, 60);
imwrite("canny2.jpg", edges);
/// Display
imshow("CAMERA", frame);
imshow("Canny", edges);
}
waitKey();
return EXIT_SUCCESS;
}
Teori Metode Pyramids => Piramida , atau representasi piramida , adalah jenis representasi
sinyal multi-skala yang dikembangkan oleh visi komputer , komunitas pemrosesan gambar
dan pemrosesan sinyal , di mana sinyal atau gambar dikenakan perataan dan subsampling
berulang. Representasi piramida adalah pendahulu dari representasi skala-ruang dan analisis
multiresolusi .
17. Program Downsampling (Gaussian Pyramid Down)
Program ini mengunakan fungsi PyrDown dengan melakukan downsampling pada
dekomposisi (pemecahan) Gaussian pyramid. Pertama dilakukan konvolusi pada image
dengan filter tertentu. Kemudian dilakukan downsampling pada gambar dengan menghapus
baris dan and kolom yang genap.
Program Upsampling (Gaussian Pyramid Up)
Program ini mengunakan fungsi PyrUp dengan melakukan up-sampling pada pemecahan
Gaussian pyramid. Pertama dilakukan up-sampling pada gambar dengan memasukkan nilai
kosong pada baris dan and kolom yang genap. Kemudian dilakukan konvolusi pada image
dengan filter “multiplied by 4” untuk interpolasi (penambahan). Jadi gambar lebih besar 4
kali dari gambar asal.