ClassesClassesClassesClasses | | | | Operators

points_harrisT_points_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris (Operator)


points_harrisT_points_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris — Detect points of interest using the Harris operator.


points_harris(Image : : SigmaGrad, SigmaSmooth, Alpha, Threshold : Row, Column)

Herror T_points_harris(const Hobject Image, const Htuple SigmaGrad, const Htuple SigmaSmooth, const Htuple Alpha, const Htuple Threshold, Htuple* Row, Htuple* Column)

Herror points_harris(Hobject Image, const HTuple& SigmaGrad, const HTuple& SigmaSmooth, const HTuple& Alpha, const HTuple& Threshold, HTuple* Row, HTuple* Column)

HTuple HImage::PointsHarris(const HTuple& SigmaGrad, const HTuple& SigmaSmooth, const HTuple& Alpha, const HTuple& Threshold, HTuple* Column) const

void PointsHarris(const HObject& Image, const HTuple& SigmaGrad, const HTuple& SigmaSmooth, const HTuple& Alpha, const HTuple& Threshold, HTuple* Row, HTuple* Column)

void HImage::PointsHarris(double SigmaGrad, double SigmaSmooth, double Alpha, const HTuple& Threshold, HTuple* Row, HTuple* Column) const

void HImage::PointsHarris(double SigmaGrad, double SigmaSmooth, double Alpha, double Threshold, HTuple* Row, HTuple* Column) const

void HOperatorSetX.PointsHarris(
[in] IHUntypedObjectX* Image, [in] VARIANT SigmaGrad, [in] VARIANT SigmaSmooth, [in] VARIANT Alpha, [in] VARIANT Threshold, [out] VARIANT* Row, [out] VARIANT* Column)

VARIANT HImageX.PointsHarris(
[in] double SigmaGrad, [in] double SigmaSmooth, [in] double Alpha, [in] VARIANT Threshold, [out] VARIANT* Column)

static void HOperatorSet.PointsHarris(HObject image, HTuple sigmaGrad, HTuple sigmaSmooth, HTuple alpha, HTuple threshold, out HTuple row, out HTuple column)

void HImage.PointsHarris(double sigmaGrad, double sigmaSmooth, double alpha, HTuple threshold, out HTuple row, out HTuple column)

void HImage.PointsHarris(double sigmaGrad, double sigmaSmooth, double alpha, double threshold, out HTuple row, out HTuple column)


points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris extracts points of interest from an image. The Harris operator is based upon the smoothed matrix

        /   n                n              \
        |  ---              ---             |
        |  \        2       \               |
        |  /    Ix,c        /    Ix,c Iy,c  |
        |  ---              ---             |
        |  c=1              c=1             |
M = G * |                                   |,
        |   n                n              |
        |  ---              ---             |
        |  \                \        2      |
        |  /    Ix,c Iy,c   /    Iy,c       |
        |  ---              ---             |
        \  c=1              c=1             /

where G stands for a Gaussian smoothing of size SigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothsigmaSmooth and Ix,c and Iy,c are the first derivatives of each image channel, computed with Gaussian derivatives of size SigmaGradSigmaGradSigmaGradSigmaGradSigmaGradsigmaGrad. The resulting points are the positive local extrema of

Det(M) - AlphaAlphaAlphaAlphaAlphaalpha*(Trace(M)) .

If necessary, they can be restricted to points with a minimum filter response of ThresholdThresholdThresholdThresholdThresholdthreshold. The coordinates of the points are calculated with subpixel accuracy.


points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris uses a special implementation that is optimized using SSE2 instructions if the system parameter 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" is set to 'true'"true""true""true""true""true" (which is default if SSE2 is available on your machine). This implementation is slightly inaccurate compared to the pure C version due to numerical issues (for 'byte' images the difference in RowRowRowRowRowrow and ColumnColumnColumnColumnColumncolumn is in order of magnitude of 1.0e-5). If you prefer accuracy over performance you can set 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" to 'false'"false""false""false""false""false" (using set_systemset_systemSetSystemset_systemSetSystemSetSystem) before you call points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris. This way points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris does not use SSE2 accelerations. Don't forget to set 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" back to 'true'"true""true""true""true""true" afterwards.

points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris can be executed on an OpenCL device if both SigmaGradSigmaGradSigmaGradSigmaGradSigmaGradsigmaGrad and SigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothsigmaSmooth induce a filter size of no more than 129 pixels. This corresponds to a value of less than 20.7 for both parameters. As with the SSE2 version, the results of the OpenCL implementation may diverge slightly from that of pure C version due to numerical issues.



ImageImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHImageHImageXHobject (byte* / uint2* / real*) *allowed for compute devices

Input image.

SigmaGradSigmaGradSigmaGradSigmaGradSigmaGradsigmaGrad (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Amount of smoothing used for the calculation of the gradient.

Default value: 0.7

Suggested values: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0

Typical range of values: 0.7 ≤ SigmaGrad SigmaGrad SigmaGrad SigmaGrad SigmaGrad sigmaGrad ≤ 50.0

Recommended increment: 0.1

Restriction: SigmaGrad > 0.0

SigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothSigmaSmoothsigmaSmooth (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Amount of smoothing used for the integration of the gradients.

Default value: 2.0

Suggested values: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0

Typical range of values: 0.7 ≤ SigmaSmooth SigmaSmooth SigmaSmooth SigmaSmooth SigmaSmooth sigmaSmooth ≤ 50.0

Recommended increment: 0.1

Restriction: SigmaSmooth > 0.0

AlphaAlphaAlphaAlphaAlphaalpha (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Weight of the squared trace of the squared gradient matrix.

Default value: 0.08

Suggested values: 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08

Typical range of values: 0.001 ≤ Alpha Alpha Alpha Alpha Alpha alpha ≤ 0.1

Minimum increment: 0.001

Recommended increment: 0.01

Restriction: Alpha > 0.0

ThresholdThresholdThresholdThresholdThresholdthreshold (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Minimum filter response for the points.

Default value: 1000.0

Restriction: Threshold >= 0.0

RowRowRowRowRowrow (output_control)  point.y-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Row coordinates of the detected points.

ColumnColumnColumnColumnColumncolumn (output_control)  point.x-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Column coordinates of the detected points.


points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris returns 2 (H_MSG_TRUE) if all parameters are correct and no error occurs during the execution. If the input is empty the behavior can be set via set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>). If necessary, an exception is raised.

Possible Successors



points_foerstnerpoints_foerstnerPointsFoerstnerpoints_foerstnerPointsFoerstnerPointsFoerstner, points_lepetitpoints_lepetitPointsLepetitpoints_lepetitPointsLepetitPointsLepetit, points_harris_binomialpoints_harris_binomialPointsHarrisBinomialpoints_harris_binomialPointsHarrisBinomialPointsHarrisBinomial


C. Harris, M. Stephens: “A combined corner and edge detector”. Proceedings of the 4th Alvey Vision Conference, pp. 147-151, 1988.
V. Gouet, N.Boujemaa: “Object-based queries using color points of interest”. IEEE Workshop on Content-Based Access of Image and Video Libraries, CVPR/CBAIVL 2001, Hawaii, USA, 2001.



ClassesClassesClassesClasses | | | | Operators