Fungsi Similaritas Kosinus Tanpa Ekstraksi Ciri

cv:: Mat t1, t2; pixelscanning m1 , t1; pixelscanning m2 , t2; size = t1.cols persentase 100; cv:: Rect windowt1.cols - size - 1 ,0, size, 1; z1 = t1window; z2 = t2window; } double magnitude1 = 0.0; double magnitude2 = 0.0; double dotProduct = 0.0; for unsigned int i = 0; i size; i++ { double v1 = z1.at double 0, i; double v2 = z2.at double 0, i; magnitude1 += v1v1; magnitude2 += v2v2; dotProduct += v1v2; } cv:: Mat dot = z1 z2.t; double numerator = dot.at double 0, 0; double denumerator = sqrtmagnitude1 sqrtmagnitude2; std::cout dot, num, denum numerator \t dotProduct \t magnitude1 \t magnitude2 \t denumerator \n; return numerator denumerator; } };

4.2.6 Tanpa Ekstraksi Ciri

TEMPLATE MATCHING std:: string ok = [N] ; cv:: Mat chkTemplate; if 1 cv::matchTemplatefTemplate, test1, chkTemplate, CV_TM_CCOEFF_NORMED ; double minval, maxval, threshold = 0.6; cv:: Point minloc, maxloc; cv::minMaxLocchkTemplate, minval, maxval, minloc, maxloc; if maxval = threshold { ok = [Y] ; } else int match_method = 0; cv::matchTemplatefTemplate, test1, chkTemplate, match_method; cv::normalize chkTemplate, chkTemplate, 0, 1, cv::NORM_MINMAX, -1, cv::Mat ; Localizing the best match with minMaxLoc double minVal; double maxVal; cv::Point minLoc; cv::Point maxLoc; cv::minMaxLoc chkTemplate, minVal, maxVal, minLoc, maxLoc, cv::Mat ; cv::Point matchLoc; matchLoc = match_method == CV_TM_SQDIFF || match_method== CV_TM_SQDIFF_NORMED ? minLoc : maxLoc; TO_DO: check how to get this if minVal 255 { ok = [Y] ; } endif

4.3 Pengujian Software Aplikasi Pengenalan Peralatan Bengkel Motor Secara Real Time

Sebelum memulai pengetesan, terlebih dahulu menentukan nilai “batas” dan nilai persentase windowing. Nilai batas dipakai untuk menentukan nilai atas dan bawah hasil DCT dan Tanpa Ekstraksi Cirihasil pengetesan terhadap data training. Sedangkan nilai persentase windowing adalah untuk menentukan area windowing yang ingin dipakai. Nilai 100 pada nilai persentase windowing mempunyai arti bahwa scanning yang dilakukan adalah untuk setiap pixel. Windowing 100 memiliki waktu eksekusi program lebih lama daripada persentase dibawahnya. Setelah persiapan selesai, maka selanjutnya masuk ke pendeteksian alat. Deteksi alat ini akan memunculkan hasil berupa text pengenalan DCT dan Template Matching. int DeteksiAlat { config cfg ..\\..\\sample\\dct.xml ; BasisData db..\\..\\sample\\basisdata.xml; BasisData dbcfg.basisData; if db.IsValid { std::cout Config tidak bisa dibaca. \n ; return -1; } std:: vector cv:: Mat templates; for unsigned int i = 0; i db.Data.size; i++ { cv:: Mat training= cv::imreaddb.Data[i].lokasiGambar, CV_LOAD_IMAGE_GRAYSCALE ; if training.data == 0 { std::cout Database untuk alat db.Data[i].namaAlat tidak bisa dibaca. \n Pastikan gambar db.Data[i].lokasiGambar tersedia. \n ; return -1; } cv:: Mat dTrain; int res = dct::FastDcttraining, dTrain; templates.emplace_backdTrain; } for unsigned int i = 0; i cfg.pathTestCases.size; i++ { cv:: Mat test1 = cv::imreadcfg.pathTestCases[i], CV_LOAD_IMAGE_GRAYSCALE ; double nilaiKemiripanMaksimal = -2.0; unsigned int indexMirip = 0; cv:: Mat d2; int res = dct::FastDcttest1 , d2; for unsigned int j = 0; j templates.size; j++ { double cs = dct::CheckSimilaritytemplates[j], d2, db.Persentase; if cs db.Data[j].batasMinimum continue ; if cs nilaiKemiripanMaksimal { nilaiKemiripanMaksimal = cs; indexMirip = j; } } if nilaiKemiripanMaksimal 0.0f { std::cout Gambar cfg.pathTestCases[i] kemungkinan adalah db.Data[indexMirip].namaAlat dengan tingkat kimiripan: nilaiKemiripanMaksimal \n ; } else { std::cout Gambar cfg.pathTestCases[i] tidak dikenali \n ; } } return 0; }

4.3.1 Tabel Validasi

Training Testing 1 Testing 2 Testing 3 Testing 4 Testing 5 A B A B A B A B A B Kunci Ring 0º 1 1 1 1 1 1 1 Kunci Ring 90º 1 1 1 1 1 1 1