comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Getting ROI data from an image
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Getting ROI data from an image [message #77858 is a reply to message #77857] Fri, 30 September 2011 14:16 Go to previous messageGo to previous message
Rebecca is currently offline  Rebecca
Messages: 4
Registered: October 2011
Junior Member
That's great, and it makes so much sense, but it doesn't seem like IDL
obeys those laws of indexing. Using
temp = img[x,y,*]
produces an out of memory error. It's not hard to figure out why-
temp = img[x,y,0]
Produces a [npix, npix] array, where npix is the number of pixels
referenced in 'indices'. What I was expecting to happen was a [npix]
vector! IDL is playing by different rules here.

npix = N_ELEMENTS(indices)
z = INTARR(npix)
temp = img[x,y,z]

That produces the magical vector array I want. So, is there any way to
play by these rules and grab 300 bands worth of data at once so I have
a [npix, bands] array? Or should I give up the chase and just FOR loop
it?



On Sep 30, 4:41 pm, David Fanning <n...@dfanning.com> wrote:
> Rebecca Brown writes:
>> OK, I can see how using the histogram w/ reverse indices will help
>> quickly get the indices associated with each ROI. That's a great help,
>> I wouldn't even need a FOR loop.
>> h = HISTOGRAM(result, MIN = 0, MAX = classes, NBINS = classes+1,
>> REVERSE_INDICES=ri)
>
>> But this doesn't answer the problem I was having, which perhaps I
>> didn't speak to as directly as I wanted- or perhaps you both are
>> simply more versed at array indexing than I am! With HISTOGRAM or
>> WHERE, it returns a 1D index of a 2D array (result), but I need to
>> pull hyperspectral data from a 3D array using those indexes. My
>> hyperspectral 'img' array might be 320 x 1000 x 300, for example. I
>> cannot simply call
>> temp = img[ ri[ri[1]:ri[2]-1], *]
>> And get the data I need. How would this be accomplished instead?
>
> I think you need one more step:
>
>   s = Size(result, /DIMENSIONS)
>   h = Histogram(result, ....., REVERSE_INDICES=ri)
>   indices = ReverseIndices(ri, 1) ; As an example.
>   colrow = Array_Indices(s, indices, /DIMENSIONS)
>   x = Reform(colrow[0,*])
>   y = Reform(colrow[1,*])
>   temp = img[x,y,*]
>
> Cheers,
>
> David
>
> --
> David Fanning, Ph.D.
> Fanning Software Consulting, Inc.
> Coyote's Guide to IDL Programming:http://www.idlcoyote.com/
> Sepore ma de ni thui. ("Perhaps thou speakest truth.")
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Multi-Threading in ENVI
Next Topic: finding confidence interval in spectral analysis ( something similar to chi2conf.m in matlab)

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 14:34:32 PDT 2025

Total time taken to generate the page: 0.48137 seconds