QTrk
Functions | Variables
ZLUT Bias Correction

Functions related to correcting the bias in the z lookup table scheme. More...

Functions

void QueuedTracker::ComputeZBiasCorrection (int bias_planes, CImageData *result, int smpPerPixel, bool useSplineInterp)
 
float QueuedTracker::ZLUTBiasCorrection (float z, int zlut_planes, int bead)
 
void QueuedTracker::SetZLUTBiasCorrection (const CImageData &data)
 
CImageDataQueuedTracker::GetZLUTBiasCorrection ()
 

Variables

CImageDataQueuedTracker::zlut_bias_correction
 

Detailed Description

Functions related to correcting the bias in the z lookup table scheme.

For more information, see Jelmer's paper on this software environment [1]. This is not used on setups as far as I (Jordi) am aware, since it was still in a development stage when Jelmer left.

Function Documentation

§ ComputeZBiasCorrection()

void QueuedTracker::ComputeZBiasCorrection ( int  bias_planes,
CImageData result,
int  smpPerPixel,
bool  useSplineInterp 
)

Definition at line 173 of file QueuedTracker.cpp.

174 {
175  int count,zlut_planes,radialsteps;
176  GetRadialZLUTSize(count, zlut_planes, radialsteps);
177  float* zlut_data = new float[count*zlut_planes*radialsteps];
178  GetRadialZLUT(zlut_data);
179 
180  std::vector<float> qi_rweights = ComputeRadialBinWindow(cfg.qi_radialsteps);
181  std::vector<float> zlut_rweights = ComputeRadialBinWindow(cfg.zlut_radialsteps);
182 
184  delete zlut_bias_correction;
185 
186  zlut_bias_correction = new CImageData(bias_planes, count);
187 
188  parallel_for(count*bias_planes, [&](int job) {
189  //for (int job=0;job<count*bias_planes;job++) {
190  int bead = job/bias_planes;
191  int plane = job%bias_planes;
192 
193  float *zlut_ptr = &zlut_data[ bead * (zlut_planes*radialsteps) ];
194  CPUTracker trk (cfg.width,cfg.height);
195  ImageData zlut(zlut_ptr, radialsteps, zlut_planes);
196  trk.SetRadialZLUT(zlut.data, zlut.h, zlut.w, 1, cfg.zlut_minradius,cfg.zlut_maxradius, false, false);
197  trk.SetRadialWeights(&zlut_rweights[0]);
198 
199  vector3f pos(cfg.width/2,cfg.height/2, plane /(float) bias_planes * zlut_planes );
201  GenerateImageFromLUT(&img, &zlut, cfg.zlut_minradius, cfg.zlut_maxradius, pos, useSplineInterp,smpPerPixel);
202 
203  bool bhit;
204  trk.SetImageFloat(img.data);
205  vector2f com = trk.ComputeMeanAndCOM();
206  vector2f qi = trk.ComputeQI(com, 2, cfg.qi_radialsteps, cfg.qi_angstepspq, cfg.qi_angstep_factor, cfg.qi_minradius, cfg.qi_maxradius, bhit, &qi_rweights[0]);
207  float z = trk.ComputeZ(qi, cfg.zlut_angularsteps, 0);
208  zlut_bias_correction->at(plane, bead) = z - pos.z;
209 
210  //trk.ComputeRadialProfile(
211  img.free();
212  if ((job%(count*bias_planes/10)) == 0)
213  dbgprintf("job=%d\n", job);
214 // }
215  });
216 
217  if (result)
218  *result = *zlut_bias_correction;
219 }
float zlut_minradius
Distance in pixels from the bead center from which to start sampling profiles. Default 1...
Definition: qtrk_c_api.h:135
virtual void GetRadialZLUTSize(int &count, int &planes, int &radialsteps)=0
Get the dimensions of the radial lookup table data.
float qi_minradius
Distance in pixels from the bead center from which to start sampling profiles. Default 1...
Definition: qtrk_c_api.h:141
int width
Width of regions of interest to be handled. Typically equals height (square ROI). ...
Definition: qtrk_c_api.h:106
Class with all CPU algorithm implementations.
Definition: cpu_tracker.h:38
void GenerateImageFromLUT(ImageData *image, ImageData *zlut, float minradius, float maxradius, vector3f pos, bool splineInterp, int oversampleSubdiv)
Definition: utils.cpp:354
virtual void GetRadialZLUT(float *dst)=0
Get the radial lookup tables used for z tracking.
int height
Height of regions of interest to be handled. Typically equals width (square ROI). ...
Definition: qtrk_c_api.h:107
int zlut_radialsteps
Number of radial steps to sample on.
Definition: qtrk_c_api.h:198
static TImageData alloc(int w, int h)
Definition: utils.h:110
std::vector< float > ComputeRadialBinWindow(int rsteps)
Calculate the radial weights for ZLUT profile comparisons.
Definition: utils.cpp:706
void parallel_for(int count, TF f)
Definition: threads.h:251
float qi_maxradius
Max radius in pixels of the sampling circle.
Definition: qtrk_c_api.h:204
QTrkComputedConfig cfg
The settings used by this instance of QueuedTracker.
void free()
Definition: utils.h:111
CImageData * zlut_bias_correction
int qi_radialsteps
Number of radial steps to sample on.
Definition: qtrk_c_api.h:202
void dbgprintf(const char *fmt,...)
Definition: utils.cpp:149
T & at(int x, int y)
Definition: utils.h:96
int qi_angstepspq
Number of angular steps to sample on per quadrant.
Definition: qtrk_c_api.h:203
float qi_angstep_factor
Factor to reduce angular steps on lower iterations. Default 1.0 (no effect).
Definition: qtrk_c_api.h:157
int zlut_angularsteps
Number of angular steps to sample on.
Definition: qtrk_c_api.h:199
float zlut_maxradius
Max radius in pixels of the sampling circle.
Definition: qtrk_c_api.h:200
T * data
Definition: utils.h:80

§ GetZLUTBiasCorrection()

CImageData * QueuedTracker::GetZLUTBiasCorrection ( )

Definition at line 227 of file QueuedTracker.cpp.

228 {
230  return 0;
231 }
CImageData * zlut_bias_correction

§ SetZLUTBiasCorrection()

void QueuedTracker::SetZLUTBiasCorrection ( const CImageData data)

Definition at line 221 of file QueuedTracker.cpp.

222 {
225 }
CImageData * zlut_bias_correction

§ ZLUTBiasCorrection()

float QueuedTracker::ZLUTBiasCorrection ( float  z,
int  zlut_planes,
int  bead 
)

Definition at line 147 of file QueuedTracker.cpp.

148 {
150  return z;
151 
152  /*
153  bias = d(r,4);
154  measured_pos = d(r,1) + bias;
155  pos = measured_pos;
156  for k=1:2
157  guess_bias = interp1(d(r,1), bias, pos);
158  pos = measured_pos - guess_bias;
159  end
160  */
161 
162  // we have to reverse the bias table: we know that true_z + bias(true_z) = measured_z, but we can only get bias(measured_z)
163  // It seems that one can iterate towards the right position:
164 
165  float pos = z;
166  for (int k=0;k<4;k++) {
167  float tblpos = pos / (float)zlut_planes * zlut_bias_correction->w;
168  float bias = zlut_bias_correction->interpolate1D(bead, tblpos);
169  pos = z - bias;
170  }
171  return pos;
172 }
T interpolate1D(int y, float x)
Definition: utils.h:98
CImageData * zlut_bias_correction
int w
Definition: utils.h:81

Variable Documentation

§ zlut_bias_correction

CImageData* QueuedTracker::zlut_bias_correction
protected

Definition at line 388 of file QueuedTracker.h.