【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。

2.1.22.1.2 ocmath_median_filter


Contents

Description

The function will first sort all the data values from the surrounding neighbourhood into numerical order and then replace the data point being considered with the value at a certain percentile.

Syntax

int ocmath_median_filter( const int nSize, const double * pIn, double * pOut, const int nPts, const double dPercent = 50, int nPadding = EDGEPAD_ZERO, bool bAveraging = false )

Parameters

nSize
[input] Size of input and output data array.
pIn
[input] Pointer to input data array of type double to be filtered.
pOut
[output] Pointer to output data array of type double to receive results.
nPts
[input] Number of surrounding points to left and right. Thus the number of points considered in each segment is (2*nPts + 1).
dPercent
[input] The percent for computing median.
nPadding
[input] Padding method:
EDGEPAD_NONE no padding
EDGEPAD_REFLECT pad reflect, end points are repeated such that on the left, [-1] = [0], [-2] = [1], [-3] = [2] and etc
EDGEPAD_REPEAT pad with [0] values the left and with [nSize-1] on the right
EDGEPAD_EXTRAPOLATE linear extrapolation
EDGEPAD_PERIODIC pad periodic, [-1] = [nSize -1], [-2] = [nSize - 2]
bAveraging
[input] If true, the function will average the most nearest neighbors if there is no match to the given percent.

Return

Returns STATS_NO_ERROR on successful exit and a non-zero STATS error code on failure.

Examples

EX1

////////////////////////////////////////////////////////////////////////////////////
// This example performs median filtering on a column of worksheet. At each point in the column,
// n neighboring points on each side are considered, and the median of all those points
// is assigned as the filtered result for that point.
// Parameters:
//            iNumPts:    Number of points on either side of each point, to consider for median
//
// Return:
//            0:            success
//            non-zero:    failure
int ocmath_median_filter_ex1(int iNumPts)
{
    //Assume a worksheet is active
    Worksheet wks = Project.ActiveLayer();
    wks.SetSize(-1,3);
    DataRange dr;
    dr.Add("X", wks, 0, 0, -1, 0);
    dr.Add("X", wks, 0, 1, -1, 1);
    dr.Add("X", wks, 0, 2, -1, 2);
    vector vxData, vyData;
    
    dr.GetData(&vyData, 1);
    uint nSize = vyData.GetSize();
    if( (iNumPts * 2) >= nSize/2)
    {
        printf("Group size is too large!\n");
        return -2;
    }
    // Set size of result to be same as source
    vector vDest;
    vDest.SetSize(nSize);
    double dPerc = 50;
    int iRet = ocmath_median_filter(nSize, vyData, vDest, iNumPts, dPerc);
    if( iRet != OE_NOERROR)
        return iRet;

    dr.SetData(vDest, false, 2);

    return 0;            
}

Remark

See Also

ocmath_percentiles

Header to Include

origin.h

Reference