Skip to content

Commit e32f7c0

Browse files
I think implement downsample factor
1 parent 270d8e3 commit e32f7c0

1 file changed

Lines changed: 24 additions & 17 deletions

File tree

src/main/java/qupath/ext/bioimageio/BioimageIoPane.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.slf4j.LoggerFactory;
3030
import qupath.bioimageio.spec.Model;
3131
import qupath.bioimageio.spec.tensor.axes.Axes;
32-
import qupath.bioimageio.spec.tensor.axes.Axis;
3332
import qupath.bioimageio.spec.tensor.axes.SpaceAxes;
3433
import qupath.fx.dialogs.Dialogs;
3534
import qupath.lib.gui.QuPathGUI;
@@ -41,6 +40,10 @@
4140
import qupath.opencv.ml.BioimageIoTools;
4241
import qupath.opencv.ml.PatchClassifierParams;
4342

43+
44+
import static qupath.fx.utils.FXUtils.resetSpinnerNullToPrevious;
45+
46+
4447
public class BioimageIoPane extends BorderPane {
4548
private final QuPathGUI qupath;
4649
private static final Logger logger = LoggerFactory.getLogger(BioimageIoPane.class);
@@ -147,12 +150,25 @@ private void configurePixelSize(Model model) {
147150
int yind = axString.indexOf("y");
148151
double xsize=0, ysize=0;
149152
// if pixel size specified then use pixel size spinners
153+
PixelCalibration pixelCal = null;
150154
if (xind != -1 && yind != -1) {
151-
xsize = getSpaceAxisSize(axes[xind]);
152-
ysize = getSpaceAxisSize(axes[yind]);
155+
if (axes[xind] instanceof SpaceAxes.SpaceAxis spaceAxisX && axes[yind] instanceof SpaceAxes.SpaceAxis spaceAxisY) {
156+
if (spaceAxisX.getUnit() != SpaceAxes.SpaceUnit.MICROMETER || spaceAxisY.getUnit() != SpaceAxes.SpaceUnit.MICROMETER) {
157+
logger.warn("Unsupported space unit {}, ignoring", spaceAxisX.getUnit());
158+
pixelCal = PixelCalibration.getDefaultInstance();
159+
} else {
160+
xsize = spaceAxisX.getScale();
161+
ysize = spaceAxisY.getScale();
162+
pixelCal = new PixelCalibration.Builder().pixelSizeMicrons(xsize, ysize).build();
163+
}
164+
} else {
165+
logger.warn("X or Y axis is not a space axis and therefore has unknown pixel size");
166+
}
167+
} else {
168+
pixelCal = PixelCalibration.getDefaultInstance();
153169
}
154-
// if pixel size is not specified, remove the pixel size box
155-
if (xsize == 0 || ysize == 0) {
170+
// if pixel calibration is default, remove the pixel size box
171+
if (pixelCal == PixelCalibration.getDefaultInstance()) {
156172
resolutionSectionBox.getChildren().remove(pixelSizeBox);
157173
} else {
158174
// if using pixel size, we're not using downsample
@@ -180,23 +196,14 @@ public Double fromString(String string) {
180196
});
181197
pixelSizeSpinner.valueProperty().addListener((v, o, n) -> {
182198
var pcBuilder = new PixelCalibration.Builder()
183-
.pixelSizeMicrons(n.doubleValue(), n.doubleValue());
199+
.pixelSizeMicrons(n, n);
184200
builder.inputResolution(pcBuilder.build());
185201
});
186-
187202
downsampleSpinner.valueProperty().addListener((v, o, n) -> {
188203
builder.inputResolution(PixelCalibration.getDefaultInstance(), n);
189204
});
190-
}
191-
192-
private double getSpaceAxisSize(Axis axis) {
193-
if (axis instanceof SpaceAxes.SpaceAxis spaceAxis) {
194-
if (spaceAxis.getUnit() != SpaceAxes.SpaceUnit.MICROMETER) {
195-
logger.warn("Unknown space unit {}", spaceAxis.getUnit());
196-
}
197-
return spaceAxis.getScale();
198-
}
199-
return 0;
205+
resetSpinnerNullToPrevious(downsampleSpinner);
206+
resetSpinnerNullToPrevious(pixelSizeSpinner);
200207
}
201208

202209
private void configureOutputClasses() {

0 commit comments

Comments
 (0)