2.1.22.1.3 ocmath_us_conserve_filter

Description

This filter is accomplished by a procedure which first finds the minimum and maximum intensity values of all the pixels within a windowed region around the pixel in question. This is an OriginPro only function.

Syntax

int ocmath_us_conserve_filter( USHORT * pData, int nRows, int nCols, int nWinSizeX, int nWinSizeY, int nSampling, double dThreshold, int nRowFrom, int nColFrom, int nRowTo, int nColTo )

Parameters

pData
[input] pointer to matrix data
nRows
[input] matrix number of rows
nCols
[input] matrix number of columns
nWinSizeX
[input] window x axle size, must be odd(1, 3, 5,...)
nWinSizeY
[input] window y axle size, must be odd(1, 3, 5,...)
nSampling
[input] can be FILTERSHAPE_SQUARE, FILTERSHAPE_CIRCULAR, FILTERSHAPE_STRAIGHT_CROSS('+'), FILTERSHAPE_DIAGONAL_CROSS('X')
when shape is FILTERSHAPE_CIRCULAR or FILTERSHAPE_DIAGONAL_CROSS nWinSizeX must equal nWinSizeY
dThreshold
[input] Threshold in percent. Use 0 to ignore. Percentage is expressed in terms of matrix min/max values.
When Threshold is different from zero, then it can be both positive and negative and will have different meanings.
When Threshold > 0, then if the calculated value has a smaller deviation from the original value then the threshold, the original value if not changed.
When Threshold < 0, then we will check upper bound instead. The original value is replaced only if the calculated value is deviated no more then the threshold amount.
nRowFrom
[input] the position of the central point of the filer window move range.Only data in this range will be filtered.
nColFrom
[input] the position of the central point of the filer window move range.Only data in this range will be filtered.
nRowTo
[input] the position of the central point of the filer window move range.Only data in this range will be filtered.
nColTo
[input] the position of the central point of the filer window move range.Only data in this range will be filtered.

Return

return OE_NOERROR for success, otherwise return errors

Examples

EX1

void ocmath_us_conserve_filter_ex1()
{
matrix<ushort>    pData={{2,3,5,7},{11,13,17,19},{23,29,31,37}};
int nRows = pData.GetNumRows();
int nCols = pData.GetNumCols();
//double dPercent = 45.0;
int nWinSizeX = 3;
int nWinSizeY = 3;
int nSampling = FILTERSHAPE_STRAIGHT_CROSS;
double dThreshold = 0;
int nRowFrom = 0;
int nColFrom = 0;
int nRowTo = -1;
int nColTo = -1;
int nRet=ocmath_us_conserve_filter(pData,nRows,nCols,nWinSizeX, nWinSizeY, nSampling,dThreshold,nRowFrom,nColFrom,nRowTo , nColTo );
if(nRet!= OE_NOERROR)
printf("Error!");
}

Remark

This filter is accomplished by a procedure which first finds the minimum and maximum intensity values of all the pixels within a windowed region around the pixel in question. If the intensity of the central pixel lies within the intensity range spread of its neighbors, it is passed on to the output image unchanged. However, if the central pixel intensity is greater than the maximum value, it is set equal to the maximum value; if the central pixel intensity is less than the minimum value, it is set equal to the minimum value.