return 0;
} int
FastInverseDct const
cv:: Mat
src , cv::
Mat dst
{ if
src .data == 0
return ErrorCode
:: ARG_ZERO_SIZED_IMAGE
; if
src .rows =
src .cols
return ErrorCode
:: ARG_IMAGE_NOT_SQUARE
; if
src .type =
CV_64F return
ErrorCode ::
ARG_IMAGE_HAS_INVALID_TYPE ;
TO_DO: make sure order is the power of 2 cv::
Mat tmp1;
src .convertTotmp1,
CV_64F ;
cv:: Mat
kernel = GenerateDctMatrix src
.rows; cv::
Mat tmp2 = kernel.t tmp1 kernel;
tmp2.convertTo dst
, CV_8U
; return
0; }
Zig Zag Scanning
int zigzag
const cv::
Mat src
, cv:: Mat
dst {
if src
.data == 0 return
ErrorCode ::
ARG_ZERO_SIZED_IMAGE ;
if src
.rows = src
.cols return
ErrorCode ::
ARG_IMAGE_NOT_SQUARE ;
unsigned int size =
src .rows;
unsigned int totalData = size size;
dst = cv::
Mat 1, totalData,
src .type;
unsigned int i, j, n;
for i = n = 0; i size 2; i++ {
for j = i size ? 0 : i-size+1; j = i j size; j++ {
int idx = i1? jsize-1+i : i-jsize+j;
s[idx] = n++; int
row = idx size; int
col = idx size; dst
.at double
0, n++ = src
.at double
row, col; s[n++] = static_castunsigned intm.atunsigned charrow, col;
} }
return 0;
}
4.2.5 Fungsi Similaritas Kosinus
double CheckSimilarity
const cv::
Mat m1
, const
cv:: Mat
m2 ,
unsigned int persentase
{ cv::
Mat z1, z2;
unsigned int size;
if persentase
= 0 || persentase
= 100 { pixelscanning
m1 , z1;
pixelscanning m2
, z2; size = z1.cols;
unsigned int size = z1.cols;
} else
{
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 ;