Commit 54c5427a authored by Andrey Filippov's avatar Andrey Filippov
Browse files

Added rendering flat field - did not help

parent 7180569b
Loading
Loading
Loading
Loading
+33 −3
Original line number Diff line number Diff line
@@ -844,6 +844,29 @@ public class GpuQuad{ // quad camera description
				true);
	}        

	/**
	 * Set uniform data instead of the source images (for texture correction)
	 * Prepares array, if used a lot, may reuse the same array for all scenes, all sensors        
	 * @param value - valuer to use for each pixel
	 */
	public void setUniformImages(
			double value) {
		double [][][]       bayer_data = quadCLT.getImageData(); // resets hasNewImageData()
		double [][][] const_data = new double[bayer_data.length] [][];
		for (int nsens = 0; nsens < bayer_data.length; nsens++) if (bayer_data[nsens] != null){
			const_data[nsens] = new double [bayer_data[nsens].length][];
			for (int nchn = 0; nchn < bayer_data[nsens].length; nchn++) {
				const_data[nsens][nchn] = new double [bayer_data[nsens][nchn].length];
				Arrays.fill(const_data[nsens][nchn], value);
			}
		}
		setBayerImages(
				const_data,
				true);
		quadCLT.setNewDataState (true); // next time will read actual data
	}        
	
	
	/**
	 * Copy a set of Bayer images to the GPU         
	 * @param bayer_data per camera a set of split-color images [4][3][w*h], may be [4][1][w*h]
@@ -1435,7 +1458,8 @@ public class GpuQuad{ // quad camera description
		execConvertDirect(
				false,
				null,
				erase_clt);
				erase_clt,
				Double.NaN); // double   fill_value) {
	}
	/**
	 * Convert and save TD representation in either normal or reference scene. Reference scene TD representation
@@ -1444,11 +1468,13 @@ public class GpuQuad{ // quad camera description
	 * @param wh window width, height (or null)
	 * @param erase_clt erase CLT data. Only needed before execImcltRbgAll() if not all the
	 *                  tiles are converted. <0 - do not erase, 0 - erase to 0, 1 - erase to NaN 
	 * @param fill_value Double.NaN - normal, otherwise use this value for every pixel                 
	 */
	public void execConvertDirect(
			boolean  ref_scene,
			int []   wh,
			int      erase_clt) {
			int      erase_clt,
			double   fill_value) {
		if (this.gpuTileProcessor.GPU_CONVERT_DIRECT_kernel == null) 
		{
			IJ.showMessage("Error", "No GPU kernel: GPU_CONVERT_DIRECT_kernel");
@@ -1465,7 +1491,11 @@ public class GpuQuad{ // quad camera description
			wh = new int[] {img_width, img_height};
		}
		setConvolutionKernels(false); // set kernels if they are not set already
		if (!Double.isNaN(fill_value)) {
			setUniformImages(fill_value);
		} else {
			setBayerImages(false); // set Bayer images if this.quadCLT instance has new ones
		}
		// kernel parameters: pointer to pointers
		int tilesX =  wh[0] / GPUTileProcessor.DTT_SIZE;
		int tilesY =  wh[1] / GPUTileProcessor.DTT_SIZE;
+6 −4
Original line number Diff line number Diff line
@@ -1237,6 +1237,7 @@ public class ImageDtt extends ImageDttCPU {
	 * @param gpu_sigma_b
	 * @param gpu_sigma_g
	 * @param gpu_sigma_m
	 * @param fill_value       normally - Double.NaN. If not - use constant pixel value
	 * @param threadsMax
	 * @param globalDebugLevel
	 */
@@ -1250,6 +1251,7 @@ public class ImageDtt extends ImageDttCPU {
			final double              gpu_sigma_b,     // 0.9, 1.1
			final double              gpu_sigma_g,     // 0.6, 0.7
			final double              gpu_sigma_m,     //  =       0.4; // 0.7;
			final double              fill_value,      // normally - Double.NaN. If not - use constant pixel value
			final int                 threadsMax,      // maximal number of threads to launch
			final int                 globalDebugLevel)
	{
@@ -1272,7 +1274,7 @@ public class ImageDtt extends ImageDttCPU {
		gpuQuad.updateTasks(
				tp_tasks,
				false); // boolean use_aux    // while is it in class member? - just to be able to free
		gpuQuad.execConvertDirect(use_reference_buffer, wh, erase_clt); // put results into a "reference" buffer
		gpuQuad.execConvertDirect(use_reference_buffer, wh, erase_clt, fill_value); // put results into a "reference" buffer
	}

	public void setReferenceTDMotionBlur(
@@ -1307,7 +1309,7 @@ public class ImageDtt extends ImageDttCPU {
		gpuQuad.updateTasks(
				tp_tasks[0],
				false); // boolean use_aux    // while is it in class member? - just to be able to free
		gpuQuad.execConvertDirect(use_reference_buffer, wh, erase_clt); // put results into a "reference" buffer
		gpuQuad.execConvertDirect(use_reference_buffer, wh, erase_clt, Double.NaN); // put results into a "reference" buffer
		
		// second tasks (subtracting MB)
		gpuQuad.setTasks(                  // copy tp_tasks to the GPU memory
@@ -1320,7 +1322,7 @@ public class ImageDtt extends ImageDttCPU {
		gpuQuad.updateTasks(
				tp_tasks[1],
				false); // boolean use_aux    // while is it in class member? - just to be able to free
		gpuQuad.execConvertDirect(use_reference_buffer, wh, -1); // erase_clt); // put results into a "reference" buffer
		gpuQuad.execConvertDirect(use_reference_buffer, wh, -1, Double.NaN); // erase_clt); // put results into a "reference" buffer
	}


+15 −0
Original line number Diff line number Diff line
@@ -5844,6 +5844,7 @@ public class OpticalFlow {
					true, // toRGB,               // final boolean     toRGB,
					clt_parameters.imp.show_color_nan, // boolean show_nan
					"GPU-SHIFTED-D"+clt_parameters.disparity, // String            suffix,
					Double.NaN,          // double            fill_value,// - use instead of image					
					threadsMax,          // int               threadsMax,
					debugLevel);         // int         debugLevel)
			quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -5862,6 +5863,7 @@ public class OpticalFlow {
					false, // toRGB,               // final boolean     toRGB,
					clt_parameters.imp.show_mono_nan, // boolean show_nan
					"GPU-SHIFTED-D"+clt_parameters.disparity, // String            suffix,
					Double.NaN,          // double            fill_value,// - use instead of image					
					threadsMax,          // int               threadsMax,
					debugLevel);         // int         debugLevel)
			quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -5942,6 +5944,7 @@ public class OpticalFlow {
						true, // toRGB,               // final boolean     toRGB,
						clt_parameters.imp.show_color_nan,
						scenes_suffix+"GPU-SHIFTED-FOREGROUND", // String            suffix,
						Double.NaN,          // double            fill_value,// - use instead of image					
						threadsMax,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -5960,6 +5963,7 @@ public class OpticalFlow {
						false, // toRGB,               // final boolean     toRGB,
						clt_parameters.imp.show_mono_nan,
						scenes_suffix+"GPU-SHIFTED-FOREGROUND", // String            suffix,
						Double.NaN,          // double            fill_value,// - use instead of image					
						threadsMax,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -5987,6 +5991,7 @@ public class OpticalFlow {
					true,               // final boolean     toRGB,
					clt_parameters.imp.show_color_nan,
					"GPU-SHIFTED-BACKGROUND", // String            suffix,
					Double.NaN,          // double            fill_value,// - use instead of image					
					threadsMax,          // int               threadsMax,
					debugLevel);         // int         debugLevel)
			quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -6005,6 +6010,7 @@ public class OpticalFlow {
					false,               // final boolean     toRGB,
					clt_parameters.imp.show_mono_nan,
					"GPU-SHIFTED-BACKGROUND", // String            suffix,
					Double.NaN,          // double            fill_value,// - use instead of image					
					threadsMax,          // int               threadsMax,
					debugLevel);         // int         debugLevel)
			quadCLTs[ref_index].saveImagePlusInModelDirectory(
@@ -6593,6 +6599,7 @@ public class OpticalFlow {
						clt_parameters.imp.show_color_nan,
						"",                  // String            suffix, no suffix here
						Double.NaN,          // double            fill_value,// - use instead of image					
						THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				if (stack_scenes_color == null) {
@@ -6616,6 +6623,7 @@ public class OpticalFlow {
						false,               // final boolean     toRGB,
						clt_parameters.imp.show_mono_nan,
						"",                  // String            suffix, no suffix here
						Double.NaN,          // double            fill_value,// - use instead of image					
						THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				if (stack_scenes_mono == null) {
@@ -6736,6 +6744,7 @@ public class OpticalFlow {
						true,                // final boolean     toRGB,
						clt_parameters.imp.show_color_nan,
						"",                  // String            suffix, no suffix here
						Double.NaN,          // double            fill_value,// - use instead of image					
						THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				if (stack_adjusted_color == null) {
@@ -6759,6 +6768,7 @@ public class OpticalFlow {
						false,               // final boolean     toRGB,
						clt_parameters.imp.show_mono_nan,
						"",                  // String            suffix, no suffix here
						Double.NaN,          // double            fill_value,// - use instead of image					
						THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
				if (stack_adjusted_mono == null) {
@@ -6973,6 +6983,7 @@ public class OpticalFlow {
						toRGB,               // final boolean     toRGB,
						(toRGB? clt_parameters.imp.show_color_nan : clt_parameters.imp.show_mono_nan),
						"", // String            suffix, no suffix here
						Double.NaN,          // double            fill_value, - use instead of image
						QuadCLT.THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
@@ -6992,6 +7003,7 @@ public class OpticalFlow {
						toRGB,               // final boolean     toRGB,
						(toRGB? clt_parameters.imp.show_color_nan : clt_parameters.imp.show_mono_nan),
						"", // String            suffix, no suffix here
						Double.NaN,          // double            fill_value,// - use instead of image					
						QuadCLT.THREADS_MAX,          // int               threadsMax,
						debugLevel);         // int         debugLevel)
			}
@@ -12592,6 +12604,7 @@ public class OpticalFlow {
					clt_parameters.gpu_sigma_b, // final double              gpu_sigma_b,     // 0.9, 1.1
					clt_parameters.gpu_sigma_g, // final double              gpu_sigma_g,     // 0.6, 0.7
					clt_parameters.gpu_sigma_m, // final double              gpu_sigma_m,     //  =       0.4; // 0.7;
					Double.NaN,                 // final double              fill_value,      // normally - Double.NaN. If not - use constant pixel value
					QuadCLT.THREADS_MAX,                 // final int                 threadsMax,       // maximal number of threads to launch
					debug_level);               // final int                 globalDebugLevel);
		}
@@ -14373,6 +14386,7 @@ public class OpticalFlow {
							false, // toRGB,               // final boolean     toRGB,
							clt_parameters.imp.show_color_nan,
							quadCLTs[nscene].getImageName()+"-MOTION_BLUR_CORRECTED", // String            suffix,
							Double.NaN,          // double            fill_value, - use instead of image
							THREADS_MAX,          // int               threadsMax,
							debugLevel);         // int         debugLevel)
					imp_mbc.show();
@@ -14394,6 +14408,7 @@ public class OpticalFlow {
							false, // toRGB,               // final boolean     toRGB,
							clt_parameters.imp.show_color_nan,
							quadCLTs[nscene].getImageName()+"-MOTION_BLUR_CORRECTED-MERGED", // String            suffix,
							Double.NaN,          // double            fill_value, - use instead of image
							THREADS_MAX,          // int               threadsMax,
							debugLevel);         // int         debugLevel)
					imp_mbc_merged.show();
+10 −2
Original line number Diff line number Diff line
@@ -880,6 +880,7 @@ public class QuadCLT extends QuadCLTCPU {
					false,              // final boolean     toRGB,
					true,               // final boolean     show_nan,
					"PHOTOMETRIC",      // String            suffix,
					Double.NaN,          // double            fill_value,// - use instead of image					
					threadsMax,         // int               threadsMax,
					-2);        // final int         debugLevel);
			if (debug) {
@@ -1258,6 +1259,7 @@ public class QuadCLT extends QuadCLTCPU {
			final boolean     toRGB,
			final boolean     show_nan,
			String            suffix,
			double            fill_value, // - use instead of image
			int               threadsMax,
			final int         debugLevel){
		return renderGPUFromDSI(
@@ -1278,6 +1280,7 @@ public class QuadCLT extends QuadCLTCPU {
				toRGB,
				show_nan,
				suffix,
				Double.NaN,          // double            fill_value, - use instead of image
				threadsMax,
				debugLevel);
	}	
@@ -1299,6 +1302,7 @@ public class QuadCLT extends QuadCLTCPU {
	 * @param toRGB
	 * @param show_nan
	 * @param suffix
	 * @param fill_value. Noramlly NaN, if not - fill image pixels with constant value
	 * @param threadsMax
	 * @param debugLevel
	 * @return
@@ -1322,6 +1326,7 @@ public class QuadCLT extends QuadCLTCPU {
			final boolean     toRGB,
			final boolean     show_nan,
			String            suffix,
			double            fill_value,
			int               threadsMax,
			final int         debugLevel){
		double [][] pXpYD;
@@ -1382,7 +1387,7 @@ public class QuadCLT extends QuadCLTCPU {
					dbg_titles);
		}
		TpTask[][] tp_tasks;
		if (mb_vectors!=null) {
		if ((mb_vectors!=null) && Double.isNaN(fill_value)){
			tp_tasks = GpuQuad.setInterTasksMotionBlur( // "true" reference, with stereo actual reference will be offset
					scene.getNumSensors(),
					rendered_width,           // should match output size, pXpYD.length
@@ -1428,7 +1433,7 @@ public class QuadCLT extends QuadCLTCPU {
	    		full_woi_in.height * GPUTileProcessor.DTT_SIZE};
	    int                 erase_clt = show_nan ? 1:0;
//	    boolean test1 = true;
	    if (mb_vectors!=null) {// && test1) {
	    if ((mb_vectors!=null) && Double.isNaN(fill_value)) {// && test1) {
	    	image_dtt.setReferenceTDMotionBlur( // change to main?
	    			erase_clt, //final int                 erase_clt,
	    			wh, // null,                       // final int []              wh,               // null (use sensor dimensions) or pair {width, height} in pixels
@@ -1452,6 +1457,7 @@ public class QuadCLT extends QuadCLTCPU {
	    			clt_parameters.gpu_sigma_b, // final double              gpu_sigma_b,     // 0.9, 1.1
	    			clt_parameters.gpu_sigma_g, // final double              gpu_sigma_g,     // 0.6, 0.7
	    			clt_parameters.gpu_sigma_m, // final double              gpu_sigma_m,     //  =       0.4; // 0.7;
	    			fill_value,                 // final double              fill_value,      // normally - Double.NaN. If not - use constant pixel value
	    			threadsMax,                 // final int                 threadsMax,       // maximal number of threads to launch
	    			debugLevel);                // final int                 globalDebugLevel);
	    }
@@ -1651,6 +1657,7 @@ public class QuadCLT extends QuadCLTCPU {
					clt_parameters.gpu_sigma_b, // final double              gpu_sigma_b,     // 0.9, 1.1
					clt_parameters.gpu_sigma_g, // final double              gpu_sigma_g,     // 0.6, 0.7
					clt_parameters.gpu_sigma_m, // final double              gpu_sigma_m,     //  =       0.4; // 0.7;
					Double.NaN,                 // final double              fill_value,      // normally - Double.NaN. If not - use constant pixel value
					OpticalFlow.THREADS_MAX,    // final int                 threadsMax,       // maximal number of threads to launch
					debugLevel);                // final int                 globalDebugLevel);
		}
@@ -1942,6 +1949,7 @@ public class QuadCLT extends QuadCLTCPU {
					clt_parameters.gpu_sigma_b, // final double              gpu_sigma_b,     // 0.9, 1.1
					clt_parameters.gpu_sigma_g, // final double              gpu_sigma_g,     // 0.6, 0.7
					clt_parameters.gpu_sigma_m, // final double              gpu_sigma_m,     //  =       0.4; // 0.7;
					Double.NaN,                 // final double              fill_value,      // normally - Double.NaN. If not - use constant pixel value
					OpticalFlow.THREADS_MAX,    // final int                 threadsMax,       // maximal number of threads to launch
					debugLevel);                // final int                 globalDebugLevel);
		}
+3 −2
Original line number Diff line number Diff line
@@ -2411,8 +2411,9 @@ public class QuadCLTCPU {
		  ShowDoubleFloatArrays.showArrays(dsi_main,tp.getTilesX(), tp.getTilesY(), true, title, titles);
	}
	
	
	
    public void setNewDataState(boolean state) {
    	new_image_data = state;
    }
	
    public boolean hasNewImageData() {
    	return new_image_data;