clc
clear all
close all

kode_dir = 'C:\Users\odin_\OneDrive\Documents\HVL- Byggenginør\6. semester\Bacheloroppgave\CT';
data_dir = "C:\Users\odin_\OneDrive\Documents\HVL- Byggenginør\6. semester\Bacheloroppgave\CT\CT scan av kuber";

%for å vise CT-bildene aktiver koden under:
%vis_orginal()   %fjern første '%' for å vise CT-bildene
%vis_skarpere_bilder()    %fjern første '%' for å vise de redigerte CT-bildene


fil_skarp = last_inn('skarpe_bilder.mat');
skarp = fil_skarp.skarpe_bilder;
sh = svart_hvit(skarp);
%exportgraphics(fig(1),'barR02.tif')

M60_x(:,:,:) = sh(1,1,50:end-68,52:end-58,13:173);
M60_y(:,:,:) = sh(1,2,50:end-68,52:end-58,16:208);
M90_x(:,:,:) = sh(3,1,52:end-62,50:end-67,18:175);
M90_y(:,:,:) = sh(3,2,94:end-95,89:end-102,18:175);


M60T_x(:,:,:) = sh(2,1,55:end-50,60:end-55,18:173);
M90T_x(:,:,:) = sh(4,1,58:end-53,60:end-55,13:172);

figure('Name','M60')
data = smooth3(M60_x,'box',5);
patch(isocaps(data,.5),...
   'FaceColor','interp','EdgeColor','none');
p1 = patch(isosurface(data,.5),...
   'FaceColor','blue','EdgeColor','none');
isonormals(data,p1);
view(3); 
axis vis3d tight
camlight left
lighting gouraud
set(gca,'XTick',[], 'YTick', [],'ZTick',[])

figure('Name','M90')
data = smooth3(M90_x,'box',5);
patch(isocaps(data,.5),...
   'FaceColor','interp','EdgeColor','none');
p1 = patch(isosurface(data,.5),...
   'FaceColor','blue','EdgeColor','none');
isonormals(data,p1);
view(3); 
axis vis3d tight
camlight left
lighting gouraud
set(gca,'XTick',[], 'YTick', [],'ZTick',[])

figure('Name','M60_T')
data = smooth3(M60T_x,'box',5);
patch(isocaps(data,.5),...
   'FaceColor','interp','EdgeColor','none');
p1 = patch(isosurface(data,.5),...
   'FaceColor','blue','EdgeColor','none');
isonormals(data,p1);
view(3); 
axis vis3d tight
camlight left
lighting gouraud
set(gca,'XTick',[], 'YTick', [],'ZTick',[])

figure('Name','M90_T')
data = smooth3(M90T_x,'box',5);
patch(isocaps(data,.5),...
   'FaceColor','interp','EdgeColor','none');
p1 = patch(isosurface(data,.5),...
   'FaceColor','blue','EdgeColor','none');
isonormals(data,p1);
view(3); 
axis vis3d tight
camlight left
lighting gouraud
set(gca,'XTick',[], 'YTick', [],'ZTick',[])

%finn luft %
M60_x_v = length(find(M60_x))/(size(M60_x,1)*size(M60_x,2)*size(M60_x,3));

M60_y_v = length(find(M60_y))/(size(M60_y,1)*size(M60_y,2)*size(M60_y,3));

M90_x_v = length(find(M90_x))/(size(M90_x,1)*size(M90_x,2)*size(M90_x,3));

M90_y_v = length(find(M90_y))/(size(M90_y,1)*size(M90_y,2)*size(M90_y,3));

M60_v = mean([M60_x_v,M60_y_v])*100
M90_v = mean([M90_x_v,M90_y_v])*100

%finn gjennomsnittstørrelse luftbobler
x = logical(M60_x);
table_x = regionprops3(x,'Volume');
luft_x = table_x.Volume;
M60_x_avg = mean(luft_x);

y = logical(M60_y);
table_y = regionprops3(y,'Volume');
luft_y = table_y.Volume;
M60_y_avg = mean(luft_y);

x = logical(M90_x);
table_x = regionprops3(x,'Volume');
luft_x = table_x.Volume;
M90_x_avg = mean(luft_x);

y = logical(M90_y);
table_y = regionprops3(y,'Volume');
luft_y = table_y.Volume;
M90_y_avg = mean(luft_y);

M60_v_avg = mean([M60_x_avg,M60_y_avg]);
M90_v_avg = mean([M90_x_avg,M90_y_avg]);

storrelse_luft_M90_i_forhold_til_M60 = round(M90_v_avg/M60_v_avg*100,2)

%størrelse i 3 snitt
for i = 1:3
    x = logical(M60_x);
    table_x = regionprops(x(:,:,40*i),'Area');
    luft_x = table_x.Area;
    M60_x_avg(i) = mean(luft_x);
