-
Notifications
You must be signed in to change notification settings - Fork 1
/
freqfilt.go
79 lines (63 loc) · 1.87 KB
/
freqfilt.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package vips
/*
#cgo pkg-config: vips
#include "vips.h"
*/
import "C"
// FwFFT transform an image to Fourier space.
// VIPS uses the fftw Fourier Transform library.
// If this library was not available when VIPS
// was configured, these functions will fail.
func (th *Image) FwFFT() (err error) {
var vipsImage *C.VipsImage
if C.vipsimage_fwfft(th.vipsImage, &vipsImage) != 0 {
return Error()
}
C.g_object_unref(C.gpointer(th.vipsImage))
th.vipsImage = vipsImage
return
}
// InvFFT transform an image from Fourier space to real space.
// The result is complex.
func (th *Image) InvFFT() (err error) {
var vipsImage *C.VipsImage
if C.vipsimage_invfft(th.vipsImage, &vipsImage) != 0 {
return Error()
}
C.g_object_unref(C.gpointer(th.vipsImage))
th.vipsImage = vipsImage
return
}
// FreqMult transformed to Fourier space, multipled with mask,
// then transformed back to real space. If in is already a complex image,
// just multiply then inverse transform.
func (th *Image) FreqMult(mask *Image) (err error) {
var vipsImage *C.VipsImage
if C.vipsimage_freqmult(th.vipsImage, mask.vipsImage, &vipsImage) != 0 {
return Error()
}
C.g_object_unref(C.gpointer(th.vipsImage))
th.vipsImage = vipsImage
return
}
// Spectrum make a displayable (i.e. 8-bit unsigned int) power spectrum.
func (th *Image) Spectrum() (err error) {
var vipsImage *C.VipsImage
if C.vipsimage_spectrum(th.vipsImage, &vipsImage) != 0 {
return Error()
}
C.g_object_unref(C.gpointer(th.vipsImage))
th.vipsImage = vipsImage
return
}
// Phasecor convert the two input images to Fourier space,
// calculate phase-correlation, back to real space.
func (th *Image) Phasecor(in *Image) (err error) {
var vipsImage *C.VipsImage
if C.vipsimage_phasecor(th.vipsImage, in.vipsImage, &vipsImage) != 0 {
return Error()
}
C.g_object_unref(C.gpointer(th.vipsImage))
th.vipsImage = vipsImage
return
}