Skip to content

Commit 010510b

Browse files
authored
Merge pull request #558 from imagej/decon_iteration
Decon iteration
2 parents c63e09e + f41edc3 commit 010510b

File tree

12 files changed

+286
-126
lines changed

12 files changed

+286
-126
lines changed

src/main/java/net/imagej/ops/deconvolve/DeconvolveNamespace.java

Lines changed: 60 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ RandomAccessibleInterval<O> richardsonLucy(
141141
}
142142

143143
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyF.class)
144-
public <
145-
I extends RealType<I>, O extends RealType<O> & NativeType<O>, K extends RealType<K>, C extends ComplexType<C>>
144+
public <I extends RealType<I>, O extends RealType<O> & NativeType<O>, K extends RealType<K>, C extends ComplexType<C>>
146145
RandomAccessibleInterval<O> richardsonLucy(
147146
final RandomAccessibleInterval<I> in,
148147
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -159,8 +158,7 @@ RandomAccessibleInterval<O> richardsonLucy(
159158
}
160159

161160
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyF.class)
162-
public <
163-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
161+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
164162
RandomAccessibleInterval<O> richardsonLucy(
165163
final RandomAccessibleInterval<I> in,
166164
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -178,8 +176,7 @@ RandomAccessibleInterval<O> richardsonLucy(
178176
}
179177

180178
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyF.class)
181-
public <
182-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
179+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
183180
RandomAccessibleInterval<O> richardsonLucy(
184181
final RandomAccessibleInterval<I> in,
185182
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -199,123 +196,141 @@ RandomAccessibleInterval<O> richardsonLucy(
199196
}
200197

201198
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
202-
public <
203-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
199+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
200+
RandomAccessibleInterval<O> richardsonLucy(
201+
final RandomAccessibleInterval<O> out,
202+
final RandomAccessibleInterval<I> in1,
203+
final RandomAccessibleInterval<K> in2, final int maxIterations)
204+
{
205+
@SuppressWarnings("unchecked")
206+
final RandomAccessibleInterval<O> result =
207+
(RandomAccessibleInterval<O>) ops().run(
208+
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
209+
maxIterations);
210+
return result;
211+
}
212+
213+
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
214+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
215+
RandomAccessibleInterval<O> richardsonLucy(
216+
final RandomAccessibleInterval<O> out,
217+
final RandomAccessibleInterval<I> in1,
218+
final RandomAccessibleInterval<K> in2,
219+
final RandomAccessibleInterval<C> fftInput, final int maxIterations)
220+
{
221+
@SuppressWarnings("unchecked")
222+
final RandomAccessibleInterval<O> result =
223+
(RandomAccessibleInterval<O>) ops().run(
224+
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
225+
fftInput, maxIterations);
226+
return result;
227+
}
228+
229+
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
230+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
204231
RandomAccessibleInterval<O> richardsonLucy(
205232
final RandomAccessibleInterval<O> out,
206233
final RandomAccessibleInterval<I> in1,
207234
final RandomAccessibleInterval<K> in2,
208235
final RandomAccessibleInterval<C> fftInput,
209-
final RandomAccessibleInterval<C> fftKernel, final int maxIterations,
210-
final Interval imgConvolutionInterval)
236+
final RandomAccessibleInterval<C> fftKernel, final int maxIterations)
211237
{
212238
@SuppressWarnings("unchecked")
213239
final RandomAccessibleInterval<O> result =
214240
(RandomAccessibleInterval<O>) ops().run(
215241
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
216-
fftInput, fftKernel, maxIterations, imgConvolutionInterval);
242+
fftInput, fftKernel, maxIterations);
217243
return result;
218244
}
219245

220246
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
221-
public <
222-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
247+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
223248
RandomAccessibleInterval<O> richardsonLucy(
224249
final RandomAccessibleInterval<O> out,
225250
final RandomAccessibleInterval<I> in1,
226251
final RandomAccessibleInterval<K> in2,
227252
final RandomAccessibleInterval<C> fftInput,
228253
final RandomAccessibleInterval<C> fftKernel,
229-
final boolean performInputFFT, final int maxIterations,
230-
final Interval imgConvolutionInterval)
254+
final boolean performInputFFT, final int maxIterations)
231255
{
232256
@SuppressWarnings("unchecked")
233257
final RandomAccessibleInterval<O> result =
234258
(RandomAccessibleInterval<O>) ops().run(
235259
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
236-
fftInput, fftKernel, performInputFFT, maxIterations,
237-
imgConvolutionInterval);
260+
fftInput, fftKernel, performInputFFT, maxIterations);
238261
return result;
239262
}
240263

241264
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
242-
public <
243-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
265+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
244266
RandomAccessibleInterval<O> richardsonLucy(
245267
final RandomAccessibleInterval<O> out,
246268
final RandomAccessibleInterval<I> in1,
247269
final RandomAccessibleInterval<K> in2,
248270
final RandomAccessibleInterval<C> fftInput,
249271
final RandomAccessibleInterval<C> fftKernel,
250272
final boolean performInputFFT, final boolean performKernelFFT,
251-
final int maxIterations, final Interval imgConvolutionInterval)
273+
final int maxIterations)
252274
{
253275
@SuppressWarnings("unchecked")
254276
final RandomAccessibleInterval<O> result =
255277
(RandomAccessibleInterval<O>) ops().run(
256278
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
257-
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations,
258-
imgConvolutionInterval);
279+
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations);
259280
return result;
260281
}
261282

