123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- % Matlab binding test cases
- % Uses Matlab's builtin testing framework
- classdef OpenCVTest < matlab.unittest.TestCase
- methods(Test)
- % -------------------------------------------------------------------------
- % EXCEPTIONS
- % Check that errors and exceptions are thrown correctly
- % -------------------------------------------------------------------------
- % check that std exception is thrown
- function stdException(testcase)
- try
- std_exception();
- testcase.verifyFail();
- catch
- % TODO: Catch more specific exception
- testcase.verifyTrue(true);
- end
- end
- % check that OpenCV exceptions are correctly caught
- function cvException(testcase)
- try
- cv_exception();
- testcase.verifyFail();
- catch
- % TODO: Catch more specific exception
- testcase.verifyTrue(true);
- end
- end
- % check that all exceptions are caught
- function allException(testcase)
- try
- exception();
- testcase.verifyFail();
- catch
- % TODO: Catch more specific exception
- testcase.verifyTrue(true);
- end
- end
- % -------------------------------------------------------------------------
- % SIZES AND FILLS
- % Check that matrices are correctly filled and resized
- % -------------------------------------------------------------------------
- % check that a matrix is correctly filled with random numbers
- function randomFill(testcase)
- sz = [7 11];
- mat = zeros(sz);
- mat = cv.randn(mat, 0, 1);
- testcase.verifyEqual(size(mat), sz, 'Matrix should not change size');
- testcase.verifyNotEqual(mat, zeros(sz), 'Matrix should be nonzero');
- end
- function transpose(testcase)
- m = randn(19, 81);
- mt1 = transpose(m);
- mt2 = cv.transpose(m);
- testcase.verifyEqual(size(mt1), size(mt2), 'Matrix transposed to incorrect dimensionality');
- testcase.verifyLessThan(norm(mt1 - mt2), 1e-8, 'Too much precision lost in tranposition');
- end
- % multiple return
- function multipleReturn(testcase)
- A = randn(10);
- A = A'*A;
- [V1, D1] = eig(A); D1 = diag(D1);
- [~, D2, V2] = cv.eigen(A);
- testcase.verifyLessThan(norm(V1 - V2), 1e-6, 'Too much precision lost in eigenvectors');
- testcase.verifyLessThan(norm(D1 - D2), 1e-6, 'Too much precision lost in eigenvalues');
- end
- % complex output from SVD
- function complexOutputSVD(testcase)
- A = randn(10);
- [V1, D1] = eig(A);
- [~, D2, V2] = cv.eigen(A);
- testcase.verifyTrue(~isreal(V2) && size(V2,3) == 1, 'Output should be complex');
- testcase.verifyLessThan(norm(V1 - V2), 1e-6, 'Too much precision lost in eigenvectors');
- end
- % complex output from Fourier Transform
- function complexOutputFFT(testcase)
- A = randn(10);
- F1 = fft2(A);
- F2 = cv.dft(A, cv.DFT_COMPLEX_OUTPUT);
- testcase.verifyTrue(~isreal(F2) && size(F2,3) == 1, 'Output should be complex');
- testcase.verifyLessThan(norm(F1 - F2), 1e-6, 'Too much precision lost in eigenvectors');
- end
- % -------------------------------------------------------------------------
- % TYPE CASTS
- % Check that types are correctly cast
- % -------------------------------------------------------------------------
- % -------------------------------------------------------------------------
- % PRECISION
- % Check that basic operations are performed with sufficient precision
- % -------------------------------------------------------------------------
- % check that summing elements is within reasonable precision
- function sumElements(testcase)
- a = randn(5000);
- b = sum(a(:));
- c = cv.sum(a);
- testcase.verifyLessThan(norm(b - c), 1e-8, 'Matrix reduction with insufficient precision');
- end
- % check that adding two matrices is within reasonable precision
- function addPrecision(testcase)
- a = randn(50);
- b = randn(50);
- c = a+b;
- d = cv.add(a, b);
- testcase.verifyLessThan(norm(c - d), 1e-8, 'Matrices are added with insufficient precision');
- end
- % check that performing gemm is within reasonable precision
- function gemmPrecision(testcase)
- a = randn(10, 50);
- b = randn(50, 10);
- c = randn(10, 10);
- alpha = 2.71828;
- gamma = 1.61803;
- d = alpha*a*b + gamma*c;
- e = cv.gemm(a, b, alpha, c, gamma);
- testcase.verifyLessThan(norm(d - e), 1e-8, 'Matrices are multiplied with insufficient precision');
- end
- % -------------------------------------------------------------------------
- % MISCELLANEOUS
- % Miscellaneous tests
- % -------------------------------------------------------------------------
- % check that cv::waitKey waits for at least specified time
- function waitKey(testcase)
- tic();
- cv.waitKey(500);
- elapsed = toc();
- testcase.verifyGreaterThan(elapsed, 0.5, 'Elapsed time should be at least 0.5 seconds');
- end
- % check that highgui window can be created and destroyed
- function createAndDestroyWindow(testcase)
- try
- cv.namedWindow('test window');
- catch
- testcase.verifyFail('could not create window');
- end
- try
- cv.destroyWindow('test window');
- catch
- testcase.verifyFail('could not destroy window');
- end
- testcase.verifyTrue(true);
- end
- end
- end
|