Code covered by the BSD License  

Highlights from
Fast mutual information, joint entropy, and joint histogram calculation for N-D images

Be the first to rate this file! 45 Downloads (last 30 days) File Size: 1.76 KB File ID: #41714

Fast mutual information, joint entropy, and joint histogram calculation for N-D images

by

 

13 May 2013 (Updated )

Built for 'highest possible' speed. Can handle any number of dimensions, given sufficient memory.

| Watch this File

File Information
Description

This uses no for-loops - only index manipulation. Intended use is for iterative programs where increased speed pays off, but works just fine for individually controlled use as well - though in this case the user may want to adjust the function to include various parameters as input variables (for iterative programs these are usually constant, so they are set to typical values within the function).

No error checking is used, as that could slow things down and is generally unnecessary for an iterative program presumably using fixed image sizes and pixel values.

Returns joint histogram, mutual information, and joint entropy. It is expected that no one will need all three, so instructions on how to remove that which is not needed is included.

Required Products Image Processing Toolbox
MATLAB
MATLAB release MATLAB 8.1 (R2013a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (2)
08 May 2014 ja

That error means that at least one value in at least one of your images is not a non-negative integer value.

I have not added error checking, as the point of this is speed. But if you wanted to ensure that you do not get this error, you can add the following lines to the top of this function:
J = J - min(J(:));
K = K - min(K(:));
J = round(255.4*J/(max(J(:)));
K = round(255.4*J/(max(J(:)));

All this does is recast the image into the 0-255 range. This should avoid the error you were getting, as long as you don't have any NaN or complex pixel values. Again, I didn't want to add this to the code, as I suspect the main use for this will be for iterative programs, and recasting is usually handled well in advance of any attempt to obtain MI or joint entropy..

But, if you add these lines and it continues not to work, please let me know, and if possible include the data you are using.

08 May 2014 Nicolas Yu

have you tested your code?
There is a bug that when calculating h(x,y).

Bug information:
Subscript indices must either be real positive integers or logicals.

Error in ent (line 39)
jhist(yy) = xx;

Error in testENT (line 6)
[jhist, jent, MI] = ent(imgA,imgB);

Updates
09 Sep 2013

Now returns joint histogram and joint entropy by default (can be changed easily by user).
Changed the 'find' function to logical indexing for increased speed.
Removed the dimensional dependencies, so it now works for any image dimensions.

11 Sep 2013

updated description
included 'example data' in the comments
added a variable for slightly higher indexing speed

13 Sep 2013

Now also returns mutual information.

19 Sep 2013

condensed the comments in the code to only what is necessary to modify the function..

25 Sep 2013

fixed a silly mistake that needlessly increased the MI calculation time by about 10%

16 Oct 2013

Found that using array multiplication instead of meshgrid indexing increased the MI calculation slightly.

Contact us