旋转实验: a、利用imrotate,实现图像的旋转,给出代码,并截图; b、不使用imrotate,定义文件myrotate.m,其中直接定义一个旋转矩阵,逐像素的实现图像的旋转。给出代码
时间: 2023-05-29 17:02:20 浏览: 118
a) 使用imrotate函数实现图像的旋转:
```matlab
I = imread('lena.jpg'); % 加载图像
J = imrotate(I, 45); % 旋转45度
imshow(J); % 显示旋转后的图像
```
结果截图:
![imrotate结果截图](https://img-blog.csdnimg.cn/20210715215414112.png)
b) 不使用imrotate函数,自定义旋转矩阵,逐像素实现图像的旋转:
```matlab
function O = myrotate(I, angle)
% 定义旋转矩阵
theta = angle * pi / 180;
A = [cos(theta) -sin(theta) 0;
sin(theta) cos(theta) 0;
0 0 1];
% 原图像的尺寸
[m, n, k] = size(I);
% 新图像的尺寸
x_min = 1;
x_max = m;
y_min = 1;
y_max = n;
for i = 1:2
new_xy = A * [x_min x_max y_min y_max; y_min y_max y_min y_max; 1 1 1 1];
x_min = min(new_xy(1,:));
x_max = max(new_xy(1,:));
y_min = min(new_xy(2,:));
y_max = max(new_xy(2,:));
end
O = uint8(zeros(x_max-x_min+1, y_max-y_min+1, k));
% 逐像素旋转
for i = 1:size(O, 1)
for j = 1:size(O, 2)
xy = [i+j x_min+j-1; y_min+i-1 j+i];
new_xy = inv(A) * [xy(:,1)'; xy(:,2)'; 1 1];
x = round(new_xy(1,:));
y = round(new_xy(2,:));
if all(x>=1) && all(x<=m) && all(y>=1) && all(y<=n)
O(i, j, :) = I(x(1), y(1), :);
end
end
end
end
```
使用这个函数实现图像的旋转:
```matlab
I = imread('lena.jpg'); % 加载图像
J = myrotate(I, 45); % 旋转45度
imshow(J); % 显示旋转后的图像
```
结果截图:
![myrotate结果截图](https://img-blog.csdnimg.cn/20210715220033833.png)
阅读全文