2.2.3.9.3 matrixbase::ApplyFilter

Apply filter.

Syntax

BOOL ApplyFilter( matrix & mfilter, int nPaddingOption = MFILTER_ZEROPADDINGWINDOW, BOOL bNormalize = TRUE )

Parameters

mfilter
[input] An N x N filter/mask matrix used by Applyfilter
[input] Pads the area outside the borders in one of the following ways
= MFILTER_MAPPADDINGWINDOW -- Reflect Pad, values from immediate neighbors are repeated but more inside values are reflected padding more than 1 line;
bNormalize
[input]replacement value with weight of mask/filter if TRUE

Return

Returns TRUE on success and FALSE on failure.

Examples

EX1

void matrixbase_ApplyFilter_ex1()
{
BOOL rc;
int ii, jj;
matrix<double> mfilter(3,3) = {
{0,  1,  0},
{1,  1,  1},
{0,  1,  0}
};

matrix<double> mat1 = {
{1,  2,  3,  4},
{2,  4,  6,  8},
{5, 10, 15, 20}
};
rc = mat1.ApplyFilter(mfilter);
if(!rc) printf("Error: ApplyFilter on a matrix failed.");
else{
printf("The matrix is:\n");
for(ii=0; ii< mat1.GetNumRows(); ii++){
for(jj=0; jj< mat1.GetNumCols(); jj++)
printf("%g   ", mat1[ii][jj]);
printf("\r\n");
}
}
}

EX2

//Output result to matrix
void matrixbase_ApplyFilter_ex2()
{
BOOL rc;

matrix<double> mfilter(3,3) = {
{0,  1,  0},
{1,  1,  1},
{0,  1,  0}
};
printf("Applied Filter:\n  (0 1 0)\n  (1 1 1)\n  (0 1 0)\n");

matrix<double> mat1 = {
{1,  2,  3,  4},
{2,  4,  6,  8},
{5, 10, 15, 20}
};
MatrixPage MatPg1;
MatPg1.Create("Origin");
MatrixLayer MatLy1 = MatPg1.Layers(0);
Matrix Mat1(MatLy1);
Mat1 = mat1;

MatrixPage MatPg2;
MatPg2.Create("Origin");
MatrixLayer MatLy2 = MatPg2.Layers(0);
Matrix Mat2(MatLy2);
Mat2 = mat1;
rc = Mat2.ApplyFilter(mfilter); // with defaults: MFILTER_ZEROPADDINGWINDOW & Normalize
if(!rc) printf("Error: ApplyFilter on a matrix failed. (Option:ZEROPADDINGWINDOW & Normalization)\n");
else
printf("Observe the ApplyFiltered matrix window %s from %s. (Option:ZEROPADDINGWINDOW (default))\n",
Mat2.GetName(),Mat1.GetName());

MatrixPage MatPg3;
MatPg3.Create("Origin");
MatrixLayer MatLy3 = MatPg3.Layers(0);
Matrix Mat3(MatLy3);
Mat3 = mat1;
rc = Mat3.ApplyFilter(mfilter,MFILTER_MAPPADDINGWINDOW); // with default:Normalize
if(!rc) printf("Error: ApplyFilter on a matrix failed. (Option:MAPPADDINGWINDOW & Normalization)\n");
else
printf("Observe the ApplyFiltered matrix window %s from %s. (Option:MAPPADDINGWINDOW)\n",
Mat3.GetName(),Mat1.GetName());

MatrixPage MatPg4;
MatPg4.Create("Origin");
MatrixLayer MatLy4 = MatPg4.Layers(0);
Matrix Mat4(MatLy4);
Mat4 = mat1;
if(!rc) printf("Error: ApplyFilter on a matrix failed. (Option:REPEATEDGEPADDINGWINDOW & No Normalization)\n");
else
printf("Observe the ApplyFiltered matrix window %s from %s. (Option:REPEATEDGEPADDINGWINDOW)\n",
Mat4.GetName(),Mat1.GetName());
}

Remark

Takes an N x N filter (or mask) matrix and places it centered over each pixel in this image (or matrix). For each cell in the filter/mask it computes the product of the filter/mask element with the overlayed cell of the original image (matrix), sums all of the products, normalizes to the weight of the filter/mask (if specified to do so), and then replaces the pixel in the original image with the weighted average.