Well, I am generally researching X-ray tomography. I went to the lab to ask them if I could put a cheese in one of the machines, but they are not cool with it....

[![Enter image description here][1]][1]

So I simulated an X-ray machine on the cheese and reconstructed the result for better analysis. I used MATLAB and the [TIGRE][2] toolbox*.

Cheese generation:

    %% Create cheese

    % First we create a filled cheese
    imageSize= 512;
    [columnsInImage rowsInImage] = meshgrid(1:imageSize, 1:imageSize);
    % Next create the circle in the image.
    centerX = 50;
    centerY = 50;
    radius = 400;
    maincheese = (rowsInImage - centerY).^2 ...
        + (columnsInImage - centerX).^2 <= radius.^2;

    maincheese(1:100,:)=0;
    maincheese(:,1:100)=0;

    fullcheese=zeros(imageSize,imageSize,imageSize,'single');

    fullcheese(:,:,50:430)=repmat(maincheese,1,1,430-50+1);

    clear columnsInImage rowsInImage

Now let's make it Swiss. We like manchego, but do we like it more than Swiss? No.

    nholes=100;
    [x,y,z]=meshgrid(1:imageSize, 1:imageSize,1:imageSize);
    holecenters=randi(imageSize,3,nholes);
    holesizes=rand(1,nholes)*50;
    holes=false(size(x));
    for ii=1:nholes
    holes=holes|((x - holecenters(1,ii)).^2 ...
        + (y -  holecenters(2,ii)).^2 ...
        + (z -  holecenters(3,ii)).^2 <= holesizes(ii).^2);
    end
    fullcheese(holes)=0;

[![enter image description here][3]][3]

Then I generated X-ray projections from a circular trajectory

    %% Define Geometry
    %
    % VARIABLE                                   DESCRIPTION                    UNITS
    geo.DSD = 1536;                             % Distance Source Detector      (mm)
    geo.DSO = 1000;                             % Distance Source Origin        (mm)
    % Detector parameters

    % Image parameters
    geo.nVoxel=[128;128;128]*2;                   % number of voxels              (vx)
    geo.sVoxel=[256;256;256]/2;                   % total size of the image       (mm)
    geo.dVoxel=geo.sVoxel./geo.nVoxel;          % size of each voxel            (mm)



    geo.nDetector=[192;  128];                    % number of pixels              (px)
    geo.dDetector=[3; 3];                     % size of each pixel            (mm)
    geo.sDetector=geo.nDetector.*geo.dDetector; % total size of the detector    (mm)


    % Auxiliary
    geo.accuracy=0.5;                           % Accuracy of FWD proj          (vx/sample)
    geo.mode='cone';                         % Accuracy of FWD proj          (vx/sample)

    nangles=180;
    angles=linspace(0,2*pi-2*pi/nangles,nangles)-pi;
    projections=Ax(fullcheese,geo,angles,'interpolated');

[![Enter image description here][4]][4]

And finally I reconstructed it using two different mathematical methods, just for better cheese-analysis.

    fdkcheese=FDK(projections, geo, angles);
    ossartcheese=OS_SART(projections, geo, angles, 50);

Resulting in this deep insight on how cheese is, with non-destructive testing. (The image shows slices of cheese.)

    plotImg([sartcheese, fdktest], 'dim', 3, 'savegif', 'cheeses.gif')

[![Enter image description here][5]][5]

Now you can know how to cut the cheese so everyone gets equal amount of holes, before even cutting!

----

*Disclaimer: I programmed the TIGRE toolbox and am not trying to promote it. I just know how to make cheese fast with it.

  [1]: https://i.stack.imgur.com/oJKjg.png
  [2]: https://kt.cern/success-stories/tigre-new-open-source-software-medical-imaging
  [3]: https://i.stack.imgur.com/qePXp.gif
  [4]: https://i.stack.imgur.com/oSXKm.gif
  [5]: https://i.stack.imgur.com/k8kOv.gif