Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Full image annotation for Sparse training image throws errors for detections #1443

Open
Ross-AC opened this issue Dec 20, 2023 · 2 comments
Open
Labels

Comments

@Ross-AC
Copy link

Ross-AC commented Dec 20, 2023

Bug report

Describe the bug
When optimising perameters for a project by creating a sparse composite image from different image entries. When running cell detection using script editor, errors are generated for the final tiles IF the entire shape is not a perfect rectangle. If using stardist script for cell detection, errors are generated before any detections.

Can avoid both by manual annotation with a polygon tool to follow image boundaries -> so not sure if a crucial bug. Carried over from last release to v5.

To Reproduce
Steps to reproduce the behavior:

  1. Ctl+Shift+A
  2. Run cell detection as a script:
setImageType('FLUORESCENCE');
selectAnnotations();
runPlugin('qupath.imagej.detect.cells.WatershedCellDetection', '{"detectionImage":"DAPI","requestedPixelSizeMicrons":0.1,"backgroundRadiusMicrons":4.0,"backgroundByReconstruction":true,"medianRadiusMicrons":1.0,"sigmaMicrons":2.5,"minAreaMicrons":11.0,"maxAreaMicrons":400.0,"threshold":1000.0,"watershedPostProcess":true,"cellExpansionMicrons":5.0,"includeNuclei":true,"smoothBoundaries":true,"makeMeasurements":true}')
  1. Error:
ERROR: Error running plugin: java.lang.NullPointerException: Cannot invoke "java.awt.image.BufferedImage.getSampleModel()" because "img" is null
java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot invoke "java.awt.image.BufferedImage.getSampleModel()" because "img" is null
    at java.base/java.util.concurrent.FutureTask.report(Unknown Source)
    at java.base/java.util.concurrent.FutureTask.get(Unknown Source)
    at qupath.lib.plugins.AbstractTaskRunner.awaitCompletion(AbstractTaskRunner.java:147)
    at qupath.lib.plugins.AbstractTaskRunner.runTasks(AbstractTaskRunner.java:117)
    at qupath.lib.gui.TaskRunnerFX.runTasks(TaskRunnerFX.java:106)
    at qupath.lib.plugins.AbstractPlugin.runPlugin(AbstractPlugin.java:147)
    at qupath.lib.gui.QuPathGUI.runPlugin(QuPathGUI.java:2245)
    at qupath.lib.gui.scripting.QPEx.runPlugin(QPEx.java:248)
    at qupath.lib.gui.scripting.QPEx.runPlugin(QPEx.java:270)
    at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
    at QuPathScript.run(QuPathScript:4)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:331)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:161)
    at qupath.lib.gui.scripting.languages.DefaultScriptLanguage.execute(DefaultScriptLanguage.java:234)
    at qupath.lib.gui.scripting.DefaultScriptEditor.executeScript(DefaultScriptEditor.java:1166)
    at qupath.lib.gui.scripting.DefaultScriptEditor$3.run(DefaultScriptEditor.java:1534)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)
  Caused by Cannot invoke "java.awt.image.BufferedImage.getSampleModel()" because "img" is null        at qupath.imagej.tools.IJTools.convertToUncalibratedImagePlus(IJTools.java:791)
        at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:864)
        at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:902)
        at qupath.imagej.detect.cells.WatershedCellDetection$CellDetector.runDetection(WatershedCellDetection.java:216)
        at qupath.lib.plugins.DetectionPluginTools$DetectionRunnable.run(DetectionPluginTools.java:112)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
  1. Error repeats per tile

Expected behavior
To recognise bounds or the image in "create full image annotation" command, excluding what the error is calling "null" regions

Screenshots
image

image

Desktop (please complete the following information):

  • OS: Windows 11
  • QuPath Version: 0.5.0

Additional context
Same issue was present in previous version (0.4.4)

@Ross-AC Ross-AC added the bug label Dec 20, 2023
@Ross-AC
Copy link
Author

Ross-AC commented Dec 20, 2023

Quick addition. Defining an area using a polygon no longer works for the in-built detection, just when running a stardist script:

image

ERROR: Error processing Polygon (7616, 10604, 2099, 1863)
java.io.IOException: java.lang.InterruptedException
    at qupath.lib.images.servers.bioformats.BioFormatsImageServer.readTile(BioFormatsImageServer.java:911)
    at qupath.lib.images.servers.AbstractTileableImageServer.lambda$prerequestTiles$2(AbstractTileableImageServer.java:462)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at qupath.lib.images.servers.AbstractTileableImageServer.prerequestTiles(AbstractTileableImageServer.java:464)
    at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:295)
    at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
    at qupath.lib.images.servers.CroppedImageServer.readRegion(CroppedImageServer.java:90)
    at qupath.lib.images.servers.CroppedImageServer.readRegion(CroppedImageServer.java:39)
    at qupath.lib.images.servers.SparseImageServer.readTile(SparseImageServer.java:265)
    at qupath.lib.images.servers.AbstractTileableImageServer.lambda$prerequestTiles$2(AbstractTileableImageServer.java:462)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at qupath.lib.images.servers.AbstractTileableImageServer.prerequestTiles(AbstractTileableImageServer.java:464)
    at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:295)
    at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
    at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:863)
    at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:902)
    at qupath.imagej.detect.cells.WatershedCellDetection$CellDetector.runDetection(WatershedCellDetection.java:216)
    at qupath.lib.plugins.DetectionPluginTools$DetectionRunnable.run(DetectionPluginTools.java:112)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)
  Caused by null        at java.base/java.util.concurrent.locks.ReentrantLock$Sync.lockInterruptibly(Unknown Source)
        at java.base/java.util.concurrent.locks.ReentrantLock.lockInterruptibly(Unknown Source)
        at java.base/java.util.concurrent.ArrayBlockingQueue.put(Unknown Source)
        at qupath.lib.images.servers.bioformats.BioFormatsImageServer$ReaderPool.openImage(BioFormatsImageServer.java:1411)
        at qupath.lib.images.servers.bioformats.BioFormatsImageServer.readTile(BioFormatsImageServer.java:909)
        at qupath.lib.images.servers.AbstractTileableImageServer.lambda$prerequestTiles$2(AbstractTileableImageServer.java:462)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at qupath.lib.images.servers.AbstractTileableImageServer.prerequestTiles(AbstractTileableImageServer.java:464)
        at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:295)
        at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
        at qupath.lib.images.servers.CroppedImageServer.readRegion(CroppedImageServer.java:90)
        at qupath.lib.images.servers.CroppedImageServer.readRegion(CroppedImageServer.java:39)
        at qupath.lib.images.servers.SparseImageServer.readTile(SparseImageServer.java:265)
        at qupath.lib.images.servers.AbstractTileableImageServer.lambda$prerequestTiles$2(AbstractTileableImageServer.java:462)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at qupath.lib.images.servers.AbstractTileableImageServer.prerequestTiles(AbstractTileableImageServer.java:464)
        at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:295)
        at qupath.lib.images.servers.AbstractTileableImageServer.readRegion(AbstractTileableImageServer.java:60)
        at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:863)
        at qupath.imagej.tools.IJTools.convertToImagePlus(IJTools.java:902)
        at qupath.imagej.detect.cells.WatershedCellDetection$CellDetector.runDetection(WatershedCellDetection.java:216)
        at qupath.lib.plugins.DetectionPluginTools$DetectionRunnable.run(DetectionPluginTools.java:112)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

@Rylern
Copy link
Contributor

Rylern commented Feb 12, 2024

#1465 should fix the first issue.

About:

Quick addition. Defining an area using a polygon no longer works for the in-built detection, just when running a stardist script:

I wasn't able to reproduce the error. Does it happens on every run? Is it possible to share the project throwing the error?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants