0
$\begingroup$

I have written code according to a paper for Lung CT images, but its output wasn't correct. I think it is because of the setting of its parameters. The paper is about a multi-scale method using a Laplacian of Gaussian (LoG) filter for estimation of nodule size and location. For nodule location and size estimation, the algorithm generates nodule candidates in a small region of interest around the nodule, and the best candidate is selected through a rule-based method. enter image description here

In the paper, the size parameter of the kernel is directly related to the diameter of a candidate nodule as given by this expression d^2 = 12*sigma^2. So, for the task of identifying possible candidates, 150 normalized LoG kernels of incrementally increasing size corresponding to the diameter range from 3.0 to 30.0 mm were used. However, I couldn't set other sigmas based on the diameter of the nodules according to that formula(d^2 = 12*sigma^2). How can I set the parameters in the following code?

Code:

% Algorithm parameters
  load image  % image is 3D as image(x: row, y: col, z: slices).
% Initial sigma used to generate the Gaussian Filters
  initial_sigma = 1;
% Number of scales that are going to be generated
  number_scales = 7;
% Threshold that indicates whether a blob is considered or not
  threshold = 1;

  sigmas = initial_sigma.*(sqrt(2).^[0: number_scales-1]); 
  imageSize = size(image);
  dimX=imageSize(1);
  dimY=imageSize(2);
  dimZ=imageSize(3);
  % Reserve memory for the space-scale volume
  scale_space_volume = ones([size(image) number_scales]);
  % Generate the scale-space volume using different gaussians
  for i = 1 : number_scales
      filter_size = 2 * ceil(sigmas(i) * 2) + 1;    

     % Create the 3D laplacian of gaussian filter
      H = fspecial3('log', [filter_size filter_size filter_size], sigmas(i));

     % Apply the filter to the image and store it in the volume
       scale_space_volume(:,:,:, i) = sigmas(i)^2 * imfilter(image, H, 'replicate');
     % imshow(scale_space_volume(:,:, 85, i));

  end
$\endgroup$
  • $\begingroup$ You might want to normalize with sigmas(i)^3 instead, for a 3D filter. Your filter_size is very small for a LoG, you're probably cutting off a significant portion of the tails. I'd do 2 * ceil(sigmas(i) * 4) + 1, but if you're pressed for time, you could do *3. However, if you're pressed for time you'd be better off using separable filters here, the LoG is not separable but is the sum of separable filters, you can save a lot of computation time there if you need it. $\endgroup$ – Cris Luengo Jan 15 at 19:36
  • $\begingroup$ @Cris Luengo: Yes, Its time complexity is high and I don't know how to solve 3DLOG time!? I check it with filter_size = 2 * ceil(sigmas(i) ^ 4) + 1; but the output is the same. I think one problem is the sigma's setting according to nodule size for 150 kernels. That means that sigma = sqrt(d^2/12), d=3 up to 30. : sigma1, sigma2, ....sigma150. $\endgroup$ – eli Jan 15 at 20:31

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.