|
在Matlab中,图像是按照二维矩阵的形式表示的。所以对图像的操作就是对矩阵的操作。
对图像进行缩放、平移、旋转,都可以转化为矩阵的运算。
关于变换矩阵的构造,请参考:
《 [gym 101047C Robotics Competition] 矩阵快速幂求解点旋转平移N次之后的位置》
图像的平移
- init = imread('Fig3.tif'); % 读取图像
- [R, C] = size(init); % 获取图像大小
- res = zeros(R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
- delX = 50; % 平移量X
- delY = 50; % 平移量Y
- tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的变换矩阵
- for i = 1 : R
- for j = 1 : C
- temp = [i; j; 1];
- temp = tras * temp; % 矩阵乘法
- x = temp(1, 1);
- y = temp(2, 1);
- % 变换后的位置判断是否越界
- if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
- res(x, y) = init(i, j);
- end
- end
- end;
- imshow(uint8(res)); % 显示图像
复制代码 图像的旋转:- init = imread('Fig3.tif'); % 读取图像
- [R, C] = size(init); % 获取图像大小
- res = zeros( R, C); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
- alfa = -15 * 3.1415926 / 180.0; % 旋转角度
- tras = [cos(alfa) -sin(alfa) 0; sin(alfa) cos(alfa) 0; 0 0 1]; % 旋转的变换矩阵
- for i = 1 : R
- for j = 1 : C
- temp = [i; j; 1];
- temp = tras * temp;% 矩阵乘法
- x = uint16(temp(1, 1));
- y = uint16(temp(2, 1));
- % 变换后的位置判断是否越界
- if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
- res(i, j) = init(x, y);
- end
- end
- end;
- imshow(uint8(res)); % 显示图像
复制代码 图像的镜像:
- init = imread('Fig3.tif');
- [R, C] = size(init);
- res = zeros(R, C);
- for i = 1 : R
- for j = 1 : C
- x = i;
- y = C - j + 1;
- res(x, y) = init(i, j);
- end
- end
- imshow(uint8(res));
复制代码
具体参考链接:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|