/** Swap quadrants 1 and 3 and 2 and 4 of the image contained in this FHT. */ public void swapQuadrants () { swapQuadrants(this); }
/** Swap quadrants 1 and 3 and 2 and 4 of the image contained in this FHT. */ public void swapQuadrants () { swapQuadrants(this); }
ImageProcessor calculateAmplitude(float[] fht, int maxN) { float[] amp = new float[maxN*maxN]; for (int row=0; row<maxN; row++) { amplitude(row, maxN, fht, amp); } ImageProcessor ip = new FloatProcessor(maxN, maxN, amp, null); swapQuadrants(ip); return ip; }
ImageProcessor calculateAmplitude(float[] fht, int maxN) { float[] amp = new float[maxN*maxN]; for (int row=0; row<maxN; row++) { amplitude(row, maxN, fht, amp); } ImageProcessor ip = new FloatProcessor(maxN, maxN, amp, null); swapQuadrants(ip); return ip; }
private static FHT computeCrossCorrelationImage(FHT image1FFT, FHT image2FFT) { FHT crossCorrelationImage = image1FFT.conjugateMultiply(image2FFT); crossCorrelationImage.setShowProgress(false); crossCorrelationImage.inverseTransform(); crossCorrelationImage.swapQuadrants(); return crossCorrelationImage; }
void customFilter(FHT fht) { int size = fht.getWidth(); showStatus("Filtering"); fht.swapQuadrants(filter); float[] fhtPixels = (float[])fht.getPixels(); boolean isFloat = filter.getBitDepth()==32; for (int i=0; i<fhtPixels.length; i++) { if (isFloat) fhtPixels[i] = fhtPixels[i]*filter.getf(i); else fhtPixels[i] = (float)(fhtPixels[i]*(filter.get(i)/255.0)); } fht.swapQuadrants(filter); }
void customFilter(FHT fht) { int size = fht.getWidth(); showStatus("Filtering"); fht.swapQuadrants(filter); float[] fhtPixels = (float[])fht.getPixels(); boolean isFloat = filter.getBitDepth()==32; for (int i=0; i<fhtPixels.length; i++) { if (isFloat) fhtPixels[i] = fhtPixels[i]*filter.getf(i); else fhtPixels[i] = (float)(fhtPixels[i]*(filter.get(i)/255.0)); } fht.swapQuadrants(filter); }
/** Converts this FHT to a complex Fourier transform and returns it as a two slice stack. * Author: Joachim Wesner */ public ImageStack getComplexTransform() { if (!isFrequencyDomain) throw new IllegalArgumentException("Frequency domain image required"); float[] fht = (float[])getPixels(); float[] re = new float[maxN*maxN]; float[] im = new float[maxN*maxN]; for (int i=0; i<maxN; i++) { FHTreal(i, maxN, fht, re); FHTimag(i, maxN, fht, im); } swapQuadrants(new FloatProcessor(maxN, maxN, re, null)); swapQuadrants(new FloatProcessor(maxN, maxN, im, null)); ImageStack stack = new ImageStack(maxN, maxN); stack.addSlice("Real", re); stack.addSlice("Imaginary", im); return stack; }
/** Converts this FHT to a complex Fourier transform and returns it as a two slice stack. * Author: Joachim Wesner */ public ImageStack getComplexTransform() { if (!isFrequencyDomain) throw new IllegalArgumentException("Frequency domain image required"); float[] fht = (float[])getPixels(); float[] re = new float[maxN*maxN]; float[] im = new float[maxN*maxN]; for (int i=0; i<maxN; i++) { FHTreal(i, maxN, fht, re); FHTimag(i, maxN, fht, im); } swapQuadrants(new FloatProcessor(maxN, maxN, re, null)); swapQuadrants(new FloatProcessor(maxN, maxN, im, null)); ImageStack stack = new ImageStack(maxN, maxN); stack.addSlice("Real", re); stack.addSlice("Imaginary", im); return stack; }
void swapQuadrants(ImageStack stack) { FHT fht = new FHT(new FloatProcessor(1, 1)); for (int i=1; i<=stack.getSize(); i++) fht.swapQuadrants(stack.getProcessor(i)); }
void swapQuadrants(ImageStack stack) { FHT fht = new FHT(new FloatProcessor(1, 1)); for (int i=1; i<=stack.getSize(); i++) fht.swapQuadrants(stack.getProcessor(i)); }
/** * Multiplies a Fourier domain image by a filter * @param imp A frequency domain image, which is modified. * @param filter The filter, 32-bits (0-1) or 8-bits (0-255) * @see #forward * @see #inverse * @see #filter */ public static void multiply(ImagePlus imp, ImageProcessor filter) { Object obj = imp.getProperty("FHT"); FHT fht = obj!=null&&(obj instanceof FHT)?(FHT)obj:null; if (fht==null) return; int size = fht.getWidth(); boolean isFloat = filter.getBitDepth()==32; if (!isFloat) filter = filter.convertToByte(true); filter = filter.resize(size, size); fht.swapQuadrants(filter); float[] fhtPixels = (float[])fht.getPixels(); for (int i=0; i<fhtPixels.length; i++) { if (isFloat) fhtPixels[i] = fhtPixels[i]*filter.getf(i); else fhtPixels[i] = (float)(fhtPixels[i]*(filter.get(i)/255.0)); } fht.swapQuadrants(filter); imp.setProcessor(null, fht.getPowerSpectrum()); }
/** * Multiplies a Fourier domain image by a filter * @param imp A frequency domain image, which is modified. * @param filter The filter, 32-bits (0-1) or 8-bits (0-255) * @see #forward * @see #inverse * @see #filter */ public static void multiply(ImagePlus imp, ImageProcessor filter) { Object obj = imp.getProperty("FHT"); FHT fht = obj!=null&&(obj instanceof FHT)?(FHT)obj:null; if (fht==null) return; int size = fht.getWidth(); boolean isFloat = filter.getBitDepth()==32; if (!isFloat) filter = filter.convertToByte(true); filter = filter.resize(size, size); fht.swapQuadrants(filter); float[] fhtPixels = (float[])fht.getPixels(); for (int i=0; i<fhtPixels.length; i++) { if (isFloat) fhtPixels[i] = fhtPixels[i]*filter.getf(i); else fhtPixels[i] = (float)(fhtPixels[i]*(filter.get(i)/255.0)); } fht.swapQuadrants(filter); imp.setProcessor(null, fht.getPowerSpectrum()); }
swapQuadrants(ip); if (FFT.displayRawPS) { ImageProcessor ip2 = new FloatProcessor(maxN, maxN, fps, null); swapQuadrants(ip2); new ImagePlus("PS of "+FFT.fileName, ip2).show();
swapQuadrants(ip); if (FFT.displayRawPS) { ImageProcessor ip2 = new FloatProcessor(maxN, maxN, fps, null); swapQuadrants(ip2); new ImagePlus("PS of "+FFT.fileName, ip2).show();
fht.inverseTransform(); if (fht.quadrantSwapNeeded) fht.swapQuadrants(); fht.resetMinAndMax(); ImageProcessor ip2 = fht;
fht.inverseTransform(); if (fht.quadrantSwapNeeded) fht.swapQuadrants(); fht.resetMinAndMax(); ImageProcessor ip2 = fht;
ip.swapQuadrants(mask); byte[] maskPixels = (byte[])mask.getPixels(); for (int i=0; i<fht.length; i++) {
ip.swapQuadrants(mask); byte[] maskPixels = (byte[])mask.getPixels(); for (int i=0; i<fht.length; i++) {
result.inverseTransform(); IJ.showStatus("Swap quadrants"); result.swapQuadrants(); IJ.showStatus("Display image"); result.resetMinAndMax();