better run_cmplx()
ready to go into Vips.py
This commit is contained in:
parent
32f6f5ed22
commit
a8b78371f8
3
TODO
3
TODO
@ -17,8 +17,7 @@
|
|||||||
- could abandon complex images and just use 2*bands instead, have complex
|
- could abandon complex images and just use 2*bands instead, have complex
|
||||||
as a flag you set? or just rely on FOURIER
|
as a flag you set? or just rely on FOURIER
|
||||||
|
|
||||||
|
paste fixed up run_cmplx() into Vips.py
|
||||||
|
|
||||||
|
|
||||||
- easy to get a segv with Nicolas's interpolators, argh
|
- easy to get a segv with Nicolas's interpolators, argh
|
||||||
|
|
||||||
|
@ -11,20 +11,36 @@ from gi.repository import Vips
|
|||||||
|
|
||||||
#Vips.cache_set_trace(True)
|
#Vips.cache_set_trace(True)
|
||||||
|
|
||||||
# Run a function expecting a complex image on a two-band image
|
# Run a function expecting a complex image on an image with an even number of
|
||||||
|
# bands
|
||||||
def run_cmplx(fn, image):
|
def run_cmplx(fn, image):
|
||||||
if image.format == Vips.BandFormat.FLOAT:
|
original_format = image.format
|
||||||
new_format = Vips.BandFormat.COMPLEX
|
|
||||||
elif image.format == Vips.BandFormat.DOUBLE:
|
if not Vips.band_format_iscomplex(image.format):
|
||||||
|
if image.bands % 2 != 0:
|
||||||
|
raise "not an even number of bands"
|
||||||
|
|
||||||
|
if not Vips.band_format_isfloat(image.format):
|
||||||
|
image = image.cast(Vips.BandFormat.FLOAT)
|
||||||
|
|
||||||
|
if image.format == Vips.BandFormat.DOUBLE:
|
||||||
new_format = Vips.BandFormat.DPCOMPLEX
|
new_format = Vips.BandFormat.DPCOMPLEX
|
||||||
else:
|
else:
|
||||||
raise "run_cmplx: not float or double"
|
new_format = Vips.BandFormat.COMPLEX
|
||||||
|
|
||||||
# tag as complex, run, revert tagging
|
image = image.copy(format = new_format, bands = image.bands / 2)
|
||||||
cmplx = image.copy(bands = 1, format = new_format)
|
|
||||||
cmplx_result = fn(cmplx)
|
|
||||||
|
|
||||||
return cmplx_result.copy(bands = 2, format = image.format)
|
image = fn(image)
|
||||||
|
|
||||||
|
if not Vips.band_format_iscomplex(original_format):
|
||||||
|
if image.format == Vips.BandFormat.DPCOMPLEX:
|
||||||
|
new_format = Vips.BandFormat.DOUBLE
|
||||||
|
else:
|
||||||
|
new_format = Vips.BandFormat.FLOAT
|
||||||
|
|
||||||
|
image = image.copy(format = new_format, bands = image.bands * 2)
|
||||||
|
|
||||||
|
return image
|
||||||
|
|
||||||
def to_polar(image):
|
def to_polar(image):
|
||||||
"""Transform image coordinates to polar.
|
"""Transform image coordinates to polar.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user