y=rand(points+bc, points+bc);
title("Randomly generated data")
Ysmooth1 = conv2(y,k,'same');
title('Box carr filter ( filter2)')
for ii = (bc/2): points+bc/2 -1
for jj=(bc/2): points+bc/2 - 1
Zdata(ii-bc/2+1,jj-bc/2+1)=Ysmooth1(ii,jj);
Surfaceplot = mesh(Zdata- mean(Zdata));
title('Z data extraction to obtain the surface')
title('Z data representing the surface')
generated_x= Surfaceplot.XData;
generated_y = Surfaceplot.YData;
generated_z = Surfaceplot.ZData;
for row = 1:length(generated_y)
for col = 1:length(generated_x)
x_row_domain(index) = generated_x(col);
y_row_domain(index) = generated_y(row);
z_row_domain(index) = generated_z(row, col);
0 cos(alpha_rot) -sin(alpha_rot);
0 sin(alpha_rot) cos(alpha_rot)] ;
Ry = [cos(beta_rot) 0 sin(beta_rot);
-sin(beta_rot) 0 cos(beta_rot) ];
Rz = [cos(gama_rot) -sin(gama_rot) 0;
sin(gama_rot) cos(gama_rot) 0;
domain_surface = [x_row_domain;y_row_domain;z_row_domain];
rotated_surface = R_trans*domain_surface;
fig2.WindowState = 'maximized';
scatter3(x_row_domain,y_row_domain,z_row_domain'.')
title('ROI before rotation ')
scatter3(rotated_surface(1,:),rotated_surface(2,:),rotated_surface(3,:),'*','r')
title('Domain after applying rotation')
for iteration = 1:maxIterations
transformed_surface = R * rotated_surface + T;
[r,c] = size(domain_surface);
[rr, cc]= size(rotated_surface);
distance = norm(rotated_surface(:, i) - domain_surface(:, j));
if distance < min_distance
closest_points = domain_surface(:, closest_indices);
centroid_domain = mean(domain_surface, 2);
centroid_closest = mean(closest_points, 2);
H = (rotated_surface - centroid_domain) * (closest_points - centroid_closest)';
t_new = centroid_domain - R_new * centroid_closest;
if norm(t_new) < tolerance
final_transformed_surface = R * rotated_surface + T;
fig3.WindowState = 'maximized';
scatter3(rotated_surface(1,:),rotated_surface(2,:),rotated_surface(3,:),'*','r')
scatter3(final_transformed_surface(1,:), final_transformed_surface(2,:), final_transformed_surface(3,:), 'o','b')
legend('Original Rotated Points', 'Transformed Domain Points');
title('ICP Registration Results');