Digital Signal Processing Reference
In-Depth Information
D.1.2 File
HarrisCornerDetector.java
D.1
Harris Corner Detector
1
import ij.IJ;
2
import ij.ImagePlus;
3
import ij.plugin.filter.Convolver;
4
import ij.process.Blitter;
5
import ij.process.ByteProcessor;
6
import ij.process.FloatProcessor;
7
import ij.process.ImageProcessor;
8
9
import java.util.Arrays;
10
import java.util.Collections;
11
import java.util.Iterator;
12
import java.util.Vector;
13
14
public class HarrisCornerDetector {
15
16
public static final float DEFAULT_ALPHA = 0.050f;
public static final int DEFAULT_THRESHOLD = 20000;
17
18
19
float alpha = DEFAULT_ALPHA;
int threshold = DEFAULT_THRESHOLD;
20
double dmin = 10;
21
22
23
final int border = 20;
24
25
//filter kernels (one-dim. part of separable 2D filters)
final float[] pfilt = {0.223755f,0.552490f,0.223755f};
26
final float[] dfilt = {0.453014f,0.0f,-0.453014f};
27
final float[] bfilt = {0.01563f,0.09375f,0.234375f,0.3125f
,0.234375f,0.09375f,0.01563f};
28
// = 1,6,15,20,15,6,1/64
29
30
31
ImageProcessor ipOrig;
FloatProcessor A;
32
FloatProcessor B;
33
FloatProcessor C;
34
FloatProcessor Q;
35
Vector<Corner> corners;
36
37
38
HarrisCornerDetector(ImageProcessor ip){
this.ipOrig = ip;
39
}
40
41
42
HarrisCornerDetector(ImageProcessor ip, float alpha, int
threshold){
this.ipOrig = ip;
43
this.alpha = alpha;
44
this.threshold = threshold;
45
}
46
47