Code covered by the BSD License  

Highlights from
Bias Field Corrected Fuzzy C-Means

image thumbnail

Bias Field Corrected Fuzzy C-Means

by

 

02 Nov 2009 (Updated )

Estimates the illumination artifact in 2D (color) and 3D CT and MRI and segments into classes.

BCFCM3D.m
% This function BCFCM3D, segments (clusters) an imagevolume in object classes,
% and estimates the bias field.
%
% It's an implementation of the paper of M.N. Ahmed et. al. "A Modified Fuzzy 
% C-Means Algorithm for Bias Field estimation and Segmentation of MRI Data"
% 20002, IEEE Transactions on medical imaging.
%
% [B,U]=BCFCM3D(Y,v,Options)
%
% Inputs,
%   Y : The 3D greyscale input image of data-type Single
%   v : Class prototypes. A vector with approximations of the greyscale
%       means of all image classes. It is also possible to set values
%       further away from the mean to allow better class separation.
%   Options : A struct with options
%   Options.epsilon : The function stops if difference between class means
%                   of two itterations is smaller than epsilon
%   Options.alpha : Scales the effect of neighbours, must be large if 
%                   it is a noisy image, default 1.
%   Options.maxit : Maximum number of function itterations
%   Options.sigma : Sigma of Gaussian smoothing of the bias field (slow
%                   varying non uniform illumination in CT or MRI scan).
%   Options.p : Norm constant FCM objective function, must be larger than one
%               defaults to 2.
% Outputs,
%   B : The estimated bias field
%   U : Fuzzy Partition matrix (Class membership)
%
% Example, 
%
% % Compile the c-code
%   mex BCFCM3D.c -v
% % Load test volume
%   load MRI;
% % Convert to single
%   D = single(squeeze(D))/88;
% % Class prototypes (means)
%   v = [0 0.34 0.72 0.75 1.4];
% % Do the fuzzy clustering
%   [B,U]=BCFCM3D(D,v,struct('maxit',5,'epsilon',1e-5,'sigma',1));
% % Show results
%   figure, 
%   subplot(2,2,1), imshow(D(:,:,15)), title('A slice of input volume');
%   subplot(2,2,2), imshow(squeeze(U(:,:,15,2:4))), title('3 classes of the partition matrix');
%   subplot(2,2,3), imshow(B(:,:,15),[]), title('Estimated biasfield');
%   subplot(2,2,4), imshow(D(:,:,15)-B(:,:,15)), title('Corrected slice');
%
% Function is written by D.Kroon University of Twente (November 2009)

Contact us