262283
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
263-
public <
264-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
284+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
265285
RandomAccessibleInterval<O> richardsonLucy(
266286
final RandomAccessibleInterval<O> out,
267287
final RandomAccessibleInterval<I> in1,
268288
final RandomAccessibleInterval<K> in2,
269289
final RandomAccessibleInterval<C> fftInput,
270290
final RandomAccessibleInterval<C> fftKernel,
271291
final boolean performInputFFT, final boolean performKernelFFT,
272-
final int maxIterations, final Interval imgConvolutionInterval,
273-
final UnaryInplaceOp<O, O> accelerator)
292+
final int maxIterations, final UnaryInplaceOp<O, O> accelerator)
274293
{
275294
@SuppressWarnings("unchecked")
276295
final RandomAccessibleInterval<O> result =
277296
(RandomAccessibleInterval<O>) ops().run(
278297
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
279298
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations,
280-
imgConvolutionInterval, accelerator);
299+
accelerator);
281300
return result;
282301
}
283302

284303
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
285-
public <
286-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
304+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
287305
RandomAccessibleInterval<O> richardsonLucy(
288306
final RandomAccessibleInterval<O> out,
289307
final RandomAccessibleInterval<I> in1,
290308
final RandomAccessibleInterval<K> in2,
291309
final RandomAccessibleInterval<C> fftInput,
292310
final RandomAccessibleInterval<C> fftKernel,
293311
final boolean performInputFFT, final boolean performKernelFFT,
294-
final int maxIterations, final Interval imgConvolutionInterval,
295-
final UnaryInplaceOp<O, O> accelerator,
312+
final int maxIterations, final UnaryInplaceOp<O, O> accelerator,
296313
final UnaryComputerOp<RandomAccessibleInterval<O>, RandomAccessibleInterval<O>> update)
297314
{
298315
@SuppressWarnings("unchecked")
299316
final RandomAccessibleInterval<O> result =
300317
(RandomAccessibleInterval<O>) ops().run(
301318
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
302319
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations,
303-
imgConvolutionInterval, accelerator, update);
320+
accelerator, update);
304321
return result;
305322
}
306323

307324
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
308-
public <
309-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
325+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
310326
RandomAccessibleInterval<O> richardsonLucy(
311327
final RandomAccessibleInterval<O> out,
312328
final RandomAccessibleInterval<I> in1,
313329
final RandomAccessibleInterval<K> in2,
314330
final RandomAccessibleInterval<C> fftInput,
315331
final RandomAccessibleInterval<C> fftKernel,
316332
final boolean performInputFFT, final boolean performKernelFFT,
317-
final int maxIterations, final Interval imgConvolutionInterval,
318-
final UnaryInplaceOp<O, O> accelerator,
333+
final int maxIterations, final UnaryInplaceOp<O, O> accelerator,
319334
final UnaryComputerOp<RandomAccessibleInterval<O>, RandomAccessibleInterval<O>> update,
320335
RandomAccessibleInterval<O> raiExtendedEstimate)
321336
{
@@ -324,22 +339,20 @@ RandomAccessibleInterval<O> richardsonLucy(
324339
(RandomAccessibleInterval<O>) ops().run(
325340
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
326341
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations,
327-
imgConvolutionInterval, accelerator, update, raiExtendedEstimate);
342+
accelerator, update, raiExtendedEstimate);
328343
return result;
329344
}
330345

331346
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyC.class)
332-
public <
333-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
347+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
334348
RandomAccessibleInterval<O> richardsonLucy(
335349
final RandomAccessibleInterval<O> out,
336350
final RandomAccessibleInterval<I> in1,
337351
final RandomAccessibleInterval<K> in2,
338352
final RandomAccessibleInterval<C> fftInput,
339353
final RandomAccessibleInterval<C> fftKernel,
340354
final boolean performInputFFT, final boolean performKernelFFT,
341-
final int maxIterations, final Interval imgConvolutionInterval,
342-
final UnaryInplaceOp<O, O> accelerator,
355+
final int maxIterations, final UnaryInplaceOp<O, O> accelerator,
343356
final UnaryComputerOp<RandomAccessibleInterval<O>, RandomAccessibleInterval<O>> update,
344357
RandomAccessibleInterval<O> raiExtendedEstimate,
345358
final ArrayList<UnaryInplaceOp<RandomAccessibleInterval<O>, RandomAccessibleInterval<O>>> iterativePostProcessing)
@@ -349,8 +362,7 @@ RandomAccessibleInterval<O> richardsonLucy(
349362
(RandomAccessibleInterval<O>) ops().run(
350363
net.imagej.ops.deconvolve.RichardsonLucyC.class, out, in1, in2,
351364
fftInput, fftKernel, performInputFFT, performKernelFFT, maxIterations,
352-
imgConvolutionInterval, accelerator, update, raiExtendedEstimate,
353-
iterativePostProcessing);
365+
accelerator, update, raiExtendedEstimate, iterativePostProcessing);
354366
return result;
355367
}
356368

