Commit aa48f730 authored by Andrey Filippov's avatar Andrey Filippov

Comparison file generation for mclt16x16_bayer

parent 59128ef9
......@@ -22,6 +22,7 @@
**
*/
import java.util.concurrent.atomic.AtomicInteger;
import Jama.Matrix;
import ij.ImageStack;
......@@ -193,6 +194,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
dtt.set_window(window_type);
......@@ -426,6 +428,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -505,6 +508,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -619,6 +623,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -688,6 +693,7 @@ public class ImageDtt {
ai.set(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
dtt.set_window(window_type);
......@@ -750,6 +756,7 @@ public class ImageDtt {
}
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(transform_size);
dtt.set_window(window_type);
......@@ -860,6 +867,7 @@ public class ImageDtt {
}
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(transform_size);
dtt.set_window(window_type);
......@@ -971,9 +979,344 @@ public class ImageDtt {
return clt_data;
}
/*
*
*/
public void generateFPGACompareData(
final double [][] image_data, // for selected subcamera
final double [][] colorCentersXY, // pixel centers per color (2 - green)
final int transform_size,
final int width,
DttRad2 dtt
){
int height = image_data[0].length/width;
double [][][] fpga_clt_data_in = new double [3][4][];
double [][][] fpga_clt_data_out = new double [3][4][];
double [][][] fpga_clt_data_rot = new double [3][4][];
// double [][] fpga_fract_shiftsXY = new double[3][];
double [][] fpga_centersXY = new double [3][2];
// int [][] color_int_shifts = new int [3][2];
double [][][][] fold_coeff = new double[3][][][];
int [] ctile_left = new int [3];
int [] ctile_top = new int [3];
double [][] residual_shift = new double[3][2];
int [] ishx = new int[3];
int [] ishy = new int[3];
double [][] fpga_full_tile = new double [3][FPGA_TILE_SIZE * FPGA_TILE_SIZE];
double [][] fpga_tile = new double [3][4*transform_size*transform_size];
for (int chn = 0; chn<3; chn++) for (int j = 0; j < 2; j++) {
fpga_centersXY[chn][j] = colorCentersXY[chn][j];
// Round to FPGA precision
fpga_centersXY[chn][j] = Math.round(128*fpga_centersXY[chn][j])/128.0;
}
for (int chn = 0; chn<3; chn++) {
double px = fpga_centersXY[chn][0] - transform_size;
double py = fpga_centersXY[chn][1] - transform_size;
// Was wrong rounding, fractional part gets to +0.5
ctile_left[chn] = (int) -Math.round(-px);
ctile_top[chn] = (int) -Math.round(-py);
residual_shift[chn][0] = -(px - ctile_left[chn]);
residual_shift[chn][1] = -(py - ctile_top[chn]);
}
int lt = (FPGA_TILE_SIZE - 2 * transform_size)/2;
for (int chn = 0; chn < 3; chn++){
for (int i = 0; i < FPGA_TILE_SIZE; i++){
System.arraycopy(
image_data[chn],
((ctile_top[GREEN_CHN] - lt) + i) * width + (ctile_left[GREEN_CHN] - lt),
fpga_full_tile[chn], FPGA_TILE_SIZE * i,
FPGA_TILE_SIZE);
}
}
for (int chn = 0; chn < 3; chn++){
if ((ctile_left[chn] >= 0) && (ctile_left[chn] < (width - transform_size * 2)) &&
(ctile_top[chn] >= 0) && (ctile_top[chn] < (height - transform_size * 2))) {
for (int i = 0; i < transform_size * 2; i++){
System.arraycopy(image_data[chn], (ctile_top[chn] + i) * width + ctile_left[chn], fpga_tile[chn], transform_size * 2 * i, transform_size* 2);
}
} else { // copy by 1
for (int i = 0; i < transform_size* 2; i++){
int pi = ctile_top[chn] + i;
if (pi < 0) pi &= 1;
else if (pi >= height) pi = height - 2 + (pi & 1);
for (int j = 0; j < transform_size* 2; j++){
int pj = ctile_left[chn] + j;
if (pj < 0) pj &= 1;
else if (pj >= width) pj = width - 2 + (pj & 1);
fpga_tile[chn][transform_size * 2 * i + j] = image_data[chn][pi * width + pj];
}
}
}
}
// Fold and transform
for (int chn = 0; chn < 3; chn++){
fold_coeff[chn] = dtt.get_shifted_fold_2d ( // get_shifted_fold_2d(
transform_size,
residual_shift[chn][0],
residual_shift[chn][1],
0); // debug level
}
for (int chn = 0; chn < 3; chn++){
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
// fpga_clt_data_in[chn][dct_mode] = dtt.fold_tile_debug (fpga_tile[chn], transform_size, dct_mode, fold_coeff[chn]); // DCCT, DSCT, DCST, DSST
fpga_clt_data_in[chn][dct_mode] = dtt.fold_tile (fpga_tile[chn], transform_size, dct_mode, fold_coeff[chn]); // DCCT, DSCT, DCST, DSST
}
}
for (int chn = 0; chn < 3; chn++) if (chn != GREEN_CHN) {
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
fpga_clt_data_in[chn][dct_mode][i] *= 2.0; //adding twice each number in FPGA for R and B
}
}
}
for (int chn = 0; chn < 3; chn++) {
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
fpga_clt_data_out[chn][dct_mode] = fpga_clt_data_in[chn][dct_mode].clone();
}
}
double scale1 = (1 << (FPGA_DTT_IN - 9)); // -1;
scale1 *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale1 *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
// scale1 *= 2.0;
System.out.println("scale1="+scale1);
for (int chn = 0; chn < 3; chn++) {
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
System.out.println("Color="+chn+" fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv(..., scale1="+scale1);
fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv (fpga_clt_data_out[chn][dct_mode], dct_mode, transform_size, scale1, ((1 << 25) -1)); // debug level
// fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv (fpga_clt_data_out[chn][dct_mode], dct_mode, transform_size);
}
}
for (int chn = 0; chn < 3; chn++) {
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
fpga_clt_data_rot[chn][dct_mode] = fpga_clt_data_out[chn][dct_mode].clone();
}
}
// Rotate for fractional shift:
for (int chn = 0; chn < 3; chn++) {
fract_shift( // fractional shift in transform domain. Currently uses sin/cos - change to tables with 2? rotations
fpga_clt_data_rot[chn], // double [][] clt_tile,
transform_size,
residual_shift[chn][0], // double shiftX,
residual_shift[chn][1], // double shiftY,
true); // debug
}
// int byr_shift = ((ctile_top[GREEN_CHN] & 1) <<1) | (ctile_left[GREEN_CHN] & 1);
//GREEN_CHN
// Printout
System.out.println("// Debugging FPGA implementation");
for (int chn = 0; chn<3; chn++) {
System.out.println("// residual_shift["+chn+"][0]="+residual_shift[chn][0]+", residual_shift["+chn+"][1]="+residual_shift[chn][1]);
ishx[chn] = (int) Math.round((1 << (FPGA_SHIFT_BITS)) * residual_shift[chn][0]);
ishy[chn] = (int) Math.round((1 << (FPGA_SHIFT_BITS)) * residual_shift[chn][1]);
if (ishx[chn] >= (1 << (FPGA_SHIFT_BITS-1))) ishx[chn] = (1 << (FPGA_SHIFT_BITS-1)) - 1;
if (ishy[chn] >= (1 << (FPGA_SHIFT_BITS-1))) ishy[chn] = (1 << (FPGA_SHIFT_BITS-1)) - 1;
if (ishx[chn] < -(1 << (FPGA_SHIFT_BITS-1))) ishx[chn] = -(1 << (FPGA_SHIFT_BITS-1));
if (ishy[chn] < -(1 << (FPGA_SHIFT_BITS-1))) ishy[chn] = -(1 << (FPGA_SHIFT_BITS-1));
residual_shift[chn][0] = ishx[chn] * (1.0/(1 << (FPGA_SHIFT_BITS)));
residual_shift[chn][1] = ishy[chn] * (1.0/(1 << (FPGA_SHIFT_BITS)));
System.out.println(String.format("%4x // color %d shift_x, %d bits", ishx[chn] & ((1 << (FPGA_SHIFT_BITS)) - 1),chn,FPGA_SHIFT_BITS));
System.out.println(String.format("%4x // color %d shift_y, %d bits", ishy[chn] & ((1 << (FPGA_SHIFT_BITS)) - 1),chn,FPGA_SHIFT_BITS));
System.out.println(String.format("%4x // color %d ctile_left", ctile_left[chn],chn));
System.out.println(String.format("%4x // color %d ctile_top", ctile_top[chn], chn));
}
System.out.println("\n// Full Bayer fpga tile data");
int id = (1 << (FPGA_PIXEL_BITS - 9)); // 8
for (int i = 0; i < FPGA_TILE_SIZE*FPGA_TILE_SIZE; i++) {
double d = 0.0;
for (int fpga_chn = 0; fpga_chn < 3; fpga_chn++){
d += fpga_full_tile[fpga_chn][i];
}
System.out.print(String.format("%4x ",(int) Math.round(id * d)));
if (((i+1) %FPGA_TILE_SIZE) == 0) {
System.out.println();
}
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
double [] fpga_pix_lim = {0.0,0.0};
for (int i = 0; i < 256; i++) if (fpga_tile[chn][i] != 0){
if (fpga_tile[chn][i] > fpga_pix_lim[0]) fpga_pix_lim[0] = fpga_tile[chn][i];
if (fpga_tile[chn][i] < fpga_pix_lim[1]) fpga_pix_lim[1] = fpga_tile[chn][i];
}
System.out.println(String.format("\n// Color # %d: Pixels input range: %f ... %f", chn, fpga_pix_lim[1], fpga_pix_lim[0]));
System.out.println(String.format("//%x // shift_x, %d bits",ishx[chn] & ((1 << (FPGA_SHIFT_BITS)) - 1),FPGA_SHIFT_BITS));
System.out.println(String.format("//%x // shift_y, %d bits",ishy[chn] & ((1 << (FPGA_SHIFT_BITS)) - 1),FPGA_SHIFT_BITS));
for (int row = 0; row <16; row++){
for (int col = 0; col <16; col++){
System.out.print(String.format("%4x ",(int) Math.round(id * fpga_tile[chn][row*16 + col])));
}
System.out.println();
}
System.out.println();
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
System.out.println("// Color="+chn+", signs table (per mode, per index - bitstring of variants, 0 - positive, 1 - negative)");
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
int d = 0;
for (int b = 0; b < 4; b++){
if (fold_coeff[chn][dct_mode][i][b] < 0){
d |= (1 << b);
}
}
System.out.print(String.format("%x ",d));
if ((i % 16) == 15){
System.out.println();
}
}
}
System.out.println();
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
System.out.println("// Color = "+chn+", absolute values, mode0 (CC), others are the same");
// for (int dct_mode = 0; dct_mode <4; dct_mode++) {
int dct_mode = 0;
for (int i = 0; i < 64; i++){
for (int b = 0; b < 4; b++){
int d = (int) Math.round(((1 << FPGA_WND_BITS) -1)* Math.abs(fold_coeff[chn][dct_mode][i][b]));
System.out.print(String.format("%5x ",d & ((1 << (FPGA_WND_BITS)) - 1)));
}
if ((i % 4) == 3){
System.out.println();
}
}
System.out.println();
// }
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
double [] fpga_dtt_lim = {0.0,0.0};
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
if (fpga_clt_data_in[chn][dct_mode][i] > fpga_dtt_lim[0]) fpga_dtt_lim[0] = fpga_clt_data_in[chn][dct_mode][i];
if (fpga_clt_data_in[chn][dct_mode][i] < fpga_dtt_lim[1]) fpga_dtt_lim[1] = fpga_clt_data_in[chn][dct_mode][i];
}
}
System.out.println(String.format("// Color= %d, DTT input range: %f ... %f", chn, fpga_dtt_lim[1], fpga_dtt_lim[0]));
double scale = (1 << (FPGA_DTT_IN - 9)); // -1;
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 2; // Increased twice in FPGA adding twice each number in FPGA
System.out.println("Color="+chn+" fpga_clt_data_out[chn][dct_mode] = dtt.dttt_iv(..., scale="+scale);
// if (chn != GREEN_CHN) scale *= 2; // adding twice each number in FPGA for R and B - done before
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
int idd = (int) Math.round(scale * fpga_clt_data_in[chn][dct_mode][i]);
System.out.print(String.format("%7x ", idd & ((1 << 25) -1)));
if ((i % 8) == 7) System.out.println();
}
System.out.println();
}
System.out.println();
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
double [] fpga_dtt_lim = {0.0,0.0};
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
if (fpga_clt_data_out[chn][dct_mode][i] > fpga_dtt_lim[0]) fpga_dtt_lim[0] = fpga_clt_data_out[chn][dct_mode][i];
if (fpga_clt_data_out[chn][dct_mode][i] < fpga_dtt_lim[1]) fpga_dtt_lim[1] = fpga_clt_data_out[chn][dct_mode][i];
}
}
System.out.println(String.format("// Color = %d: DTT output range: %f ... %f", chn, fpga_dtt_lim[1], fpga_dtt_lim[0]));
// scale = (1 << (FPGA_DTT_IN - 9)); // -1;
// double scale = (1 << (FPGA_DTT_IN - 8)); // increased twice
double scale = (1 << (FPGA_DTT_IN - 9)); // Do not increase - lead to overflow !
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int i = 0; i < 64; i++){
int idd = (int) Math.round(scale * fpga_clt_data_out[chn][dct_mode][i]);
System.out.print(String.format("%7x ", idd & ((1 << 25) -1)));
if ((i % 8) == 7) System.out.println();
}
System.out.println();
}
System.out.println();
System.out.println("// Color = "+chn+" Testing symmetry of checkerboard patterns");
for (int dct_mode = 0; dct_mode < 2; dct_mode++) {
for (int i = 0; i < 64; i++){
if ((i % 8) == 0) System.out.print("// ");
int idd = (int) Math.round(scale * fpga_clt_data_out[chn][dct_mode][i]);
int idd1 = (int) Math.round(scale * fpga_clt_data_out[chn][3-dct_mode][63-i]);
System.out.print(String.format("%7x ", (idd-idd1) & ((1 << 25) -1)));
if ((i % 8) == 7) System.out.println();
}
System.out.println();
}
System.out.println();
System.out.println("// Color = "+chn+" Testing antisymmetry of checkerboard patterns");
for (int dct_mode = 0; dct_mode < 2; dct_mode++) {
for (int i = 0; i < 64; i++){
if ((i % 8) == 0) System.out.print("// ");
int idd = (int) Math.round(scale * fpga_clt_data_out[chn][dct_mode][i]);
int idd1 = (int) Math.round(scale * fpga_clt_data_out[chn][3-dct_mode][63-i]);
System.out.print(String.format("%7x ", (idd+idd1) & ((1 << 25) -1)));
if ((i % 8) == 7) System.out.println();
}
System.out.println();
}
System.out.println();
}
System.out.println();
for (int chn = 0; chn<3; chn++) {
// double scale = (1 << (FPGA_DTT_IN - 9)); // -1;
// double scale = (1 << (FPGA_DTT_IN - 8)); //
double scale = (1 << (FPGA_DTT_IN - 9)); // Do not increase - lead to overflow !
// compensate for DTT scale
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
// compensate for rotator scale:
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
double [] fpga_dtt_lim = {0.0,0.0};
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int j = 0; j < 64; j++){
if (fpga_clt_data_rot[chn][dct_mode][j] > fpga_dtt_lim[0]) fpga_dtt_lim[0] = fpga_clt_data_rot[chn][dct_mode][j];
if (fpga_clt_data_rot[chn][dct_mode][j] < fpga_dtt_lim[1]) fpga_dtt_lim[1] = fpga_clt_data_rot[chn][dct_mode][j];
}
}
System.out.println(String.format("// Color = %d: DTT rotated, shift_x=%f. shift_y = %f", chn, residual_shift[chn][0],residual_shift[chn][1]));
System.out.println(String.format("// DTT rotated range: %f ... %f", fpga_dtt_lim[1], fpga_dtt_lim[0]));
// scale = (1 << (FPGA_DTT_IN - 9)); // -1;
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
for (int j = 0; j < 64; j++){
int idd = (int) Math.round(scale * fpga_clt_data_rot[chn][dct_mode][j]);
System.out.print(String.format("%7x ", idd & ((1 << 25) -1)));
if ((j % 8) == 7) System.out.println();
}
System.out.println();
}
}
}
public double [][][][][][] clt_aberrations_quad_corr(
......@@ -1194,6 +1537,7 @@ public class ImageDtt {
final Matrix [] corr_rots = geometryCorrection.getCorrVector().getRotMatrices(); // get array of per-sensor rotation matrices
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(transform_size);
dtt.set_window(window_type);
......@@ -1301,7 +1645,29 @@ public class ImageDtt {
}
}
} // if (macro_mode) ... else
if (FPGA_COMPARE_DATA && (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY)) {
final int fpga_cam = 0;
double [][] manual_offsets={
// { 1.3, -2.7},
// {-1.3, 2.7},
// { 0.0, 0.0}};
{ 2.3, -2.7},
{-0.3, 2.7},
{ 0.0, 0.0}};
double [][] colorCentersXY = {
{centersXY[fpga_cam][0] + manual_offsets[0][0], centersXY[fpga_cam][1] + manual_offsets[0][1]}, // add manual offsets here
{centersXY[fpga_cam][0] + manual_offsets[1][0], centersXY[fpga_cam][1] + manual_offsets[1][1]},
{centersXY[fpga_cam][0] + manual_offsets[2][0], centersXY[fpga_cam][1] + manual_offsets[2][1]}
};
generateFPGACompareData(
image_data[fpga_cam], // final double [][] image_data, // for selected subcamera
colorCentersXY, // final double [][] colorCentersXY, // pixel centers per color (2 - green)
transform_size, // final int transform_size,
width, // final int width
dtt
);
}
for (int chn = 0; chn <numcol; chn++) {
boolean debug_for_fpga = FPGA_COMPARE_DATA && (globalDebugLevel > 0) && (tileX == debug_tileX) && (tileY == debug_tileY) && (chn == 2);
......@@ -1476,6 +1842,8 @@ public class ImageDtt {
}
}
// calculate overexposed fraction
if (saturation_imp != null) {
disparity_map[OVEREXPOSED][nTile] = (1.0 * overexp_all[0]) / overexp_all[1];
......@@ -2585,6 +2953,7 @@ public class ImageDtt {
}
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
dtt.set_window(window_type);
......@@ -2684,6 +3053,7 @@ public class ImageDtt {
ai.set(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
dtt.set_window(window_type);
......@@ -2799,6 +3169,7 @@ public class ImageDtt {
ai.set(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
int n2 = transform_size * 2;
......@@ -2931,6 +3302,7 @@ public class ImageDtt {
final AtomicInteger ai = new AtomicInteger(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3006,6 +3378,7 @@ public class ImageDtt {
final AtomicInteger ai = new AtomicInteger(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3125,6 +3498,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3159,6 +3533,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
int tileY,tileX;
......@@ -3194,6 +3569,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
double scale = 0.25;
......@@ -3315,6 +3691,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3372,6 +3749,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3472,6 +3850,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -3661,6 +4040,7 @@ public class ImageDtt {
final AtomicInteger ai = new AtomicInteger(0);
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX,chn;
for (int nTile = ai.getAndIncrement(); nTile < nTiles; nTile = ai.getAndIncrement()) {
......@@ -4091,11 +4471,7 @@ public class ImageDtt {
}
}
System.out.println(String.format("// DTT input range: %f ... %f", fpga_dtt_lim[1], fpga_dtt_lim[0]));
// double scale = (1 << (FPGA_DTT_IN - 10)) -1;
/// double scale = (1 << (FPGA_DTT_IN - 8)) -1;
double scale = (1 << (FPGA_DTT_IN - 9)); // -1;
/// scale /= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
/// scale /= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
scale *= 1.0 *((1 << FPGA_WND_BITS) -1) / (1 << FPGA_WND_BITS);
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
......@@ -4109,6 +4485,7 @@ public class ImageDtt {
System.out.println();
for (int dct_mode = 0; dct_mode <4; dct_mode++) {
System.out.println("Color= 2? clt_tile[dct_mode] = dtt.dttt_iv(..., scale=" +scale);
clt_tile[dct_mode] = dtt.dttt_iv (clt_tile[dct_mode], dct_mode, transform_size, scale, ((1 << 25) -1)); // debug level
}
fpga_dtt_lim[0] = 0.0;
......@@ -4390,6 +4767,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
DttRad2 dtt = new DttRad2(dct_size);
dtt.set_window(window_type);
......@@ -4457,6 +4835,7 @@ public class ImageDtt {
for (int ithread = 0; ithread < threads.length; ithread++) {
threads[ithread] = new Thread() {
@Override
public void run() {
int tileY,tileX;
double [] dct1 = new double [dct_size*dct_size];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment