Qupath 0.2.0 M11 - Interactive image aligment issue

Dear all,

Interactive image alignment was implemented in QuPath 0.2.0 M8, however due to the most recent NEUBIAS webinar on Qupath, I have updated my Qupath version (as I am looking forward to try out the new features!). However, as I am working now on M11 I get an error everytime I perform image alignment, using as alignment type area annotations. Does anyone know a way to fix it?

My main goal is to duplicate ROIs from one slide to another, to ensure these are identical as I want to investigate certain lesion types. I would also appreciate it if someone knows an easier way to do that.

Thank you very much!

PS. This appears in my Log:
“INFO: Bio-Formats version 6.5.0
INFO: Loaded extension Bio-Formats server options (Bio-Formats 6.5.0) (27 ms)
INFO: Loaded extension Experimental commands (1 ms)
INFO: Loaded extension Experimental commands (38 ms)
INFO: Loaded extension ImageJ extension (47 ms)
INFO: Loaded extension JPen extension (17 ms)
INFO: Loaded extension Rich script editor extension (260 ms)
INFO: Loaded extension SVG export commands (1 ms)
INFO: Loaded extension TensorFlow extension (0 ms)
INFO: OpenSlide version 3.4.1
INFO: Selected style: null
INFO: Performing update check…
INFO: Starting QuPath with parameters:
INFO: Current version 0.2.0-m12.SNAPSHOT, latest stable release 0.2.0-m11 - nothing to update
INFO: Project set to Project: Stardist trial-project
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: Transformation result: 0.9999997375693737
ERROR: QuPath exception
at qupath.lib.color.ColorModelFactory.createIndexedColorModel(ColorModelFactory.java:94)
at qupath.lib.images.servers.LabeledImageServer.(LabeledImageServer.java:137)
at qupath.lib.images.servers.LabeledImageServer$Builder.build(LabeledImageServer.java:420)
at qupath.lib.gui.align.ImageAlignmentPane.autoAlign(ImageAlignmentPane.java:714)
at qupath.lib.gui.align.ImageAlignmentPane.lambda$new$6(ImageAlignmentPane.java:300)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8885)
at javafx.scene.control.Button.fire(Button.java:203)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3890)
at javafx.scene.Scene.processMouseEvent(Scene.java:1885)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2618)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
ERROR: QuPath exception
at qupath.lib.color.ColorModelFactory.createIndexedColorModel(ColorModelFactory.java:94)
at qupath.lib.images.servers.LabeledImageServer.(LabeledImageServer.java:137)
at qupath.lib.images.servers.LabeledImageServer$Builder.build(LabeledImageServer.java:420)
at qupath.lib.gui.align.ImageAlignmentPane.autoAlign(ImageAlignmentPane.java:714)
at qupath.lib.gui.align.ImageAlignmentPane.lambda$new$6(ImageAlignmentPane.java:300)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8885)
at javafx.scene.control.Button.fire(Button.java:203)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3890)
at javafx.scene.Scene.processMouseEvent(Scene.java:1885)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2618)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: 1 object(s) deleted with descendants
INFO: 1 object(s) deleted
INFO: Writing object hierarchy with 1 object(s)…
INFO: Image data written in 0.00 seconds
INFO: Writing project to C:\Data\Gemma\Stardist trial\project.qpproj
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: Writing object hierarchy with 108 object(s)…
INFO: Image data written in 0.00 seconds
INFO: Writing project to C:\Data\Gemma\Stardist trial\project.qpproj
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
ERROR: QuPath exception
at qupath.lib.color.ColorModelFactory.createIndexedColorModel(ColorModelFactory.java:94)
at qupath.lib.images.servers.LabeledImageServer.(LabeledImageServer.java:137)
at qupath.lib.images.servers.LabeledImageServer$Builder.build(LabeledImageServer.java:420)
at qupath.lib.gui.align.ImageAlignmentPane.autoAlign(ImageAlignmentPane.java:714)
at qupath.lib.gui.align.ImageAlignmentPane.lambda$new$6(ImageAlignmentPane.java:300)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8885)
at javafx.scene.control.Button.fire(Button.java:203)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3890)
at javafx.scene.Scene.processMouseEvent(Scene.java:1885)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2618)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
WARN: Point annotation alignment not yet implemented!
ERROR: Align images: No points found for either image!
INFO: Transformation result: 0.9999997375693737
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_1S_1.mrxs
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D1M_2S_1.mrxs
INFO: Writing project to C:\Data\Gemma\Stardist trial\project.qpproj
INFO: Image data set to null
INFO: Project set to Project: C338C-project
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_B10M_20S_1.mrxs
INFO: Requesting region for stain vector editing:
INFO: Writing object hierarchy with 0 object(s)…
INFO: Image data written in 0.00 seconds
INFO: Writing project to C:\Data\Gemma\C338C\project.qpproj
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D4M_12S_1.mrxs
INFO: Requesting region for stain vector editing:
INFO: 1 region detected (processing time: 0.57 seconds)
INFO: Processing complete in 0.57 seconds
INFO: Completed!
INFO:
qupath.imagej.detect.tissue.SimpleTissueDetection2 {“threshold”: 242, “requestedPixelSizeMicrons”: 20.0, “minAreaMicrons”: 1000000.0, “maxHoleAreaMicrons”: 1000000.0, “darkBackground”: false, “smoothImage”: true, “medianCleanup”: true, “dilateBoundaries”: false, “smoothCoordinates”: true, “excludeOnBoundary”: false, “singleAnnotation”: true}
INFO: 1 region detected (processing time: 0.33 seconds)
INFO: Processing complete in 0.33 seconds
INFO: Completed!
INFO:
qupath.imagej.detect.tissue.SimpleTissueDetection2 {“threshold”: 245, “requestedPixelSizeMicrons”: 20.0, “minAreaMicrons”: 1000000.0, “maxHoleAreaMicrons”: 1000000.0, “darkBackground”: false, “smoothImage”: true, “medianCleanup”: true, “dilateBoundaries”: false, “smoothCoordinates”: true, “excludeOnBoundary”: false, “singleAnnotation”: true}
INFO: 1 region detected (processing time: 0.30 seconds)
INFO: Processing complete in 0.30 seconds
INFO: Completed!
INFO:
qupath.imagej.detect.tissue.SimpleTissueDetection2 {“threshold”: 245, “requestedPixelSizeMicrons”: 20.0, “minAreaMicrons”: 1000000.0, “maxHoleAreaMicrons”: 1000000.0, “darkBackground”: false, “smoothImage”: true, “medianCleanup”: true, “dilateBoundaries”: false, “smoothCoordinates”: true, “excludeOnBoundary”: true, “singleAnnotation”: true}
INFO: Writing object hierarchy with 1 object(s)…
INFO: Image data written in 0.00 seconds
INFO: Writing project to C:\Data\Gemma\C338C\project.qpproj
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_B10M_20S_1.mrxs
INFO: 1 region detected (processing time: 0.37 seconds)
INFO: Processing complete in 0.38 seconds
INFO: Completed!
INFO:
qupath.imagej.detect.tissue.SimpleTissueDetection2 {“threshold”: 241, “requestedPixelSizeMicrons”: 20.0, “minAreaMicrons”: 10000.0, “maxHoleAreaMicrons”: 1000000.0, “darkBackground”: false, “smoothImage”: true, “medianCleanup”: true, “dilateBoundaries”: false, “smoothCoordinates”: true, “excludeOnBoundary”: false, “singleAnnotation”: true}
INFO: Writing object hierarchy with 2 object(s)…
INFO: Image data written in 0.00 seconds
INFO: Writing project to C:\Data\Gemma\C338C\project.qpproj
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_D4M_12S_1.mrxs
INFO: Transformation result: 0.7796889989431203
INFO: Transformation result: 0.6789610978561769
ERROR: QuPath exception
at qupath.lib.color.ColorModelFactory.createIndexedColorModel(ColorModelFactory.java:94)
at qupath.lib.images.servers.LabeledImageServer.(LabeledImageServer.java:137)
at qupath.lib.images.servers.LabeledImageServer$Builder.build(LabeledImageServer.java:420)
at qupath.lib.gui.align.ImageAlignmentPane.autoAlign(ImageAlignmentPane.java:714)
at qupath.lib.gui.align.ImageAlignmentPane.lambda$new$6(ImageAlignmentPane.java:300)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8885)
at javafx.scene.control.Button.fire(Button.java:203)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3890)
at javafx.scene.Scene.processMouseEvent(Scene.java:1885)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2618)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
INFO: Image data set to ImageData: Brightfield (H-DAB), DigitalSlide_B10M_20S_1.mrxs
INFO: Transformation result: 0.6476928625166415
ERROR: QuPath exception
at qupath.lib.color.ColorModelFactory.createIndexedColorModel(ColorModelFactory.java:94)
at qupath.lib.images.servers.LabeledImageServer.(LabeledImageServer.java:137)
at qupath.lib.images.servers.LabeledImageServer$Builder.build(LabeledImageServer.java:420)
at qupath.lib.gui.align.ImageAlignmentPane.autoAlign(ImageAlignmentPane.java:714)
at qupath.lib.gui.align.ImageAlignmentPane.lambda$new$6(ImageAlignmentPane.java:300)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8885)
at javafx.scene.control.Button.fire(Button.java:203)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3890)
at javafx.scene.Scene.processMouseEvent(Scene.java:1885)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2618)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)”

This is a bug, but a workaround may be to assign a classification to the annotations first.

Thank you for the fast reply! Very much appreciated, but the bug was not solved by assigning classifications to the annotations unfortunately…
Normally what I do is 1) pre-processing > simple tissue detection in both images, 2) draw ROI in Luxol-Fast blue (where I observe white matter loss) and 3) use the interactive alignment to copy this ROI in the exact same spot in other stainings such as GFAP, etc.
Now, as suggested, before doing step 3 I assigned a classification to all the annotations.
I have also tried to do it semi-automatically from affine transform, image intensity & use shift to fit exactly both images. However, in this newer version it seems I cannot just “apply” the changes as in the previous version, any idea what might be the problem?
Thank you very much!!

Ah, I didn’t have a chance to test it when writing my last post. I think this commit will fix the issue (well, at least not fail so badly): https://github.com/petebankhead/qupath/commit/69faca69b8ee39b27153f236e5433be04f21980c

Thank you! This commit fixes the bug with the interactive alignment. However, the transformation still needs to be applied via scripting, am I right?
I am just wondering since in the previous version it was already possible to do directly from the alignment panel. Thanks.

Sorry, I’ve no clue - even though I wrote it, I almost never use the command and have had no time to work on it properly. I would have removed it for this reason, but I understand even in its rough state it is being useful somehow…

I recall making some changes weeks/months ago (generally at the behest of @Mike_Nelson, @smcardle or @Zbigniew_Mikulski) but I have no clear memory of precisely what and when.

When I tried with m8 just now, I got the same error that you’ve reported and I don’t see anything obviously different in the behavior. What exactly do you mean by ‘“apply” the changes’?

2 Likes

Indeed you are right, now the bug also appears on m8.
I meant that from the Interactive image alignment interface it was possible to directly update the transformation to other images, but somehow it is not possible anymore… I was very happy with the feature as for my project I have 9 different stainings performed on the same region, so it was a very nice solution for me to recall exactly the same ROIs through different images in a simple&fast way.
But I will check the script/changes you mention, I think these will also work nicely as I see multiple images can be done at once. Thank you very much for your help.

Happy to claim partial responsibility for Interactive image alignment being still with us. :slightly_smiling_face:

I never knew it was possible to directly apply the transformation via the Image overlay alignment window, but I think your use case is similar to the problem @smcardle and @Mike_Nelson solved for us with these posts Calling Image Alignment function from a script
QuPath- Multiple Image Alignment and Object Transfer

4 Likes

Hmmm, I still don’t understand. I think of the command as purely for visualization, and to help figure out an affine transformation that might be used elsewhere (with currently means in a script).

I only remember adding features, not removing any, but I’ve been changing so much in recent months that I don’t know any more. You should be able to copy & paste to the transformation text area (via right-click, then the Update button)… in case that helps with applying the same transform across images.

2 Likes

Yes it does help! Thank you very much both of you.
@Zbigniew_Mikulski I think image alignment is a great tool indeed :slight_smile:, I am happy it is still with us!
Thanks @petebankhead for all your help :slight_smile:

2 Likes

Hi everyone!

I would like to evaluate the staining of two different proteins on some specific cells (in different slides).

I found the tool “Interactive image alignment” which looks perfectly for what I need. But, I found out that the tissue on my slides are not perfectly aligned so the tool is not working well. Otherwise, I’m pretty sure it has some way to overcome this…

Someone knows how I can solve this?

Thanks everyone for all the help!
Bianca.

I don’t think that will work for sequential slices, and I do not recommend trying for most cell types, as there is only a percentage chance that a cell in one slice will show up in a second slice. If you plan your experiment so that you do not expect the same cell types to be located in sequential slices, that type of analysis can be more useful.

See the description here of a project that takes this into account by @Mark_Zaidi : Batch Image Alignment

You might also be able to better handle tissue changes from sequential slices as @smcardle did here.
Automatically align and rotate images

2 Likes

Sequential slices (even as thin as 4 um) do not guarantee that the same cell will be present across sections, even with a perfect alignment. If your cell type is characterized by two or more markers, those markers must be present on the same section.

However, if you’re aiming to measure colocalization between a cell-specific marker and a regional marker (hypoxia, tumour/stroma regions, etc), distributing stains across serial sections could work, assuming the thickness of your section is small enough that the regional distribution of the marker doesn’t change, and your histology is free of any major tissue fold artifacts. Furthermore, if your two markers of interest are expected to be in close proximity to one another but not necessarily colocalized on the cellular level, you might want to consider a distance analysis between the two cell types.

2 Likes

Thank you so much @Research_Associate and @Mark_Zaidi!

I’ll try and give you a feedback…

Have a great week you both!

1 Like