@@ -439,8 +451,7 @@ RandomAccessibleInterval<O> richardsonLucyTV(
439451
}
440452

441453
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyTVF.class)
442-
public <
443-
I extends RealType<I>, O extends RealType<O> & NativeType<O>, K extends RealType<K>, C extends ComplexType<C>>
454+
public <I extends RealType<I>, O extends RealType<O> & NativeType<O>, K extends RealType<K>, C extends ComplexType<C>>
444455
RandomAccessibleInterval<O> richardsonLucyTV(
445456
final RandomAccessibleInterval<I> in,
446457
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -459,8 +470,7 @@ RandomAccessibleInterval<O> richardsonLucyTV(
459470
}
460471

461472
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyTVF.class)
462-
public <
463-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
473+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
464474
RandomAccessibleInterval<O> richardsonLucyTV(
465475
final RandomAccessibleInterval<I> in,
466476
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -479,8 +489,7 @@ RandomAccessibleInterval<O> richardsonLucyTV(
479489
}
480490

481491
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyTVF.class)
482-
public <
483-
I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
492+
public <I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
484493
RandomAccessibleInterval<O> richardsonLucyTV(
485494
final RandomAccessibleInterval<I> in,
486495
final RandomAccessibleInterval<K> kernel, final long[] borderSize,
@@ -502,8 +511,7 @@ RandomAccessibleInterval<O> richardsonLucyTV(
502511
// -- richardson lucy correction ops
503512

504513
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyCorrection.class)
505-
public <
506-
I extends RealType<I>, O extends RealType<O>, C extends ComplexType<C>>
514+
public <I extends RealType<I>, O extends RealType<O>, C extends ComplexType<C>>
507515
RandomAccessibleInterval<O> richardsonLucyCorrection(
508516
final RandomAccessibleInterval<O> out,
509517
final RandomAccessibleInterval<I> in1,
@@ -522,8 +530,7 @@ RandomAccessibleInterval<O> richardsonLucyCorrection(
522530
// -- richardson lucy update ops
523531

524532
@OpMethod(op = net.imagej.ops.deconvolve.RichardsonLucyTVUpdate.class)
525-
public <
526-
I extends RealType<I>, O extends RealType<O>, C extends ComplexType<C>>
533+
public <I extends RealType<I>, O extends RealType<O>, C extends ComplexType<C>>
527534
RandomAccessibleInterval<O> richardsonLucyUpdate(
528535
final RandomAccessibleInterval<O> out,
529536
final RandomAccessibleInterval<O> in, final float regularizationFactor)

src/main/java/net/imagej/ops/deconvolve/RichardsonLucyC.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060

6161
/**
6262
* Richardson Lucy algorithm for (@link RandomAccessibleInterval) (Lucy, L. B.
63-
* (1974).
64-
* "An iterative technique for the rectification of observed distributions".)
63+
* (1974). "An iterative technique for the rectification of observed
64+
* distributions".)
6565
*
6666
* @author Brian Northan
6767
* @param <I>
@@ -70,8 +70,7 @@
7070
* @param <C>
7171
*/
7272

73-
@Plugin(type = Ops.Deconvolve.RichardsonLucy.class,
74-
priority = Priority.HIGH)
73+
@Plugin(type = Ops.Deconvolve.RichardsonLucy.class, priority = Priority.HIGH)
7574
public class RichardsonLucyC<I extends RealType<I>, O extends RealType<O>, K extends RealType<K>, C extends ComplexType<C>>
7675
extends AbstractIterativeFFTFilterC<I, O, K, C> implements
7776
Ops.Deconvolve.RichardsonLucy
@@ -155,17 +154,27 @@ public void initialize() {
155154
public void compute(RandomAccessibleInterval<I> in,
156155
RandomAccessibleInterval<K> kernel, RandomAccessibleInterval<O> out)
157156
{
157+
// create FFT input memory if needed
158+
if (getFFTInput() == null) {
159+
setFFTInput(getCreateOp().calculate(in));
160+
}
161+
162+
// create FFT kernel memory if needed
163+
if (getFFTKernel() == null) {
164+
setFFTKernel(getCreateOp().calculate(in));
165+
}
166+
158167
// if a starting point for the estimate was not passed in then create
159168
// estimate Img and use the input as the starting point
160169
if (raiExtendedEstimate == null) {
161170

162-
raiExtendedEstimate = createOp.calculate(getImgConvolutionInterval());
171+
raiExtendedEstimate = createOp.calculate(in);
163172

164173
copyOp.compute(in, raiExtendedEstimate);
165174
}
166175

167176
// create image for the reblurred
168-
raiExtendedReblurred = createOp.calculate(getImgConvolutionInterval());
177+
raiExtendedReblurred = createOp.calculate(in);
169178

170179
// perform fft of psf
171180
fftKernelOp.compute(kernel, getFFTKernel());

0 commit comments

Comments
 (0)