From: Gordon K. <gk...@cs...> - 2004-12-17 18:47:34
|
hello, > Say I generate a histogram with 10,000 bins with min_orig and max_orig > as the domain. > I need to do two things with this histogram. > 1. Change the number of bins arbitrarily with min_orig and max_orig > preserved. > 2. Effectively zoom, by changing the perceived min and max of the > histogram bins. > > Doing only 1 is pretty easy. I'll just call nrrdSpatialResample. Not really, unfortunately. Certainly, what you get when downsampling with the box kernel (nrrdKernelBox) is pretty close to the correct answer, but you have to scale the resulting values. Consider a histogram in which, magically, every bin has exactly one hit. Downsampling this with box will given you another histogram in which all the bins have exactly one hit. So, you have to rescale the output. And, that might mean having non-integral values for each bin. Upsampling a histogram is a little more under-determined. You can assume that all the values are uniformly distributed with their bins (this asssumption actually already kicks in when down-sampling in a non-integral way), and then something like the box kernel is plausible, but again you have to rescale the output values. > Getting it to zoom without resampling the entire nrrd is a bit more > tricky. > > I have a tool that displays the histogram of some data. I want to be > able to generate an artificially large histogram and scale it down to > the horizontal resolution of the display. The user however can > specify a zoomed mode where you only see a subset of the histogram. Can't you just crop the histogram until it covers the desired value range, and then resample what remains? > It is possible to zoom past the resolution of the original histogram. You might want to have some graphical indicator that this has happened- because once you upsample the histogram, the histogram will end up looking way more blocky (if you use box), or will otherwise be visually determined more by the upsampling kernel than the underlying data itself. Have I misunderstood something? I think the "right" way to deal with this is to store a list of underlying data values off each bin in original high-res histogram. In think an efficient way to mimic this is to sort all the values in the underlying data, and then store, with each histogram bin, the index into the sorted array for where the values going into that bin start. Then you can actually do a correct re-histogramming of those bins that the user has zoomed into. Gordon |