Matlab图片缩放旋转



)))

缩放函数

%参数说明: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

文章作者: 李世昱
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 李世昱 !
评论
  目录