Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

How to increase the contrast in an image, using imagesc, with removal of outliers.

Asked by Ronni BIng on 30 Jun 2012

Hi,

I have data from a fits file that is displayed with the help of imagesc. The image is very dark (data range in [20 2200]). When I use imcontrast(gca) i can manually remove outliers, and if 0.01% of the outlieres is removed, the data range is [59 1175], and I get the desired contrast.

Is there any way to remove the outliers in the command window, as I have many files to be analysed?

p.s. I know i can use the command imagesc(data, [cmin cmax]),colormap(gray), but the problem is that I dont know cmin and cmax for the different images.

Any help appriciated,

Thank you

Ronni

1 Comment

Image Analyst on 30 Jun 2012

Do you really want to remove outliers from your data, or do you want to keep them but just scale your image for display? Have you tried imadjust()? Or just passing in the display limits into imshow like imshow(yourImage, [42 123])?

Ronni BIng

Products

No products are associated with this question.

1 Answer

Answer by Walter Roberson on 30 Jun 2012

Something like:

ndev = 3;
data_mean = mean(data(:));
data_std = std(data(:));
data_min = min(data(:));
data_max = max(data(:));
cmin = max( data_min, data_mean - ndev * data_std );
cmax = min( data_max, data_mean + ndev * data_std );
imagesc( data, [cmin, cmax] )

3 Comments

Ronni BIng on 30 Jun 2012

Great idea - but the problem is that the pixel-values are not even nearly normal distributed, so it does not work as intended.

Image Analyst on 30 Jun 2012

So go ahead and specify your own limits, using fixed values like I did, or come up with some algorithm like Walter did to derive the value. No one says you need to use his method.

Walter Roberson on 30 Jun 2012
cutout = 0.0001;
num_to_cut = ceil( numel(data) * cutout / 2);
sorted_data = sort(data(:));
cmin = sorted_data( num_to_cut );
cmax = sorted_data( end - num_to_cut + 1);
imagesc(data, [cmin, cmax]);
Walter Roberson

Contact us