Pipeline
imageList = ["3d-glasses.png", "abstract-013.png", "abstract-024.png", "abstract-068.png", "airplane.png", "alarm-clock.png", "aquarium.png"];
% upsample image
%newImg = imresize(img64, 64);
% number of projections
global numberOfProjections;
numberOfProjections = 5;
% A matrices
global As;
% b matrices
global bs;
% number of rays
numberOfRays = 32;
% runtimes
runtimes = zeros(size(imageList,2),1);
% save directory
saveDir = './results-ga/';
% errors
errors = zeros(size(imageList,2),1);
for i = 1:size(imageList,2)
imgName = char(imageList(i));
imgPath = ['dataset/', imgName];
img512 = imread(imgPath);
img64 = img512(1:8:end,1:8:end);
%img32 = img512(1:16:end,1:16:end);
%img16 = img512(1:32:end,1:32:end);
%img8 = img512(1:64:end,1:64:end);
% use this subsampled image
img = img64;
% angles to project (in radians)
angles = linspace(0,pi,numberOfProjections);
% center in pixel coordinates
center = [size(img,1)/2; size(img,1)/2];
As = zeros([numberOfRays*2+1 size(img,1).^2 numberOfProjections]);
bs = zeros([numberOfRays*2+1 1 numberOfProjections]);
for j = 1:numberOfProjections
angle = angles(j);
[matrixA, matrixb]=projectionmatrix(img, angle, center, numberOfRays);
As(:,:,j) = matrixA;
bs(:,:,j) = matrixb;
end
disp("setup done.");
R = zeros(size(bs,1),size(bs,3));
for j = 1:size(bs,3)
R(:,j) = bs(:,1,j);
end
imgFbp = iradon(R,angles/pi*180,"nearest","Ram-Lak",1,size(img,1));
u0 = rescale(getVecFromImage(imgFbp));
disp("initial vector found.");
numberOfVariables = size(img,1)*size(img,2);
lb = zeros(numberOfVariables,1);
ub = ones(numberOfVariables,1);
%options = optimoptions('ga',"Display","iter",'InitialPopulationMatrix',u0',
'FunctionTolerance',1e-6,'PopulationSize',size(img,1)^2,'HybridFcn','fmincon','FitnessLimit',80,'PlotFcn','gaplotbestf');
options = optimoptions('fmincon','Algorithm','interior-point','SpecifyObjectiveGradient',true,"Display","iter",'PlotFcn','optimplotfval');
tic;
%imgOpt = iradon(R,angles/pi*180,"nearest","Ram-Lak",1,size(img,1));
%uOpt = rescale(getVecFromImage(imgOpt));
%[uOpt, finalCost, flag, status, population, scores] = ga(@costFunc,numberOfVariables,[],[],[],[],lb,ub,[],options);
[uOpt,finalCost,exitflag,status,lambda,grad,hessian] = fmincon(@objecitveFunc,u0,[],[],[],[],lb,ub,[],options);
dt = toc;
runtimes(i) = dt;
imgOpt = getImageFromVec(uOpt);
imgOptBin = imgOpt>0.5;
savePath = [saveDir, imgName];
imwrite(imgOptBin,savePath);
error = sum(sum(abs(imgOptBin-img)));
errors(i) = error;
figure;
imgBig = imresize(img, 512/size(img,1));
imshow(imgBig);
figure;
imgOptBig = imresize(imgOptBin, 512/size(img,1));
imshow(imgOptBig);
pause;
end