package ip.gui;
import ip.vs.ColorUtils;
import ip.vs.ImageUtils;
import ip.gui.frames.FFTFrame;
import transforms.FFT;
public class FFTRadix2 {
FFTFrame parent;
private ColorUtils CU = new ColorUtils();
private ImageUtils iUtil = new ImageUtils();
private FFT imgFFT = new FFT();
private short[] imageData_R;
private short[] imageData_G;
private short[] imageData_B;
public FFTRadix2(FFTFrame _parent) {
parent = _parent;
initData();
}
private void initData() {
imgFFT.DisplayLogPSD = true;
int w = parent.getImageWidth();
int h = parent.getImageHeight();
get1DArraysFromParent();
}
public void get1DArraysFromParent() {
if (parent == null)
System.out.println(
"ER:get1DArraysFromParent, parent==null");
if (parent.getImageWidth() != parent.getImageHeight())
System.out.println("ComplexRgb:transforms.fft Non-square image detected");
int N = parent.getImageWidth() * parent.getImageHeight();
imageData_R = new short[N];
imageData_G = new short[N];
imageData_B = new short[N];
for (int x = 0; x < parent.getImageWidth(); x++)
for (int y = 0; y < parent.getImageHeight(); y++) {
imageData_R[x + y * parent.getImageWidth()] = parent.getR()[x][y];
imageData_G[x + y * parent.getImageWidth()] = parent.getG()[x][y];
imageData_B[x + y * parent.getImageWidth()] = parent.getB()[x][y];
}
}
public FFT fft = new FFT();
public FFT getVsFft() {
return fft;
}
public int[] fft() {
fft.DisplayLogPSD = true;
if (parent.getImageWidth() != parent.getImageHeight())
System.out.println("ComplexRgb:transforms.fft ER! Non-square image");
return fft.forward2dFFT(
imageData_R,
imageData_G,
imageData_B,
parent.getImageWidth(),
parent.getImageHeight());
}
public int[] getPhaseImage() {
fft.DisplayLogPSD = true;
if (parent.getImageWidth() != parent.getImageHeight())
System.out.println("ComplexRgb:transforms.fft ER! Non-square image");
fft.forward2dFFT(
imageData_R,
imageData_G,
imageData_B,
parent.getImageWidth(),
parent.getImageHeight());
return fft.getPhaseImage();
}
public void complexMult(FFTRadix2 other) {
fft.complexMult(other.getVsFft());
}
public int[] getPsd() {
return fft.getPsd();
}
public int[] ifft() {
return fft.reverse2dFFT();
}
}