a b/Image features calculation code/Not Working/shape_new.m
1
tic
2
files = dir('\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\nodules\*.dcm');
3
count = 0;
4
fid = fopen ('\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\nodules_features_new_per2.txt', 'wt');
5
fid2 = fopen ('\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\nodules_many_regions_new_per2.txt', 'wt');
6
fprintf(fid,'%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s \n','ImageName','Area','ConvexArea','Circularity','Perimeter','ConvexPerimeter','Roughness','EquivDiameter','MajorAxisLength','MinorAxisLength','Elongation','Compactness','Eccentricity','Solidity','Extent','RadialDistanceSD','MinIntensity','MaxIntensity','MeanIntensity','SDIntensity','MinIntensityBG','MaxIntensityBG','MeanIntensityBG','SDIntensityBG','IntesityDifference');
7
fprintf(fid2,'%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s \n','ImageName','Area','ConvexArea','Circularity','Perimeter','ConvexPerimeter','Roughness','EquivDiameter','MajorAxisLength','MinorAxisLength','Elongation','Compactness','Eccentricity','Solidity','Extent','RadialDistanceSD','MinIntensity','MaxIntensity','MeanIntensity','SDIntensity','MinIntensityBG','MaxIntensityBG','MeanIntensityBG','SDIntensityBG','IntesityDifference');
8
for i = 1:size(files,1)
9
    i
10
    fn = sprintf('%s/%s', '\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\nodules', char(files(i).name));
11
    fn2 = sprintf('%s/%s', '\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\backgroungs', char(files(i).name));
12
    if exist(fn, 'file')
13
14
        info = dicominfo(fn);
15
        info4 = dicominfo(fn2);
16
        I = dicomread(info);
17
        I4 = dicomread(info4);
18
        BW = (I~=-2000);
19
        L = bwlabel(BW);
20
        a = L;
21
        flag = 0;
22
        if (nanmax(a(:)) > 1)
23
            flag = 1;
24
        end
25
        a(a~=0 & a~=1) = 0;
26
        STATS = regionprops (a,'Area', 'Extent', 'Perimeter', 'Centroid', 'ConvexArea', 'ConvexImage', 'Solidity', 'Eccentricity', 'MajorAxisLength', 'EquivDiameter', 'MinorAxisLength');
27
        STATS.ConvexPerimeter = 2 * (sqrt(pi*STATS.ConvexArea));
28
        STATS.Circularity = (4*pi*STATS.Area)/(STATS.ConvexPerimeter .^ 2);
29
        STATS.Elongation = STATS.MajorAxisLength/STATS.MinorAxisLength;
30
        b = double(I);
31
        b(b==0) = NaN;
32
        b4 = double(I4);
33
        b4(b4==0) = NaN;
34
        STATS.MinIntensity = nanmin(b(:));
35
        STATS.MaxIntensity = nanmax(b(:));
36
        STATS.MeanIntensity = nanmean(b(:));
37
        STATS.SDIntensity = nanstd(b(:));
38
        STATS.MinIntensityBG = nanmin(b4(:));
39
        STATS.MaxIntensityBG = nanmax(b4(:));
40
        STATS.SDIntensityBG = nanstd(b4(:));    
41
        STATS.MeanIntensityBG = nanmean(b4(:));
42
        STATS.IntensityDifference = abs(STATS.MeanIntensity - STATS.MeanIntensityBG);
43
        fprintf(files(i).name,',',STATS(1).Area,',', STATS(1).Extent,',', STATS(1).Perimeter,'\n');
44
        count = count+1;
45
        fn2 = sprintf('%s/%s', '\\ailab03\LIDC\LIDC_FULL\LIDC-IDRI\exctract\outlines', char(files(i).name));
46
        info2 = dicominfo(fn2);
47
        I2 = dicomread(info2);
48
        I2=bwmorph(I2,'remove');
49
        d = NaN;
50
        j = 0;
51
        for r = 1:size(I2,1)
52
            for c = 1:size(I2,2)
53
                if (I2(r,c) > 0)
54
                    j = j + 1;
55
                    d(j) = sqrt(double((c-(STATS.Centroid(1)^2))+(r-(STATS.Centroid(2)^2))));
56
                end
57
            end
58
        end
59
        STATS.RadialDistanceSD = nanstd(d(:));
60
        STATS.Perimeter = j;
61
        I3 = bwperim(STATS.ConvexImage);
62
        j = 0;
63
        for r = 1:size(I3,1)
64
            for c = 1:size(I3,2)
65
                if (I3(r,c) > 0)
66
                    j = j + 1;
67
                end
68
            end
69
        end
70
        STATS.ConvexPerimeter = j;
71
        STATS.Roughness = STATS.ConvexPerimeter/STATS.Perimeter;
72
        STATS.Compactness = STATS.Perimeter^2/(4*pi*STATS.Area);
73
        if (flag == 0)
74
            fprintf(fid,'%s,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n',files(i).name,STATS.Area,STATS.ConvexArea,STATS.Circularity,STATS.Perimeter,STATS.ConvexPerimeter,STATS.Roughness,STATS.EquivDiameter,STATS.MajorAxisLength,STATS.MinorAxisLength,STATS.Elongation,STATS.Compactness,STATS.Eccentricity,STATS.Solidity,STATS.Extent,STATS.RadialDistanceSD,STATS.MinIntensity,STATS.MaxIntensity,STATS.MeanIntensity,STATS.SDIntensity,STATS.MinIntensityBG,STATS.MaxIntensityBG,STATS.MeanIntensityBG,STATS.SDIntensityBG,STATS.IntensityDifference);
75
        else
76
            fprintf(fid2,'%s,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n',files(i).name,STATS.Area,STATS.ConvexArea,STATS.Circularity,STATS.Perimeter,STATS.ConvexPerimeter,STATS.Roughness,STATS.EquivDiameter,STATS.MajorAxisLength,STATS.MinorAxisLength,STATS.Elongation,STATS.Compactness,STATS.Eccentricity,STATS.Solidity,STATS.Extent,STATS.RadialDistanceSD,STATS.MinIntensity,STATS.MaxIntensity,STATS.MeanIntensity,STATS.SDIntensity,STATS.MinIntensityBG,STATS.MaxIntensityBG,STATS.MeanIntensityBG,STATS.SDIntensityBG,STATS.IntensityDifference);
77
        end
78
    end
79
end
80
fclose(fid);
81
fclose(fid2);
82
toc