Thanks Ed,
using $inds runs quicker (a little), maybe.
I believe that you are right a 'firstnonzeroover' could be a such operation
that I need.
>From where I can learn how to do xfor for Ufunc ?

Regards









El vie, 25 oct 2024 a las 14:38, Ed . (<ej...@hotmail.com>) escribió:

> Hi Guillermo,
>
> Glad you have progress! A quick change that will compute a bit less is to
> change:
>
>     $image->where($sub_image > 0) .= $sub_image->where($sub_image > 0);
>
> to:
>
>     my $inds = $sub_image > 0;
>     $image->where($inds) .= $sub_image->where($inds);
>
> The algorithm you're using looks like it takes, for each pixel channel,
> the last (highest-n) non-zero pixel channel value. There isn't a "first
> non-zero" (which you could use with a slice("-1:0")) operation that I know
> of, but if there were, it would operate over the whole image-stack in one
> go, which would probably be optimally quick, especially since it would
> shortcut. Also with the miracle of auto-pthreading and broadcasting, it
> could use POSIX threads.
>
> Any volunteers to write a "firstnonzeroover" xform for Ufunc?
>
> Best regards,
> Ed
>
> ------------------------------
> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
> *Sent:* 25 October 2024 5:29 PM
> *To:* Ed . <ej...@hotmail.com>
> *Cc:* David Mertens <dcmertens.p...@gmail.com>;
> pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
> pdl-gene...@lists.sourceforge.net <pdl-gene...@lists.sourceforge.net>
> *Subject:* Re: [Pdl-devel] project ordered sequence image
>
> Thanks to Ingo, David, Ed,
>
> After some minor modification to the David help, and using:
>
> use PDL::NiceSlice;
> my $image = $imn(,,,(0));
> for my $layer (1 .. $imn->dim(3)-1) {
>     my $sub_image = $imn(,,,($layer));
>     $image->where($sub_image > 0) .= $sub_image->where($sub_image > 0);
> }
>
> works fine to solve my problem, but yes it is some slow thinking in
> hundreds of these
> operations. Nevertheless, it does not impact the overall computation cost.
>
> The change I made is $image->dim(3) => $imn->dim(3)-1, because $image is
> (3,x,y) and the number of layer is
> in $imn->dim(3)
>
> Regards
>
>
>
> El vie, 25 oct 2024 a las 9:42, Ed . (<ej...@hotmail.com>) escribió:
>
> A thing I didn't think of before: to add to David's thought, you might
> consider adding a fourth value to make your images RGBA, where the A is
> "alpha", i.e. opacity. Then you would only add each pixel (or channel
> value) to the final image where its numerical value * the alpha value was
> >0 (or, if you're doing addition or "or"-ing, just add/or the value * the
> alpha, which if 0 does nothing).
>
> Best regards,
> Ed
> ------------------------------
> *From:* David Mertens <dcmertens.p...@gmail.com>
> *Sent:* 25 October 2024 11:10 AM
> *To:* Ed . <ej...@hotmail.com>
> *Cc:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>;
> pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
> pdl-gene...@lists.sourceforge.net <pdl-gene...@lists.sourceforge.net>
> *Subject:* Re: [Pdl-devel] project ordered sequence image
>
> Hello Guillermo,
>
> You said something interesting. You discussed a sub-image with "a red
> circle" and another with "a blue rectangle". But what you have are full
> images: an image with a red circle is an image with a red circle and a
> black background. It sounds like you want to treat that background color as
> transparent, then "layer" the images by overwriting the non-transparent
> pixels.
>
> If I had to do this myself, I can only think of a way to do this using a
> Perl loop. If you find that this loop is too slow, then think of ways to
> rewrite using a PDL expression, but only if you actually deem it to be too
> slow. It would go something like this:
>
> use PDL::NiceSlice;
> my $image = $imn(,,,(0));
> for my $layer (1 .. $image->dim(3)) {
>     my $sub_image = $imn(,,,($layer));
>     $image->where($sub_image > 0) .= $sub_image->where($sub_image > 0);
> }
>
> This isn't perfect: if you have a pixel in your sub-image that is pure
> red, it'll copy the red channel to the final image, but not the green or
> blue. That's as much as I can put into it for now, thouogh, and hopefully
> it's enough to get you started.
>
> David
>
> On Thu, Oct 24, 2024 at 3:30 PM Ed . <ej...@hotmail.com> wrote:
>
> Hi Guillermo,
>
> That will depend on how you want to combine each pixel. If you can deal
> independently with each R/G/B value, then to just add the values together,
> you'd do:
>
>   $im = $imn->mv(-1,0)->sumover;
>
> Otherwise you'll have to spell out a bit more what you mean by sorting.
> Another operation that might be useful is "borover" (bitwise or, on each
> R/G/B value along the sequence of images).
>
> Best regards,
> Ed
> ------------------------------
> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
> *Sent:* 24 October 2024 4:52 PM
> *To:* Ed . <ej...@hotmail.com>
> *Cc:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
> pdl-gene...@lists.sourceforge.net <pdl-gene...@lists.sourceforge.net>
> *Subject:* Re: [Pdl-devel] project ordered sequence image
>
> Hello again, thanks to Ed for show me a typo error
> in my example. Where I wrote
>
> $im=$imn->reduce('op',2);
>
> it must say
>
> $im=$imn->reduce('op',3);
>
> But, the question remain in how to do an 'op' that
> result in a sorted overlapping between all the sub images
>
> In other words. Suppose you have n=0 sub image with
> a red circle and in n=1 a sub image with a blue rectangle.
> Some pixeles of both images are in common.
> Then, what I want is to get a composed image that shows
> the red circle overlapping the blue rectangle. The same
> idea for many subimages with sorted overlapping.
>
> Regards,
>
>
>
>
>
>
>
>
>
>
>
> El jue, 24 oct 2024 a las 9:57, Guillermo P. Ortiz (<
> gor...@exa.unne.edu.ar>) escribió:
>
> Hello Ed,
> thanks for your reply.
> That I trying to mean with 'reduce' is some of
> projection operation (op) like in PDL::Reduce module
> that performs "(op)over" to reduce to N-1
> dimension after some operation over the set of
> (3,x,y, n) to (3,x,y) rgb images. I mean
> a composed rgb image from a set of (layer) n rgb images.
> For example:
>
> $imn-> info : pdl D [3,nx,ny,n]
> $im=$imn->reduce('op',2);
> $im-> info : pdl D [3,nx,ny]
>
> Then, maybe I need to introduce some "sort"
> operation in order that when I reduce to one
> composed $im image each layer in $imn overlap
> the following layer. But, I did not realize how to do that
> using some pdl trick.
>
> Thanks a lot for your help
>
> Regards
>
>
>
> El jue, 24 oct 2024 a las 9:12, Ed . (<ej...@hotmail.com>) escribió:
>
> Hi Guillermo,
>
> I believe the situation you're describing is you have effectively a series
> of (3,x,y) images.  You mention "reducing", but you haven't said what you
> mean by that - would it turn that series of images into one image?
>
> wpic is intended to write out a single image, so an ndarray with multiple
> images won't work with that. To write out a series of images as a movie you
> could use wmpeg, or just to store the data you could use
> https://metacpan.org/pod/PDL::IO::FastRaw and specifically writefraw.
> Otherwise to write each image in its own file you could use something like:
>
>   $_->wpic(sprintf "img%03d.png", $count++) for $pdl->dog;
>
> Does that help?
>
> Best regards,
> Ed
> ------------------------------
> *From:* Guillermo P. Ortiz <gor...@exa.unne.edu.ar>
> *Sent:* 23 October 2024 4:42 PM
> *To:* pdl-devel@lists.sourceforge.net <pdl-devel@lists.sourceforge.net>;
> pdl-gene...@lists.sourceforge.net <pdl-gene...@lists.sourceforge.net>
> *Subject:* [Pdl-devel] project ordered sequence image
>
> Hello everyone,
>
> I have created a pdl with structure (3,size_x,size_y,np)
> in order to manage different layer features to compose an rgb
> image.
>
> The idea that I can not connect yet is how to "reduce" over dim 3
> to project to 3 X s_x X s_y rgb image in ordered fashion sequence. For
> example,
> suppose that for np=0, 1 and 2, in the resulting image is only view of 2
> that
> is allowed by 1 and 0 layers, in that order.
>
> I am trying to use wpic command from PDL::IO::Pic module
> to convert via for example pnmtopng using options for it.
> There are hashes like {FLAGS => options} used for options
> {CONVERTER => 'pnmtopng'} indicating which conversor to use.
> But is seems to be intended of rgb 3(4) X s_x X s_y
>
> Thanks for your attention in advance
>
> Regards
>
>
> --
>
>
> Dr. Guillermo P. Ortiz
> Electromagnetismo Aplicado
> Dto. Física, Facultad de Ciencias Exactas
> Universidad Nacional del Nordeste
> Avda Libertad 5460, Campus UNNE.
> W3404AAS Corrientes, Argentina.
> (+54) 379-4424678 interno 4613
> gortiz* at *unne edu ar
>
> _______________________________________________
> pdl-devel mailing list
> pdl-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pdl-devel
>
>
>
> --
>  "Debugging is twice as hard as writing the code in the first place.
>   Therefore, if you write the code as cleverly as possible, you are,
>   by definition, not smart enough to debug it." -- Brian Kernighan
>
>
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to