HiveBrain v1.2.0
Get Started
← Back to all entries
snippetMinor

Segmenting brain images (Dicom format) using region-growing algorithm

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
formatdicomsegmentingbrainalgorithmgrowingusingimagesregion

Problem

I have a list of images in a folder where num denotes the index of image and I used num to run the iterations in a "for loop". The code is supposed to segment brain part from the brain CT images. Here is the link for region growing algorithm.

How do I increase the performance of my region-growing algorithm?

% CORD_XY(1),CORD_XY(2) is the seed point
% LEN Denotes the number of images in a folder    
% num is used to iterate in "for loop"
% "img" here is single image from the folder in DICOM format

for num= 1:LEN 
    img = dicomread(files(num,1).name);
    [row, col] = size(img);
    th = 20;
    diff = 10;

    J = regiongrowing(img, CORD_XY(1), CORD_XY(2), th);
    value1 = sum(sum(J > 0));

    if num > 10)
        th = 55;
    elseif num  0));
            th = th + 10;
            J = regiongrowing(double(img), CORD_XY(1), CORD_XY(2), th);
            value2 = sum(sum(J > 0));
            diff = value2 - value1; 
        end
    end
end  

J = regiongrowing(img, CORD_XY(1), CORD_XY(2), th-10);

Solution

I don't have the Image Processing Toolbox, so I can't test your code, but I'll go through what I can.

Never do diff = 10; diff is a useful builtin function in Matlab, so using it as a variable name will cause the function to be useless. The same goes with max, sum, size and so on.

value1 = sum(sum(J > 0)); is a bit faster than value1 = sum(J(:)>0);, so with regards to performance you did the right thing. In my opinion however, sum(J(:)>0) is a bit cleaner, and it can also be scaled to more dimensions.

Instead of elseif N <= 10 you can simply do else, as they mean the same thing in this context.

If it takes 4-5 iterations pretty consistently, then maybe you can increase the initial value of th to e.g. th = 40. It will result in fewer iterations for most images, so a faster algorithm. You might benefit from guessing a good value, run the algorithm, if you don't hit convergence, jump to a lower value. This will perform better for most of the images, but will be slower for some. In total, it's likely faster.

Context

StackExchange Code Review Q#120721, answer score: 2

Revisions (0)

No revisions yet.