Using imagej-ops to crop images

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Using imagej-ops to crop images

Hadrien Mary
Hi,

I am having an issue with a script which crop an image with
imagej-ops. The error shows a "TODO" so I am not sure wether it's a
bug or it's something not supported right now.

-------------------------------
# @DatasetService data
# @ImageJ ij

from jarray import array

from net.imglib2 import FinalInterval
from net.imglib2.img.array import ArrayImgs
from net.imagej.axis import Axes
from net.imglib2.util import Intervals

fname = "/home/hadim/test_small.ome.tif"
ds = data.open(fname)

# Initiate dimensions
dims = {}
dim_names = [None] * 5
for ax in [Axes.X, Axes.Y, Axes.Z, Axes.TIME, Axes.CHANNEL]:
    ax_index = ds.dimensionIndex(ax)
    dim_names[ax_index] = str(ax)
    if int(ds.dimension(ax_index)) == 1:
        dims[str(ax)] = (0, 0)
    else:
        dims[str(ax)] = (0, int(ds.dimension(ax_index)) - 1)

# Set cropped regions
dims['X'] = (10, 40)
dims['Y'] = (5, 20)

# Set crop intervals
begin_interval = [dims[name][0] for name in dim_names]
end_interval = [dims[name][1] for name in dim_names]
interval = FinalInterval(begin_interval, end_interval)
print(begin_interval)
print(end_interval)
print(Intervals.contains(ds, interval))

ds2 = ij.op().crop(interval, ds)
ij.ui().show(ds2.getName(), ds2)
----------------------------------------------------

Error shows:

----------------------------------------------------
ds2 = ij.op().crop(interval, ds)
at net.imagej.DefaultDataset.factory(DefaultDataset.java:735)
at net.imagej.ImgPlus.factory(ImgPlus.java:280)
at net.imagej.ops.crop.CropImgPlus.run(CropImgPlus.java:74)
at org.scijava.command.CommandModule.run(CommandModule.java:201)
at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:363)
at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:78)
at net.imagej.ops.DefaultOpService.crop(DefaultOpService.java:215)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)

java.lang.UnsupportedOperationException:
java.lang.UnsupportedOperationException: TODO
-------------------------------------------------------

Thank you

--
Hadrien Mary

Ph.D student in Biology
Tournier-Gachet Team
CNRS - LBCMCP - UMR 5088

Université de Toulouse - Bât. 4R3B1
118, route de Narbonne - 31062 Toulouse

_______________________________________________
ImageJ-devel mailing list
[hidden email]
http://imagej.net/mailman/listinfo/imagej-devel
Reply | Threaded
Open this post in threaded view
|

Re: Using imagej-ops to crop images

Mark Hiner
Hi Hadrien!

>so I am not sure wether it's a bug or it's something not supported right now.

It looks like it's a limitation of the DefaultDataset[1] right now. I updated the message to suggest a workaround, at least[2].

So if you change your next to last line to:

ds2 = ij.op().crop(interval, ds.getImgPlus())

to crop the ImgPlus that's wrapped by the Dataset, your script should work (or at least not crash).

Thanks, as always, for the report :)

Best,
Mark


On Sun, Jan 25, 2015 at 9:14 AM, Hadrien Mary <[hidden email]> wrote:
Hi,

I am having an issue with a script which crop an image with
imagej-ops. The error shows a "TODO" so I am not sure wether it's a
bug or it's something not supported right now.

-------------------------------
# @DatasetService data
# @ImageJ ij

from jarray import array

from net.imglib2 import FinalInterval
from net.imglib2.img.array import ArrayImgs
from net.imagej.axis import Axes
from net.imglib2.util import Intervals

fname = "/home/hadim/test_small.ome.tif"
ds = data.open(fname)

# Initiate dimensions
dims = {}
dim_names = [None] * 5
for ax in [Axes.X, Axes.Y, Axes.Z, Axes.TIME, Axes.CHANNEL]:
    ax_index = ds.dimensionIndex(ax)
    dim_names[ax_index] = str(ax)
    if int(ds.dimension(ax_index)) == 1:
        dims[str(ax)] = (0, 0)
    else:
        dims[str(ax)] = (0, int(ds.dimension(ax_index)) - 1)

# Set cropped regions
dims['X'] = (10, 40)
dims['Y'] = (5, 20)

# Set crop intervals
begin_interval = [dims[name][0] for name in dim_names]
end_interval = [dims[name][1] for name in dim_names]
interval = FinalInterval(begin_interval, end_interval)
print(begin_interval)
print(end_interval)
print(Intervals.contains(ds, interval))

ds2 = ij.op().crop(interval, ds)
ij.ui().show(ds2.getName(), ds2)
----------------------------------------------------

Error shows:

----------------------------------------------------
ds2 = ij.op().crop(interval, ds)
at net.imagej.DefaultDataset.factory(DefaultDataset.java:735)
at net.imagej.ImgPlus.factory(ImgPlus.java:280)
at net.imagej.ops.crop.CropImgPlus.run(CropImgPlus.java:74)
at org.scijava.command.CommandModule.run(CommandModule.java:201)
at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:363)
at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:78)
at net.imagej.ops.DefaultOpService.crop(DefaultOpService.java:215)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)

