Non-constant corner, ball and sparse object in 2D
For reference see incontrastsRef.html.
function q = cornerBallSparse2D(X1,X2,varargin) % two corners and one ball with non constant contrast seti = varargin{end}; R = seti.rCD/2; n = sqrt(length(X1)); % n = nCD or nROI % -- corner: start qCorner = corner2D(X1,X2,seti); % size 1 x seti.nROI^2 or 1 x seti.nCD^2 qCorner = 0.8*rot90(qCorner,2); % corner right top (0.8 as in twoCornersOneBall2D.m) % new layer... lspace = linspace(0,1,n); % values between 0 and 1 L = repmat(lspace,[n 1]); % Layer: left high, right low... % L is a matrix... but we need a vector... L = reshape(L,[1 n^2]); L = 1.5.*L; qCorner = L.*qCorner; %-- corner: end % -- ball: start qBall = 1.0*((X2-15/32*R).^2 + (X1+15/32*R).^2 <= (1/16*R)^2); % -- ball: end % -- sparse: start qLeft = corner2D(X1,X2,seti); y = ZeroOne(linspace(1,18,n)); % first version %y = ZeroOne(linspace(1,128,n)); % second version (finer) [~, Y2] = meshgrid(y,y); qSparse = reshape(Y2.*reshape(qLeft,[n n]),[1 n^2]); % -- sparse: end % -- all 3 objects together -- q = qCorner + qBall + qSparse; q = double(q); end function y = ZeroOne(x) % input x is a vector % output y is a vector f = zeros(1,length(x)); y = zeros(1,length(x)); for i = 1:length(x) f(i) = floor(x(i)); if mod(f(i),2) == 0 % even y(i) = 1; else % odd y(i) = 0; end end end