)))
缩放函数
%参数说明:initimage为初始图像,x_Change为x方向变化尺度,y_Change为y方向变化尺度
function y_init=Lsy_ScaleChange(initimage,x_Change,y_Change)
[R, C] = size(initimage); % 获取图像大小
R_new=x_Change*R;%缩放后的矩阵行号
C_new=y_Change*C;%缩放后的矩阵列号
resultimage = zeros(R_new,C_new); %初始化结果矩阵。每个像素点默认初始化为0(黑色)
% 缩放的变换矩阵
Change = [
1/x_Change 0 0;
0 1/y_Change 0;
0 0 1];
%对空白(嗯~或者可以叫它空黑,因为0是黑色的嘛)矩阵逐行逐列进行对应填充。
for i = 1 : R_new
for j = 1 : C_new
temp = [i;
j;
1];
temp = Change * temp; %矩阵乘法进行变换。得到要取的原像素的行列号位置
%x_init、y_init只是原始图像initimage中的行列号的位置
x_init = uint8(temp(1, 1));
y_init = uint8(temp(2, 1));
resultimage(i, j) = initimage(x_init, y_init);%相当于两个坐标系对应。
end
end
imshow(uint8(resultimage))
end
旋转角度函数
function y=Lsy_AngleChange(initimage,angle_degree)
[r,c,d]=size(initimage);
% 角度转换成弧度函数——degtorad
angle_radian=degtorad(angle_degree);
% 计算其角度正余弦
sin_angle=sin(angle_radian);
cos_angle=cos(angle_radian);
% 计算变换之后的图像矩阵行列数
C_new=round(abs(cos_angle)*r+c*abs(sin_angle));%列数w
R_new=round(abs(cos_angle)*c+r*abs(sin_angle));%行数
% 初始化新的空白的旋转后的图像矩阵
AngleImage=uint8(zeros(R_new,C_new,d));
for x=1:C_new
for y=1:R_new
x0 = uint32(x*cos_angle + y*sin_angle -0.5*C_new*cos_angle-0.5*R_new*sin_angle+0.5*c);
y0= uint32(y*cos_angle-x*sin_angle+0.5*C_new*sin_angle-0.5*R_new*cos_angle+0.5*r);
x0=round(x0); %最邻近插值
y0=round(y0); %最邻近插值
if x0>0 && y0>0&& c >= x0&& r >= y0
AngleImage(x,y,:) = initimage(x0,y0,:);
end
end
end
imshow(uint8(AngleImage));
end