#include <cstdio>
#include <cstdlib>
{
return (a-mn)/(mx-mn);
}
void drawRectangle(
array &out,
unsigned x,
unsigned y,
unsigned dim0,
unsigned dim1)
{
printf("\nMatching patch origin = (%u, %u)\n\n", x, y);
seq col_span(x, x+dim0, 1);
seq row_span(y, y+dim1, 1);
out(col_span, y , 0) = 0.f;
out(col_span, y , 1) = 0.f;
out(col_span, y , 2) = 1.f;
out(col_span, y+dim1 , 0) = 0.f;
out(col_span, y+dim1 , 1) = 0.f;
out(col_span, y+dim1 , 2) = 1.f;
out(x , row_span, 0) = 0.f;
out(x , row_span, 1) = 0.f;
out(x , row_span, 2) = 1.f;
out(x+dim0 , row_span, 0) = 0.f;
out(x+dim0 , row_span, 1) = 0.f;
out(x+dim0 , row_span, 2) = 1.f;
}
static void templateMatchingDemo(bool console)
{
if (console)
img_color =
loadImage(ASSETS_DIR
"/examples/images/square.png",
true);
else
img_color =
loadImage(ASSETS_DIR
"/examples/images/man.jpg",
true);
std::cout<<"Input image dimensions: " << iDims << std::endl << std::endl;
unsigned patch_size = 100;
array tmp_img = img(
seq(100, 100+patch_size, 1.0),
seq(100, 100+patch_size, 1.0));
array disp_img = img/255.0f;
array disp_tmp = tmp_img/255.0f;
array disp_res = normalize(result);
unsigned minLoc;
float minVal;
min<float>(&minVal, &minLoc, disp_res);
std::cout<< "Location(linear index) of minimum disparity value = " << minLoc << std::endl;
if (!console) {
drawRectangle(marked_res, minLoc%iDims[0], minLoc/iDims[0], patch_size, patch_size);
std::cout<<"Note: Based on the disparity metric option provided to matchTemplate function\n"
"either minimum or maximum disparity location is the starting corner\n"
"of our best matching patch to template image in the search image"<< std::endl;
while(!wnd.close()) {
wnd.grid(2, 2);
wnd(0, 0).image(disp_img , "Search Image" );
wnd(0, 1).image(disp_tmp , "Template Patch" );
wnd(1, 0).image(marked_res, "Best Match" );
wnd(1, 1).image(disp_res , "Disparity values");
wnd.show();
}
}
}
int main(int argc, char** argv)
{
int device = argc > 1 ? atoi(argv[1]) : 0;
bool console = argc > 2 ? argv[2][0] == '-' : false;
try {
std::cout << "** ArrayFire template matching Demo **" << std::endl << std::endl;
templateMatchingDemo(console);
std::cerr << ae.
what() << std::endl;
throw;
}
return 0;
}
Window object to render af::arrays.
Definition graphics.h:37
A multi dimensional data container.
Definition array.h:27
Definition exception.h:20
virtual const char * what() const
Definition exception.h:34
seq is used to create seq for indexing af::array
Definition seq.h:46
@ AF_COLORMAP_DEFAULT
Default grayscale map.
Definition defines.h:333
@ AF_COLORMAP_HEAT
Heat map.
Definition defines.h:338
@ AF_GRAY
Grayscale.
Definition defines.h:296
@ AF_RGB
3-channel RGB
Definition defines.h:297
AFAPI array matchTemplate(const array &searchImg, const array &templateImg, const matchType mType=AF_SAD)
C++ Interface for image template matching.
AFAPI void setDevice(const int device)
Sets the current device.
AFAPI array colorSpace(const array &image, const CSpace to, const CSpace from)
C++ Interface wrapper for colorspace conversion.
AFAPI array loadImage(const char *filename, const bool is_color=false)
C++ Interface for loading an image.
AFAPI array tile(const array &in, const unsigned x, const unsigned y=1, const unsigned z=1, const unsigned w=1)
dim4 dims() const
Get dimensions of the array.
AFAPI array sum(const array &in, const int dim=-1)
C++ Interface for sum of elements in an array.
Definition algorithm.h:15