end
M60_x_avg = mean(M60_x_avg);

for i = 1:3
    y = logical(M60_y);
    table_y = regionprops(y(:,:,40*i),'Area');
    luft_y = table_y.Area;
    M60_y_avg(i) = mean(luft_y);
end
M60_y_avg = mean(M60_y_avg);

for i = 1:3
    x = logical(M90_x);
    table_x = regionprops(x(:,:,40*i),'Area');
    luft_x = table_x.Area;
    M90_x_avg(i) = mean(luft_x);
end
M90_x_avg = mean(M90_x_avg);

for i = 1:3
    y = logical(M90_y);
    table_y = regionprops(y(:,:,40*i),'Area');
    luft_y = table_y.Area;
    M90_y_avg(i) = mean(luft_y);
end
M90_y_avg = mean(M90_y_avg);

M60_v_avg = mean([M60_x_avg,M60_y_avg])
M60_v_radius = (((100*100/(size(M60_x,1)*size(M60_x,2)))*M60_v_avg)/pi)^0.5
M90_v_avg = mean([M90_x_avg,M90_y_avg])
M90_v_radius = (((100*100/(size(M90_x,1)*size(M90_x,2)))*M90_v_avg)/pi)^0.5

%(1,1,47:end-68,52:end-58,13:173)
%(1,2,50:end-68,52:end-58,16:208)
%(3,1,52:end-62,50:end-67,18:175)
%(3,2,94:end-95,89:end-102,18:175)

function sh_bilder = svart_hvit(bilder)
    sh_bilder = ones(size(bilder));
    sh_bilder(find(bilder)) = 0;
end

function skarpere(kode_dir)
    fil = last_inn('bilder.mat');
    bilder = fil.bilder;
    tic
    fprintf("\nRedigerer bilder...\n")
    skarpe_bilder = zeros(size(bilder));
    for i = 1:size(bilder,5)
        for j = 1:size(bilder,1)
            for k = 1:size(bilder,2)
                bilde(:,:) = bilder(j,k,:,:,i);
                justert_bilde = bilde./5000;
                kontrast_bilde = imadjust(justert_bilde,[0.37,0.7],[]);
                skarpe_bilder(j,k,:,:,i) = kontrast_bilde;
            end
        end
    end
    fprintf("\nBilder redigert:\n")
    toc
    tic
    fprintf("\nLagrer bilder...\n")
    cd (kode_dir)
    save('skarpe_bilder.mat','skarpe_bilder')
    fprintf("\nBilder lagret:\n")
    toc
end

function vis_skarpere_bilder()
    fil = last_inn('skarpe_bilder.mat');
    bilder = fil.skarpe_bilder;
    bilder = svart_hvit(bilder);
    for i = 1:size(bilder,5)
        bilde1(:,:) = bilder(1,1,:,:,i); 
        bilde2(:,:) = bilder(2,1,:,:,i); 
        bilde3(:,:) = bilder(3,1,:,:,i);
        bilde4(:,:) = bilder(4,1,:,:,i);
        montage([bilde1,bilde3;bilde2,bilde4])
        pause(0.1)
    end
end

function vis_orginal()
    fil = last_inn('bilder.mat');
    bilder = fil.bilder;
    for i = 1:size(bilder,5)
        bilde1(:,:) = bilder(1,1,:,:,i); 
        bilde2(:,:) = bilder(2,1,:,:,i); 
        bilde3(:,:) = bilder(3,1,:,:,i);
        bilde4(:,:) = bilder(4,1,:,:,i);
        montage([bilde1,bilde3;bilde2,bilde4],'DisplayRange',[0 5000])
        pause(0.1)
    end
end

function navn = finn_filer()
    filer = dir();
    navn = [];
    for i = 3:length(filer)
        navn = [navn,string(filer(i).name)];
    end
end

function fil = last_inn(filnavn)
    tic
    fprintf("\nLaster inn bilder...\n")
    fil = load(filnavn);
    fprintf("\nBilder lastet inn\n")
    toc
end

function les_filer(kode_dir,data_dir)
    cd (data_dir)
    scan = finn_filer();
    bilder = []; %(2,2,x)

    for sca = 1:length(scan)
        scan_plassering = data_dir + "\" + scan(sca);
        cd (scan_plassering)
        retning = finn_filer();
        for ret = 1:length(retning)
            snitt_plassering = scan_plassering + "\" + retning(ret);
            cd (snitt_plassering)
            snitt_navn = finn_filer();
            snitt_navn = snitt_navn(1:end-1);
            for snitt = 1:length(snitt_navn)
                bilde(:,:) = dicomread(snitt_navn(snitt));
                bilde = bilde./5000;
                bilder(sca,ret,:,:,snitt) = bilde;
            end
        end
    end
    cd (kode_dir)
    save('bilder.mat','bilder')
end