3

I have real world 3D points which I want to project on a plane. The most of intensity [0-1] values fall in lower region (near zero).

Please see image 'before' his attched below. before normalization of data

I tried to normalize values

Col_=Intensity; % before

max(Col_)=0.46;min(Col_)=0.06;

Col=(Col_-min(Col_))/(max(Col_)-min(Col_));% after

max(Col)=1;min(Col)=0;

But still i have maximum values falling in lower region (near zero). Please see second fig after normalization.

After normalization of data

Result is still most of black region.Any suggestion. How can I strech my intensity information. regards,!

Shahgee
  • 3,303
  • 8
  • 49
  • 81
  • maybe this would be of help (the normalizations part): http://stackoverflow.com/questions/1719048/plotting-4-curves-in-a-single-plot-with-3-y-axes/1719405#1719405 – Amro Jul 22 '11 at 18:22
  • i think you should resort to logarithmic scaling as suggested by @ephsmith. Linear scaling won't help much your case. – A. K. Jul 23 '11 at 08:44

3 Answers3

1

It looks like you have already normalized as much as you can with linear scaling. If you want to get more contrast, you will have to give up preserving the original scaling and use a non-linear equalization.

For example: http://en.wikipedia.org/wiki/Histogram_equalization

If you have the image processing toolbox, matlab will do it for you: http://www.mathworks.com/help/toolbox/images/ref/histeq.html

It looks like you have very few values outside the first bin, if you don't need to preserve the uniqueness of the intensities, you could just scale by a larger amount and clip the few that exceed 1.

Jonathan
  • 616
  • 4
  • 7
1

When I normalize intensities I do something like this:

Col = Col - min(Col(:));
Col = Col/max(Col(:));

This will normalize your data points to the range [0,1].

Now, since you have many small values, you might be able to make out small changes better through log scaling.

Col_scaled = log(1+Col);

Linear scaling with such data rarely works for me. Using the log function is akin to tweaking gamma for visualization purposes.

ephsmith
  • 398
  • 3
  • 12
0

I think the only thing you can do here is reduce the range. After normalization do the following:

t = 0.1;
Col(Col > t) = t;

This will simply truncate the range of the data, which may be sufficient for what you are doing. Then you can re-normalize again if you wish.

Dima
  • 38,860
  • 14
  • 75
  • 115
  • @ Dima I tried like this Col_= log(1+Col_); Col_(Col_>0.05)=0.05; Col=(Col_-min(Col_))/(max(Col_)-min(Col_)); It works , but how can program finds this limit automatically. Any idea. – Shahgee Jul 22 '11 at 15:45
  • @shahbaba The limit should probably depend on the percentage of values that you do not want to alter. The simplest thing to do is set the threshold to the median of your data. Then the top 50% of the values will map to 1. If you want to keep more of the data intact, like 90%, then you should sort the data and set the threshold such that only top 10% are mapped to 1. – Dima Jul 22 '11 at 15:52
  • @Dima: this is similar in idea to [IMADJUST](http://www.mathworks.com/help/toolbox/images/ref/imadjust.html) (remap such that a percentage of values are saturated at high/low values) – Amro Jul 22 '11 at 18:26