2-D sinusoidal surface is just an sinus function in 2D domain. On the other words, it is image of two-dimensional function sin.
function I=sinSurf(varargin)
%create sinusoidal 2D function (image)
%INPUT
% - theta - angle in radians (default pi/2)
% - lambda - frequency (default 0.5)
% - Isize - output image size (default 256);
% - delta - phase (default 0.0);
%OUTPUT
% - I - double matrix double (-1..1) of sinusoidal function
theta=pi/2;
Isize = 256;
mag=0.5;
lambda=0.5;
delta=0;
if nargin >= 1
theta=varargin{1};
end
if nargin>=2
lambda=varargin{2};
end
if nargin>=3
Isize=varargin{3};
end
if nargin>=4
delta=varargin{4};
end
I=zeros(Isize,Isize);
cosa=cos(theta);
sina=sin(theta);
for x=1:Isize
for y=1:Isize
xprime = (x*cosa+y*sina)/Isize;
valu = mag*sin(2*pi*(xprime/lambda)-delta);
I(x,y)=valu;
end
end
Below some examples:
a) For: theta=pi/2;
s=sinSurf();
imshow(s,[-1 1]);colormap(jet);colorbar;
figure, mesh(s); axis([1 256 1 256 -1 1]); axis square;
b) For: theta=pi/4;
s=sinSurf(pi/4);
imshow(s,[-1 1]);colormap(jet);colorbar;
figure, mesh(s); axis([1 256 1 256 -1 1]); axis square;
c) For: theta=pi/2; lambda=0.25;
s=sinSurf(pi/2,0.25);
imshow(s,[-1 1]);colormap(jet);colorbar;
figure, mesh(s); axis([1 256 1 256 -1 1]); axis square;
Thank you very much for this great post!
ReplyDeleteThough the code is simple, its very fantastic in what one can do with it. Thanks for the post
ReplyDeleteThank you very much. It is helpful and so interesting.
ReplyDeleteUndefined function or method 'sinSurf' for input arguments of
ReplyDeletetype 'double'.
F#CK YOU