function [It x y] = imtile(I, h, k, overlap, graphic)
if (nargin < 4), overlap = 0; end;
if (nargin < 5)
graphic = false;
end;
height = size(I, 1);
width = size(I, 2);
if (h < 0)
delta_x = -h;
else
delta_x = height/h;
end;
N_vertical_tiles = floor(height/delta_x);
x = zeros(1, N_vertical_tiles+1);
x(1) = 1;
for l = 1:N_vertical_tiles
x(l+1) = l*delta_x;
end;
if (x(end) < height)
x(end+1) = height;
end;
if (k < 0)
delta_y = -k;
else
delta_y = width/k;
end;
N_horiziontal_tiles = floor(width/delta_y);
y = zeros(1, N_horiziontal_tiles+1);
y(1) = 1;
for l = 1:N_horiziontal_tiles
y(l+1) = l*delta_y;
end;
if (y(end) < width)
y(end+1) = width;
end;
x = floor(x);
y = floor(y);
N_vertical_tiles = length(x)-1;
N_horiziontal_tiles = length(y)-1;
l = 1;
It = cell(N_vertical_tiles,N_horiziontal_tiles);
for i = 1:N_horiziontal_tiles
y_in = y(i)-overlap;
if (y_in < 1), y_in = 1; end;
y_fin = y(i+1)+overlap;
if (y_fin > width), y_fin = width; end;
yy = y_in:y_fin-1;
for j = 1:N_vertical_tiles
x_in = x(j)-overlap;
if (x_in < 1), x_in = 1; end;
x_fin = x(j+1)+overlap;
if (x_fin > height), x_fin = height; end;
xx = x_in:x_fin-1;
It{j,i} = I(xx,yy,:);
l = l + 1;
end;
end;
if graphic
figure;
imshow(I);
hold on
for i = 1:N_vertical_tiles+1
plot([1 width], [x(i) x(i)], 'r', 'LineWidth', 2)
end;
for j = 1:N_horiziontal_tiles+1
plot([y(j) y(j)], [1 height], 'r', 'LineWidth', 2)
end;
for i = 1:N_vertical_tiles
for j = 1:N_horiziontal_tiles
text(0.5*(y(j)+y(j+1)), 0.5*(x(i)+x(i+1)), sprintf('(%d,%d)',i,j), ...
'Color', 'r', 'FontName', 'Arial', 'FontSize', 10, 'FontAngle', 'normal', ...
'HorizontalAlignment','center',...
'BackgroundColor', [0.9 0.9 0.0]);
end;
end;
axis on
end;
return