# Re: Histogram Hot-shots Required

• Subject: Re: Histogram Hot-shots Required
• From: Ronn Kling <ronn(at)rlkling.com>
• Date: Fri, 16 Jul 1999 13:04:25 GMT
• Newsgroups: comp.lang.idl-pvwave
• Organization: Deja.com - Share what you know. Learn what you don't.
• References: <MPG.11f876f9f15942a98982b@news.frii.com>
• Xref: news.doit.wisc.edu comp.lang.idl-pvwave:15694

```In article <MPG.11f876f9f15942a98982b@news.frii.com>,
davidf@dfanning.com (David Fanning) wrote:
> Ok you histogram cowboys. Let's see what ya got!
>
OK, I grew up on a ranch and I work with histograms so I qualify.

> I don't know if it's early on-set Alzheimers, or
> I'm just pressing with a long soccer weekend coming
> up, or I just haven't had enough beers yet, but
> this one is stumping me. I thought I'd give you
> folks a chance to see if you can explain something
> simply enough that even I can understand it. :-)
>
I also love challenges! (Must be the Klingon in me)

<lots cut ot>

> In any case, I'm fresh out of ideas as well as beer. So
> I thought I'd turn it over to you. Any ideas will be
> *gratefully* accepted. I'm sure it has something to do
> with that Reverse_Indices keyword, but whatever it is
> escapes me. :-)
>

You got it! Reverse indices will help you.  Turn to my book on pages
2-53 and 7-163 for the write up on Reverse Indices. But here is how I
would do it.

Given an array created by dist(250) find all the pixels that equal 100.

window,0,xsize=250,ysize=250
device,decomposed=0
z = dist(250)
tek_color
tv,z
h = histogram(z,reverse=r)
top = n_elements(r)
;r is a run length encoded array where the beginning of the array is an
;index into the rest of the array.
;Have to worry about the case where a pixel value  might equal the
;index.
;So create a two arrays from r. The first of the indexes, the second of
;the values.
index = where(r eq top,count)
if count eq 0 then print, 'something wrong'
indices = r[0:index[0]] ;indices of the values
values = r[index[0]+1:*] ;the values only
binIndex = where(values eq 100,count) ;find the pixel value=100
if count eq 0 then print, 'something wrong'
realIndex = binIndex + index[0] ;get the "real" index of it.
;now we have to find where this value falls into the indices.  The r
;array only has begin and end points into the array.
bottom = where( realIndex[0] gt indices,count)
if count eq 0 then print, 'something wrong'
;count is the bottom index of the values. To get all the pixels that
;equal 100 do
binPixels =  r[r[count]:r[count+1]]
print, n_elements(binPixels)
;And just to make sure
z[binPixels]=3
tv,z

Hope this helps!

-Ronn

--
Ronn Kling
Ronn Kling Consulting
www.rlkling.com

Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

```