Skip to content

Commit b0c1b3a

Browse files
Merge pull request #84 from JaneliaSciComp/missing-connections
Fix issue with disconnected views
2 parents 46d14cd + e53865c commit b0c1b3a

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

src/main/java/net/preibisch/mvrecon/process/fusion/intensity/IntensityMatcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,16 +308,16 @@ public List<CoefficientMatch> match(
308308
}
309309
flatCandidates.flip();
310310

311+
final List<PointMatch> reducedMatches = new ArrayList<>();
311312
if (flatCandidates.size() > minNumCandidates) {
312-
final List<PointMatch> reducedMatches = new ArrayList<>();
313313
filter.filter(flatCandidates, reducedMatches);
314314
if (reducedMatches.isEmpty()) {
315315
LOG.debug("({}, {}) not matched", r1.index, r2.index);
316316
} else {
317317
LOG.debug("({}, {}) matched: {}", r1.index, r2.index, filter.model());
318-
coefficientMatches.add(new CoefficientMatch(r1.index, r2.index, flatCandidates.size(), reducedMatches));
319318
}
320319
}
320+
coefficientMatches.add(new CoefficientMatch(r1.index, r2.index, flatCandidates.size(), reducedMatches));
321321
}
322322
return coefficientMatches;
323323
}

src/main/java/net/preibisch/mvrecon/process/fusion/intensity/IntensitySolver.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package net.preibisch.mvrecon.process.fusion.intensity;
2424

2525
import java.util.ArrayList;
26+
import java.util.Collection;
2627
import java.util.Collections;
2728
import java.util.List;
2829
import java.util.Map;
@@ -37,7 +38,6 @@
3738
import mpicbg.spim.data.sequence.ViewId;
3839
import net.imglib2.iterator.IntervalIterator;
3940
import net.preibisch.mvrecon.process.fusion.intensity.IntensityMatcher.CoefficientMatch;
40-
import net.preibisch.mvrecon.process.fusion.intensity.mpicbg.FastAffineModel1D;
4141
import net.preibisch.mvrecon.process.fusion.intensity.mpicbg.Point1D;
4242
import net.preibisch.mvrecon.process.fusion.intensity.mpicbg.PointMatch1D;
4343
import org.slf4j.Logger;
@@ -70,12 +70,23 @@ public void connect(
7070
if (coefficientMatches.isEmpty())
7171
return;
7272

73+
final boolean disconnected = coefficientMatches.stream()
74+
.map(CoefficientMatch::matches)
75+
.allMatch(Collection::isEmpty);
76+
7377
final IntensityTile p1IntensityTile = getIntensityTile(p1);
7478
final IntensityTile p2IntensityTile = getIntensityTile(p2);
7579
for (final CoefficientMatch coefficientMatch : coefficientMatches) {
7680
final Tile<?> st1 = p1IntensityTile.getSubTileAtIndex(coefficientMatch.coeff1());
7781
final Tile<?> st2 = p2IntensityTile.getSubTileAtIndex(coefficientMatch.coeff2());
78-
st1.connect(st2, coefficientMatch.matches());
82+
if (disconnected) {
83+
identityConnect(st1, st2, 1E-6);
84+
} else {
85+
final Collection<PointMatch> matches = coefficientMatch.matches();
86+
if (!matches.isEmpty()) {
87+
st1.connect(st2, matches);
88+
}
89+
}
7990
}
8091
p1IntensityTile.connectTo(p2IntensityTile);
8192
}
@@ -177,11 +188,21 @@ private static void equilibrateIntensity(final Tile<?> coefficientTile,
177188
coefficientTile.connect(equilibrationTile, Collections.singletonList(eqMatch));
178189
}
179190

180-
private static void identityConnect(final Tile<?> t1, final Tile<?> t2) {
191+
// TODO: Here we use (0 -> 0) and (1 -> 1) as point matches that represent
192+
// the identity transform. This made sense in Render (where this code
193+
// is copied from), because image intensities are normalized to [0,1].
194+
// However, we don't normalize intensities in multiview-reconstruciton,
195+
// so probably something else should be used here? Dataset min/max?
196+
// Tile min/max?
197+
private static void identityConnect(final Tile<?> t1, final Tile<?> t2, final double weight) {
181198
final ArrayList<PointMatch> matches = new ArrayList<>();
182-
matches.add(new PointMatch1D(new Point1D(0), new Point1D(0)));
183-
matches.add(new PointMatch1D(new Point1D(1), new Point1D(1)));
199+
matches.add(new PointMatch1D(new Point1D(0), new Point1D(0), weight));
200+
matches.add(new PointMatch1D(new Point1D(1), new Point1D(1), weight));
184201
t1.connect(t2, matches);
185202
}
186203

204+
private static void identityConnect(final Tile<?> t1, final Tile<?> t2) {
205+
identityConnect(t1, t2, 1.0);
206+
}
207+
187208
}

0 commit comments

Comments
 (0)