Skip to content

Yen threshold differs from IJ1 #636

@hinerm

Description

@hinerm

Sample Data

When using Image > Adjust > Threshold... and selecting Yen to get the ImageJ 1.x threshold on a test image, we get:
image

Running a simple groovy script to threshold with ops

#@ OpService ops
#@ ImgPlus inputData

return ops.threshold().yen(inputData)

on the same image produces a much more aggressively thresholded image:
image

I don't think this is just a different in image type because if I convert the image to 8-bit and run the IJ1 auto threshold it's actually even more generous:

image

However I can produce a similar image in the IJ1 auto threshold by operating on the 16-bit image and turning up the minValue cutoff:
image

It looks like the issue is that Ops is computing the min/max for the histogram off the 16-bit input but then always converts the output to 8-bit, resulting in a too-high threshold.

First converting the test image to 8-bit and then running the above script results in a reasonable output:
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions