contourPlotROI

Restricts the contrast to ROI and plots 3D array q on ROI as contour.

Contents

Syntax

qROI = contourPlotROI(q, seti, part, levelPlotValue)

Description

qROI = contourPlotROI(q, seti, part, levelPlotValue) restricts the contrast q to ROI and plots isosurface data with isosurface value levelPlotValue of the real or imaginary part of the contrast (part is 'real' or 'imag').

Input Arguments

The structural array seti has to contain the fields:

For details of this fields see setGrid.html.

Output Arguments

Plot the isosurface data with isosurface value levelPlotValue.

See Also:

Code

function qROI = contourPlotROI(q, seti, part, levelPlotValue)
% part: 'real' or 'imag'
%if ~exist(part,'var')
%    part = 'real';
%end

Resctrict CD to ROI

if (length(size(q))==2)&&(numel(q)==max(size(q))) % data is vector
    if numel(q)==numel(seti.ROImask)
        q = reshape(q, size(seti.ROImask));
        qROI = restrictCDtoROI(q, seti.ROImask);
    elseif numel(q)==numel(seti.ballMaskROI)
        qROI = reshape(q, size(seti.ballMaskROI));
    else
        fprintf('Error in contourPlotROI.m: Do not find suitable size of vector to transform vector into array\n');
        qROI=q;
    end
elseif length(size(q))==2 % data is matrix
    if numel(q)==numel(seti.ROImask)
        qROI = restrictCDtoROI(q, seti.ROImask);
    elseif numel(q)==numel(seti.ballMaskROI)
        qROI = reshape(q, size(seti.ballMaskROI));
    else
        fprintf('Error in contourPlotROI.m: Do not find suitable size of 2D array\n');
        qROI=q;
    end
elseif length(size(q))==3
    if numel(q)==numel(seti.ROImask)
        qROI = restrictCDtoROI(q, seti.ROImask);
    elseif numel(q)==numel(seti.ballMaskROI)
        qROI=q;
    else
        fprintf('Error in contourPlotROI.m: Do not find suitable size of 3D array\n');
        qROI=q;
    end
end
% qROI should now be the restriction of q to ROI and transformed into seti.dim-array

Set levelPlotValue

if ~exist('levelPlotValue', 'var')
    levelPlotValue = 0.3; % default
end

Real or imaginary part

% plot real part
% qROI=real(qROI);

switch part
    case 'real'
        qROI = real(qROI);
    case 'imag'
        qROI = imag(qROI);
    otherwise
        error('You have to choose real or imag part.')
end

Isosurface

p = patch(isosurface(reshape(seti.gridROI(1,:),size(seti.ballMaskROI)), ...
    reshape(seti.gridROI(2,:),size(seti.ballMaskROI)), ...
    reshape(seti.gridROI(3,:),size(seti.ballMaskROI)), qROI , levelPlotValue));
isonormals(reshape(seti.gridROI(1,:),size(seti.ballMaskROI)), ...
    reshape(seti.gridROI(2,:),size(seti.ballMaskROI)), ...
    reshape(seti.gridROI(3,:),size(seti.ballMaskROI)), qROI, p);
if ~isfield(seti,'faceColor3D') % is also done by checkfield in setGeomSim, but this is a backup in case of old guides from tboxIPscatt
    seti.faceColor3D = 'red';
end
% set(p,'FaceColor','red','EdgeColor','none');
set(p,'FaceColor',seti.faceColor3D,'EdgeColor','none');
daspect([1,1,1])
view(3);
axis([min(seti.gridROI(1,:)) max(seti.gridROI(1,:)) min(seti.gridROI(2,:)) ...
      max(seti.gridROI(2,:)) min(seti.gridROI(3,:)) max(seti.gridROI(3,:))]);
grid on
camlight
daspect([1 1 1])
camlight(-45,50)
hold on
xlabel('x');
ylabel('y');
zlabel('z');
%title(sprintf('reconstructed contrast (%s part)',part));

X_P = get(p,'XData');
Y_P = get(p,'YData');
Z_P = get(p,'ZData');

s1 = patch(max(seti.gridROI(1,:))*ones(size(Y_P)),Y_P,Z_P,[0.75,0.75,0.75]);
s2 = patch(X_P,max(seti.gridROI(2,:))*ones(size(X_P)),Z_P,[0.75,0.75,0.75]);
s3 = patch(X_P,Y_P,min(seti.gridROI(3,:))*ones(size(X_P)),[0.25,0.25,0.25]);

set(s1,'EdgeColor','none');
set(s2,'EdgeColor','none');
set(s3,'EdgeColor','none');

hold off
end