[ImageJ-devel] L2 Polynomial Spline Pyramid (2 of 2)
Lee Kamentsky
leek at broadinstitute.org
Wed Jun 19 11:50:55 CDT 2013
On Wed, Jun 19, 2013 at 12:46 PM, Curtis Rueden <ctrueden at wisc.edu> wrote:
> Hi Lee,
>
> > I won't use it, but I'll probably figure out an easy way to generate a
> > RandomAccessibleInterval, given a source RandomAccessible and a
> > destination.
>
Oops - not destination, a coordinate. Something like:
RandomAccessibleInterval<T> randomAccessibleInterval(RandomAccessible src)
{}
with a get() method that calculates the value at the currente location.
>
> Isn't that what the net.imglib2.view.Views.interval methods do?
>
> Regards,
> Curtis
>
>
> On Wed, Jun 19, 2013 at 11:44 AM, Lee Kamentsky <leek at broadinstitute.org>wrote:
>
>>
>> On Wed, Jun 19, 2013 at 12:13 PM, Stephan Preibisch <preibisch at mpi-cbg.de
>> > wrote:
>>
>>> Hi Lee,
>>>
>>> I think that sounds useful ... can you explain exactly how you want to
>>> implement it? It seems like it could work on and return a
>>> RandomAccessibleInterval on which one can instantiate RandomAccesses. There
>>> could be even two implementations of it. One that precomputes it and one
>>> that always computes it on the fly, just when the RandomAccess actually
>>> queries a value.
>>>
>>> What do you guys think?
>>>
>>> Internally, there's a seperable convolution which means that, for an
>> N^dim kernel, you have O(N * dim) operations per pixel instead of O(N^dim)
>> operations, but you need scratchpad memory to accumulate the result. I'm
>> putting the computational logic into a class, Kernel1d, that holds the
>> kernel for the convolution and I'm supplying methods to calculate the value
>> at a single point and to use an IterableInterval over the source data to
>> calculate the intermediate 1d convolutions on a scratchpad RandomAccessible
>> or RandomAccessibleInterval.
>>
>> public <T extends NumericType<T>> void reduce(IterableInterval<T> src,
>> IterableInterval<T> dest, ImgFactory<T> factory);
>>
>> There are several flavors of methods that use this, but I think the one
>> that I will end up using in my plugin is:
>>
>> public <T extends NumericType<T>> RandomAccessibleInterval<T>
>> reduce(Img<T> src);
>>
>> which will use the factory of src to create a scratchpad Img for
>> intermediate calculations and for the output image. One neat thing is that
>> it should automagically work with Img<ARGBType> ooo score one brownie point
>> for a good design Stephan.
>>
>> I won't use it, but I'll probably figure out an easy way to generate a
>> RandomAccessibleInterval, given a source RandomAccessible and a
>> destination. Also, since it uses a kernel, the pixels along the output's
>> border are undefined. The method I plan to use returns an interval defined
>> only over valid pixels, but a dogged and misguided user should be able to
>> use some out of bounds strategy to get bogus pixel values along the border.
>>
>>
>>> Cheers, Steffi
>>>
>>> On Jun 18, 2013, at 11:32 , Curtis Rueden wrote:
>>>
>>> Hi Lee,
>>>
>>> > Do people think that these have enough utility to add to imglib2 (and
>>> > where should they go?) or is it more appropriate to keep them within
>>> > the project itself?
>>>
>>> How about in algorithms/core? (Or if GPL licensed: in algorithms/gpl?)
>>>
>>> Package prefix: net.imglib2.algorithm.somethingOrOther? (I leave the
>>> choice of "somethingOrOther" to you since I know how much you love naming!
>>> ;-)
>>>
>>> What do others think?
>>>
>>> Regards,
>>> Curtis
>>>
>>>
>>> On Tue, Jun 18, 2013 at 10:25 AM, Lee Kamentsky <leek at broadinstitute.org
>>> > wrote:
>>>
>>>> Hi all,
>>>> As part of an upcoming project, I'm planning to implement the methods
>>>> described in
>>>>
>>>> Unser, The L2 Polynomial Spline Pyramid, IEEE Transactions on Pattern
>>>> Analysis and Machine Intelligence, Vol 15 # 4, April 1993, p 364 (
>>>> http://bigwww.epfl.ch/publications/unser9305.pdf)
>>>>
>>>> There are two operations, one that decimates an image by half to
>>>> generate a smaller image (REDUCE) and one that reconstructs the larger
>>>> image from the smaller (EXPAND). I'd implement both operations as classes
>>>> supporting the RandomAccessible interface.
>>>>
>>>> Do people think that these have enough utility to add to imglib2 (and
>>>> where should they go?) or is it more appropriate to keep them within the
>>>> project itself?
>>>>
>>>> --Lee
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> ImageJ-devel mailing list
>>>> ImageJ-devel at imagej.net
>>>> http://imagej.net/mailman/listinfo/imagej-devel
>>>>
>>>>
>>> _______________________________________________
>>> ImageJ-devel mailing list
>>> ImageJ-devel at imagej.net
>>> http://imagej.net/mailman/listinfo/imagej-devel
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20130619/03f5033c/attachment.html>
More information about the ImageJ-devel
mailing list