java.lang.UnsupportedOperationException:
java.lang.UnsupportedOperationException: TODO
-------------------------------------------------------

Thank you

--
Hadrien Mary

Ph.D student in Biology
Tournier-Gachet Team
CNRS - LBCMCP - UMR 5088

Université de Toulouse - Bât. 4R3B1
118, route de Narbonne - 31062 Toulouse

_______________________________________________
ImageJ-devel mailing list
[hidden email]
http://imagej.net/mailman/listinfo/imagej-devel


_______________________________________________
ImageJ-devel mailing list
[hidden email]
http://imagej.net/mailman/listinfo/imagej-devel
Reply | Threaded
Open this post in threaded view
|

Re: Using imagej-ops to crop images

Hadrien Mary
Awesome ! Thanks again Mark :-)

--
Hadrien Mary

Ph.D student in Biology
Tournier-Gachet Team
CNRS - LBCMCP - UMR 5088

Université de Toulouse - Bât. 4R3B1
118, route de Narbonne - 31062 Toulouse


On Sun, Jan 25, 2015 at 7:53 PM, Mark Hiner <[hidden email]> wrote:

> Hi Hadrien!
>
>>so I am not sure wether it's a bug or it's something not supported right
>> now.
>
> It looks like it's a limitation of the DefaultDataset[1] right now. I
> updated the message to suggest a workaround, at least[2].
>
> So if you change your next to last line to:
>
> ds2 = ij.op().crop(interval, ds.getImgPlus())
>
> to crop the ImgPlus that's wrapped by the Dataset, your script should work
> (or at least not crash).
>
> Thanks, as always, for the report :)
>
> Best,
> Mark
>
> [1]
> https://github.com/imagej/imagej-common/blob/59bfc3cebf8204a48bc559adf079f227652514ed/src/main/java/net/imagej/DefaultDataset.java#L734-736
> [2]
> https://github.com/imagej/imagej-common/commit/75330a95c66013390cf4b6b4511e08357a8a28b0
>
> On Sun, Jan 25, 2015 at 9:14 AM, Hadrien Mary <[hidden email]>
> wrote:
>>
>> Hi,
>>
>> I am having an issue with a script which crop an image with
>> imagej-ops. The error shows a "TODO" so I am not sure wether it's a
>> bug or it's something not supported right now.
>>
>> -------------------------------
>> # @DatasetService data
>> # @ImageJ ij
>>
>> from jarray import array
>>
>> from net.imglib2 import FinalInterval
>> from net.imglib2.img.array import ArrayImgs
>> from net.imagej.axis import Axes
>> from net.imglib2.util import Intervals
>>
>> fname = "/home/hadim/test_small.ome.tif"
>> ds = data.open(fname)
>>
>> # Initiate dimensions
>> dims = {}
>> dim_names = [None] * 5
>> for ax in [Axes.X, Axes.Y, Axes.Z, Axes.TIME, Axes.CHANNEL]:
>>     ax_index = ds.dimensionIndex(ax)
>>     dim_names[ax_index] = str(ax)
>>     if int(ds.dimension(ax_index)) == 1:
>>         dims[str(ax)] = (0, 0)
>>     else:
>>         dims[str(ax)] = (0, int(ds.dimension(ax_index)) - 1)
>>
>> # Set cropped regions
>> dims['X'] = (10, 40)
>> dims['Y'] = (5, 20)
>>
>> # Set crop intervals
>> begin_interval = [dims[name][0] for name in dim_names]
>> end_interval = [dims[name][1] for name in dim_names]
>> interval = FinalInterval(begin_interval, end_interval)
>> print(begin_interval)
>> print(end_interval)
>> print(Intervals.contains(ds, interval))
>>
>> ds2 = ij.op().crop(interval, ds)
>> ij.ui().show(ds2.getName(), ds2)
>> ----------------------------------------------------
>>
>> Error shows:
>>
>> ----------------------------------------------------
>> ds2 = ij.op().crop(interval, ds)
>> at net.imagej.DefaultDataset.factory(DefaultDataset.java:735)
>> at net.imagej.ImgPlus.factory(ImgPlus.java:280)
>> at net.imagej.ops.crop.CropImgPlus.run(CropImgPlus.java:74)
>> at org.scijava.command.CommandModule.run(CommandModule.java:201)
>> at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:363)
>> at net.imagej.ops.DefaultOpService.run(DefaultOpService.java:78)
>> at net.imagej.ops.DefaultOpService.crop(DefaultOpService.java:215)
>> at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:606)
>>
>> java.lang.UnsupportedOperationException:
>> java.lang.UnsupportedOperationException: TODO
>> -------------------------------------------------------
>>
>> Thank you
>>
>> --
>> Hadrien Mary
>>
>> Ph.D student in Biology
>> Tournier-Gachet Team
>> CNRS - LBCMCP - UMR 5088
>>
>> Université de Toulouse - Bât. 4R3B1
>> 118, route de Narbonne - 31062 Toulouse
>>
>> _______________________________________________
>> ImageJ-devel mailing list
>> [hidden email]
>> http://imagej.net/mailman/listinfo/imagej-devel
>
>

_______________________________________________
ImageJ-devel mailing list
[hidden email]
http://imagej.net/mailman/listinfo/imagej-devel